SQL wil niet?
Ik ben bezig met een simpele website voor een project van ons.
Hier moeten we statusupdates met foto's enzo kunnen plaatsen.
Probleem is: ik krijg geen nieuwsberichten uit de database.
Als ik login krijg ik geen max(messageID) (die ik echo na de query), en een select statement op de homepage wil niet. Maar ik krijg ook geen error dat de DB connectie niet klopt.
Code:
Index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$page="Home";
include_once("login.php"); //method to check if logged in.
include_once("database.php"); //configs for querying to database
include_once("newsitem.php"); //makeup for a news message
?>
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="menubar.css">
<link rel="shortcut icon" type="image/png" href="images/favico.png" />
<title>HOME</title>
</head>
<body>
<?php include_once("menu.php"); ?>
<center>
<?php
//here come the news messages
if(TRUE) {
$query = "SELECT messageID, uploaded, message FROM Messages ORDER BY uploaded DESC LIMIT 10";
$result = query($query);
echo $result[0];
forEach($result as $news) {
$photoQuery = "SELECT name FROM Photos WHERE messageID = '" . $news['messageID'] . "'";
$photos = query($photoQuery);
//$videoQuery = "SELECT name FROM Videos WHERE messageID = '" . $news['messageID'] . "' ";
//$videos = query($videoQuery);
news($news['uploaded'], $news['message'], $photos, $videos);
}
} else {
news("2016-4-19 10:48:13", "Dreamteam!", array("images/logo.png"), array());
}
?>
<?php include_once("foot.php"); ?>
</center>
</body>
</html>
$page="Home";
include_once("login.php"); //method to check if logged in.
include_once("database.php"); //configs for querying to database
include_once("newsitem.php"); //makeup for a news message
?>
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="menubar.css">
<link rel="shortcut icon" type="image/png" href="images/favico.png" />
<title>HOME</title>
</head>
<body>
<?php include_once("menu.php"); ?>
<center>
<?php
//here come the news messages
if(TRUE) {
$query = "SELECT messageID, uploaded, message FROM Messages ORDER BY uploaded DESC LIMIT 10";
$result = query($query);
echo $result[0];
forEach($result as $news) {
$photoQuery = "SELECT name FROM Photos WHERE messageID = '" . $news['messageID'] . "'";
$photos = query($photoQuery);
//$videoQuery = "SELECT name FROM Videos WHERE messageID = '" . $news['messageID'] . "' ";
//$videos = query($videoQuery);
news($news['uploaded'], $news['message'], $photos, $videos);
}
} else {
news("2016-4-19 10:48:13", "Dreamteam!", array("images/logo.png"), array());
}
?>
<?php include_once("foot.php"); ?>
</center>
</body>
</html>
Login.php (test setup)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if(isset($_GET['username']) && isset($_GET['password'])) {
if($_GET['username'] == "HankyPanky" && $_GET['password'] == "HocusPocusPilatusPats") {
$_SESSION['username'] = "HankyPanky";
include_once("database.php");
$maxID = "SELECT MAX(messageID) FROM Messages";
$num = query($maxID);
echo $num; //dit echo't niks
$query = "INSERT INTO Messages (messageID, uploaded, message) VALUES (". $num + 1.", '". date("Y-m-d H:i:s") ."', 'Logged in!')";
echo query($query); //echo't niks, zet ook niks in de DB
}
}
?>
session_start();
if(isset($_GET['username']) && isset($_GET['password'])) {
if($_GET['username'] == "HankyPanky" && $_GET['password'] == "HocusPocusPilatusPats") {
$_SESSION['username'] = "HankyPanky";
include_once("database.php");
$maxID = "SELECT MAX(messageID) FROM Messages";
$num = query($maxID);
echo $num; //dit echo't niks
$query = "INSERT INTO Messages (messageID, uploaded, message) VALUES (". $num + 1.", '". date("Y-m-d H:i:s") ."', 'Logged in!')";
echo query($query); //echo't niks, zet ook niks in de DB
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
function query($query) {
if($query == "") {
echo("Error: query is empty.");
return FALSE;
}
$mysqli = connect();
if($mysqli == FALSE) {
echo("Error: could not connect.");
return FALSE;
}
$result = mysqli_query($query);
if($result === FALSE) {
echo("Error: query is empty");
return FALSE;
}
mysqli_close($mysqli);
return $result;
}
function connect() {
$hostname = "localhost";
$username = "****";
$password = "****";
$database = "****";
$mysqli = mysqli_connect($hostname, $username, $password, $database);
if (mysqli_connect_errno($mysqli)) {
echo "Could not login to database: " . mysqli_connect_error();
return FALSE;
} else {
return $mysqli;
}
}
?>
function query($query) {
if($query == "") {
echo("Error: query is empty.");
return FALSE;
}
$mysqli = connect();
if($mysqli == FALSE) {
echo("Error: could not connect.");
return FALSE;
}
$result = mysqli_query($query);
if($result === FALSE) {
echo("Error: query is empty");
return FALSE;
}
mysqli_close($mysqli);
return $result;
}
function connect() {
$hostname = "localhost";
$username = "****";
$password = "****";
$database = "****";
$mysqli = mysqli_connect($hostname, $username, $password, $database);
if (mysqli_connect_errno($mysqli)) {
echo "Could not login to database: " . mysqli_connect_error();
return FALSE;
} else {
return $mysqli;
}
}
?>
Newsitem.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function news($uploaded, $news, $photos, $videos) {
echo "<hr><h3>" . $uploaded . "</h3>";
echo "<p>" . $news . "</p>";
forEach($photos as $photo) {
echo "<p><img src='" . $photo . "' width=''></p> ";
} unset($photo);
//forEach($videos as $video) { //need video player or youtube link
// echo "<p><img src='" . $video . "' width=''></p> ";
//} unset($video);
//we hebben nog geen video player dus voor nu is het uitgecomment
}
?>
function news($uploaded, $news, $photos, $videos) {
echo "<hr><h3>" . $uploaded . "</h3>";
echo "<p>" . $news . "</p>";
forEach($photos as $photo) {
echo "<p><img src='" . $photo . "' width=''></p> ";
} unset($photo);
//forEach($videos as $video) { //need video player or youtube link
// echo "<p><img src='" . $video . "' width=''></p> ";
//} unset($video);
//we hebben nog geen video player dus voor nu is het uitgecomment
}
?>
je vergeet te fetchen. Een query echo'en levert alleen een resource op.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if(isset($_GET['username']) && isset($_GET['password'])) {
if($_GET['username'] == "HankyPanky" && $_GET['password'] == "HocusPocusPilatusPats") {
$_SESSION['username'] = "HankyPanky";
include_once("database.php");
$maxID = "SELECT MAX(messageID) FROM Messages";
$num = mysqli_fetch_assoc(query($maxID));
echo $num;
$query = "INSERT INTO Messages (messageID, uploaded, message) VALUES (". $num + 10 .", '". date("Y-m-d H:i:s") ."', 'Logged in!')";
echo query($query);
}
}
?>
session_start();
if(isset($_GET['username']) && isset($_GET['password'])) {
if($_GET['username'] == "HankyPanky" && $_GET['password'] == "HocusPocusPilatusPats") {
$_SESSION['username'] = "HankyPanky";
include_once("database.php");
$maxID = "SELECT MAX(messageID) FROM Messages";
$num = mysqli_fetch_assoc(query($maxID));
echo $num;
$query = "INSERT INTO Messages (messageID, uploaded, message) VALUES (". $num + 10 .", '". date("Y-m-d H:i:s") ."', 'Logged in!')";
echo query($query);
}
}
?>
Zo doet ie nog steeds niks:(
Idd, dat geeft dan een resource terug maar dan zou die die resource toch moeten echo'en? dat gebeurde namelijk ook niet...
Helemaal bovenin je script.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
function query($query) {
if($query == "") {
echo("Error: query is empty.");
return FALSE;
}
$mysqli = connect();
if($mysqli == FALSE) {
echo("Error: could not connect.");
return FALSE;
}
$result = mysqli_query($mysqli, $query); //$mysqli vergeten
if($result === FALSE) {
echo("Error: query is empty");
return FALSE;
}
mysqli_close($mysqli);
return $result;
}
function connect() {
...
}
?>
function query($query) {
if($query == "") {
echo("Error: query is empty.");
return FALSE;
}
$mysqli = connect();
if($mysqli == FALSE) {
echo("Error: could not connect.");
return FALSE;
}
$result = mysqli_query($mysqli, $query); //$mysqli vergeten
if($result === FALSE) {
echo("Error: query is empty");
return FALSE;
}
mysqli_close($mysqli);
return $result;
}
function connect() {
...
}
?>
Ik krijg nu iets met een array to string conversion, als ik in login.php
doe. Ik denk dat dit te maken heeft met het feit dat $num een array is met 1 rij en 1 kolom (bevat dus 1 variabele)... Hoe krijg ik die eruit?
Toevoeging op 22/04/2016 13:18:39:
Edit: oh hij print wel 'Array' tussen de errors door xD
echo $num[0];
Misschien moet ik het veldnaam meegeven?
Als ik de query in PhpMyAdmin uitvoer krijg ik een veld te zien genaamd MAX(messageID).
Jup, die ingevoerd ipv [0] en fixt. Thnx :)
SELECT MAX(messageID) AS aantal FROM Messages
Dan kan dit doen:
echo $num['aantal'];
En na de query sluit je connectie.
In elk geval bij de oude mysql-functies was het zo, dat bij het sluiten van de connectie de inhoud van de resultsets verloren ging.
Ik weet niet wat het nu doet, maar zinnig lijkt het me niet om voor elke query opnieuw de connectie te maken en te sluiten. Dat is namelijk naast overbodig, ook nogal een dure actie
Als het gaat om ingebouwd foutafhandeling, dan kan je prima maar de OO-versie van MySQLi kijken. Dan kan je met een eigen nieuwe class de interne MySQLi-class extenden en de query()-functie overiden met een foutafhandeling.