data word niet opgehaald uit database via if else

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ray Meerwijk

Ray Meerwijk

20/01/2019 13:46:13
Quote Anchor link
Aloha luitjes.

Ben al enige tijd bezig om data op te halen uit mijn database maar op een of andere wijze krijg ik niets terug.
Helaas staar ik me al enige tijd blind dus hoop dat jullie me wat inzicht kunnen geven.
De fout zou volgens mij in de query moeten zitten in de if else aangezien de if/else wel werkt met tekstuele info.

Hier onder de code

Quote:
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
<?php

error_reporting( E_ALL );

include 'include/header.php';
include 'db.php';

$id = $_GET['id'];

if ($id='')

    {

        $row = $conn->query($sql);
        $sql = "SELECT * FROM pages WHERE id='1'";
            echo $row['inhoud'];

    }


else

    {
        
        $row2 = $conn->query($sql2);
        $sql2 = "SELECT * FROM pages WHERE id='$id'";
            echo $row2['inhoud'];

    }

    
include 'include/footer.php';
?>


bij voorbaat dank voor jullie hulp.
Ray
 
PHP hulp

PHP hulp

18/07/2019 01:25:08
 
- Ariën -
Beheerder

- Ariën -

20/01/2019 13:53:01
Quote Anchor link
Een query() geeft grofweg alleen aan of de query gelukt is of niet.

Quote:
Https://php.net/mysqli_query:

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.


Als je data wilt ophalen uit de database moet je deze nog fetchen met fetch_assoc() .

Quote:
Https://php.net/mysqli_fetch_assoc:
Returns an associative array that corresponds to the fetched row or NULL if there are no more rows.



PS: Je bent vatbaar voor hacking vua SQL-injection omdat je jouw GET-variabele niet escaped.
Gewijzigd op 20/01/2019 13:58:35 door - Ariën -
 
Ray Meerwijk

Ray Meerwijk

20/01/2019 14:06:07
Quote Anchor link
Bedankt voor je info, ga er mee aan de slag
 
- Ariën -
Beheerder

- Ariën -

20/01/2019 14:17:10
Quote Anchor link
Oke, succes! Als je vragen hebt horen we het wel.
 
Rob Doemaarwat

Rob Doemaarwat

20/01/2019 14:43:38
Quote Anchor link
Eh, en misschien is het handig je $sql te definiëren voordat je 'm gebruikt!?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
//dus niet
        $row = $conn->query($sql); //$sql is hier niet nog niet bekend
        $sql = "SELECT * FROM pages WHERE id='1'"; //helaas - te laat
//maar

        $sql = "SELECT * FROM pages WHERE id='1'";
        $row = $conn->query($sql); //$sql nu wel bekend
?>
Gewijzigd op 20/01/2019 14:44:13 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

20/01/2019 16:23:37
Quote Anchor link
^ Pretty much this.

Je kunt ook een hoop dubbele code uit je programma verwijderen als je $id een initiële waarde geeft (1). Op het moment dat je codepassages aan het herhalen bent is dit in een indicatie dat er ergens iets geoptimaliseerd kan worden.

Vervolgens controleer je of $_GET['id'] bestaat en een geldige waarde bevat, en alleen dan substitueer je de default door de deze waarde. En dan hoef je uiteindelijk maar één query te definiëren en uit te voeren. Maar dan dus wel in de goede volgorde zoals @Rob hierboven aangeeft.

Ook is het een goede gewoonte om alle variabele delen in een query die mogelijk een speciale betekenis hebben in de SQL-context te escapen, zodat de kans op een alternatieve interpretatie van de query (dit wordt ook wel SQL-injectie genoemd) compleet wordt geëlimineerd. Dit doe je met de daarvoor bestemde escape-functie (EDIT: er van uitgaande dat je MySQLi gebruikt, anders moet je even toelichten wat je in db.php doet). Dit is overigens alleen effectief in combinatie met (enkele) quotes. Het een is niet veilig zonder het ander.
Gewijzigd op 20/01/2019 16:26:32 door Thomas van den Heuvel
 
- SanThe -

- SanThe -

20/01/2019 17:30:50
Quote Anchor link
Dit is geen vergelijking maar een toekenning.

if ($id='')


Dit is een vergelijking:

if ($id=='')
 
Rob Doemaarwat

Rob Doemaarwat

20/01/2019 19:31:42
Quote Anchor link
Thomas van den Heuvel op 20/01/2019 16:23:37:
Je kunt ook een hoop dubbele code uit je programma verwijderen als je $id een initiële waarde geeft (1).

Dat kan tegenwoordig vrij makkelijk (en meteen warning vrij) via:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$id = $_GET['id'] ?? 1;
 
Ray Meerwijk

Ray Meerwijk

26/01/2019 15:34:25
Quote Anchor link
Bedankt voor alle hulp, heb alles opgenomen en toegepast en werkend gekregen.

Ray
 
Rick Okkersen

Rick Okkersen

28/01/2019 15:13:24
Quote Anchor link
Bedenk wel dat bij een GET variabele die je rechtstreeks in een database query gebruikt, dat wel eens beveiligingsproblemen kan opleveren..... In dit geval blijken het pagina's?? Maar als je dit met gebruikers doet, dan kan dat wel eens "gevaarlijk" worden!
 



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.