SQL wil niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin Zegikniet

Kevin Zegikniet

22/04/2016 12:25:44
Quote Anchor link
Hallo allen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>


Login.php (test setup)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
    }
}

?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }
}

?>


Newsitem.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

    
}
?>
 
PHP hulp

PHP hulp

24/04/2024 17:08:11
 
- Ariën  -
Beheerder

- Ariën -

22/04/2016 12:33:41
Quote Anchor link
je vergeet te fetchen. Een query echo'en levert alleen een resource op.
 
Kevin Zegikniet

Kevin Zegikniet

22/04/2016 12:42:21
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }
}

?>


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...
 
- SanThe -

- SanThe -

22/04/2016 13:04:03
Quote Anchor link
Zet je errors eens aan.
Helemaal bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
 
Kevin Zegikniet

Kevin Zegikniet

22/04/2016 13:17:40
Quote Anchor link
Dank, ik heb deze in login.php gezet en kwam erachter dat ik niet de connectie meegaf in databases.php.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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() {
...
}

?>


Ik krijg nu iets met een array to string conversion, als ik in login.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo $num;

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
 
- SanThe -

- SanThe -

22/04/2016 13:22:18
Quote Anchor link
echo $num[0];
 
Kevin Zegikniet

Kevin Zegikniet

22/04/2016 13:26:09
Quote Anchor link
Notice: Undefined offset: 0 in /home/kevinnau/domains/black-widow.nl/public_html/login.php on line 10

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 :)
 
- SanThe -

- SanThe -

22/04/2016 13:38:22
Quote Anchor link
Of je doet zo:
SELECT MAX(messageID) AS aantal FROM Messages

Dan kan dit doen:
echo $num['aantal'];
 
Ivo P

Ivo P

22/04/2016 13:48:36
Quote Anchor link
je bouwt voor elke query opnieuw een verbinding op met de database.
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
 
- Ariën  -
Beheerder

- Ariën -

22/04/2016 16:42:24
Quote Anchor link
Waarom zou je inderdaad een aparte eigengemaakte functie gebruiken? Je kan toch prima mysqli_query() gebruiken om een query uit te voeren, en mysqli_fetch_assoc() om de result daarvan te fetchen?

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.