php query geeft null sql commando klopt
P.S. ik ben nog maar een beginner met php en mysql, dus er zullen hier en daar wat foutjes zitten, of dingen die beter kunnen, ik weet het, maar kraak me er niet op af. Ik heb daar al eerder ervaring mee gehad.
Als ik dit hier verkeerd post, zou ik graag willen weten waar ik het moet herposten,
Al vast bedankt.
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
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
$filename = $_POST['filename'];
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","xxxx","xxxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT * FROM userwag WHERE offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
if($result !== false)
{
while($row = mysqli_fetch_array($result));
{
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
}
if($row == null)
{
$err = 'there aint no data in this query...';
}
else
{
$err = 'the query is working, no problems here';
}
}
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","xxxx","xxxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT * FROM userwag WHERE offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
if($result !== false)
{
while($row = mysqli_fetch_array($result));
{
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
}
if($row == null)
{
$err = 'there aint no data in this query...';
}
else
{
$err = 'the query is working, no problems here';
}
}
het idee was dat ik met die variabelen een stukje html aanvul met die gegevens.
filename komt van een ander script, heb de query met die filename getest(heb de filename inclusief de sql code geëchod op de html pagina, om daarna in phpadmin uit te voeren).
Gewijzigd op 16/11/2013 20:30:14 door RareAMV Unknown
Deze wordt doorlopen net zo lang totdat $row null is.
Vervolgens ga je $row op null testen, $row zal op die plaats altijd nul zijn.
Wanneer je wilt kijken of de query resultaat geeft zou ik binnen de while lus een echo plaatsen van één van de velden.
Pas ook de volgende regeleven aan :
in:
Volgens mij zitten er nog wel een paar dingetjes in maar dit zijn de belangrijkste
Gewijzigd op 16/11/2013 20:54:24 door Pipo Clown
$filename = $_POST['filename'];
*** De query bevat onbeveiligde userinput en is dus lek.
$sql = "SELECT * FROM userwag WHERE offerweb = '" . $filename . "';";
*** Is gewoon goed zo
if($result !== false)
*** Je overschrijft steeds de $vars.
while($row = mysqli_fetch_array($result));
{
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
}
*** $row is niet meer in de while() dus is ie leeg/null
if($row == null)
ik heb dus de code aangepast hierna:
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
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
//script voor de opmaak voor de opmaak van elk nieuwe offer html pagina.
$filename = $_POST['filename'];
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","root","matchoffer");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
//ben niet zeker of dit zo werkt:
$row = mysqli_fetch_array($result);
//dit had ik bedacht zodat hij als hij geen null returned, hij verder gaat met checken van de sql code en connectie, klopt die niet dan geeft hij dat appart ook aan.
if($row != false)
{
if($result != false)
{
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
else
{
$err = 'there is a problem with the sql code/connection';
}
}
else
{
$err = 'the query is still returns null, why?';
}
$filename = $_POST['filename'];
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","root","matchoffer");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
//ben niet zeker of dit zo werkt:
$row = mysqli_fetch_array($result);
//dit had ik bedacht zodat hij als hij geen null returned, hij verder gaat met checken van de sql code en connectie, klopt die niet dan geeft hij dat appart ook aan.
if($row != false)
{
if($result != false)
{
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
else
{
$err = 'there is a problem with the sql code/connection';
}
}
else
{
$err = 'the query is still returns null, why?';
}
Het werkt nog steeds niet, ik krijg weer dat de query null terugstuurt, ik weet zeker dat ik een voorhanden liggende fout maak... wat doe ik verkeerd...?
Edit: Ik heb misschien een oorzaak, maar ik weet het niet zeker, laat ik proberen het simpel en globaal uit te leggen hoe ik het precies heb nu met het versturen en ophalen van data op het moment dat er data verzonden wordt uit een formulier naar de database:
data gaat uit form naar script(1) die de data verstuurd naar 2 andere scripts(2 en 3) met curl(werkt): script 2 verstuurt data naar de database, en stuurt daarbij ook de bestandsnaam van de aangemaakte html bestand in script 3 naar de database(werkt), script 3 maakt een html pagina aan in map waarvan de naam voor een klein deel uit de data van de form bestaat(werkt), script 3 verstuurt de bestandsnaam naar script 4(werkt), en stuurt je terug naar de homepagina(werkt): script 4 haalt data uit de database, doormiddel het vergelijken van de bestandsnaam van de gemaakte bestand in script 3 en de bestandsnaam in de database verstuurd door script 2(dit doe ik zodat je maar 1 resultaat kunt krijgen, gezien de bestandsnamen uniek zijn)(dit gedeelte werkt dus niet).
Dit is in globaal hoe het er uit moet komen te zien,ik weet dat het hoogst waarschijnlijk 10x makkelijker kan, maar ik ben nu eenmaal iemand die vaak (te) moeilijk denkt. Het laatste gedeelte gaat dus fout, kan het zijn dat de database de informatie uit script 2 nog aan het verwerken is op het moment dat script 4 het probeert op te halen?
Gewijzigd op 16/11/2013 23:30:14 door RareAMV Unknown
$row is een array met de inhoud van de eerste rij uit je database resultaat.
Geen idee hoe PHP hier precies mee om gaat maar $row is in ieder geval geen boolean.
Ik heb onderstaande code niet getest maar probeer het er eens mee:
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
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
//script voor de opmaak voor de opmaak van elk nieuwe offer html pagina.
$filename = $_POST['filename'];
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","root","matchoffer");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
//ben niet zeker of dit zo werkt:
//$row = mysqli_fetch_array($result);
//dit had ik bedacht zodat hij als hij geen null returned, hij verder gaat met checken van de sql code en connectie, klopt die niet dan geeft hij dat appart ook aan.
while ($row = mysqli_fetch_array($result)) {
echo 'Gebruiker : '.$row['username'].'<br.';
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
$filename = $_POST['filename'];
//variable which let you connect to the database
$con = mysqli_connect("127.0.0.1","root","root","matchoffer");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
$result = mysqli_query($con, $sql);
//ben niet zeker of dit zo werkt:
//$row = mysqli_fetch_array($result);
//dit had ik bedacht zodat hij als hij geen null returned, hij verder gaat met checken van de sql code en connectie, klopt die niet dan geeft hij dat appart ook aan.
while ($row = mysqli_fetch_array($result)) {
echo 'Gebruiker : '.$row['username'].'<br.';
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
Gewijzigd op 16/11/2013 23:35:12 door Pipo Clown
Waarom wordt altijd het escapen van verstuurde data vergeten? VERTROUW NOOIT, MAAR DAN OOK ECHT NOOIT DATA VERSTUURD DMV EEN FORMULIER!! Tenzij je wilt dat jouw website gehackt wordt?
Local Dev op 16/11/2013 23:47:05:
Waarom wordt altijd het escapen van verstuurde data vergeten? VERTROUW NOOIT, MAAR DAN OOK ECHT NOOIT DATA VERSTUURD DMV EEN FORMULIER!! Tenzij je wilt dat jouw website gehackt wordt?
Omdat het voor mij prioriteit heeft om de werkelijke problemen eerst op te lossen.
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Overigens gaat het hier om een select waar verder geen variabelen in voorkomen dus dan ben ik niet zo heel erg bang voor injectie oid
Gewijzigd op 16/11/2013 23:57:13 door Pipo Clown
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Toevoeging op 17/11/2013 00:26:35:
Local Dev op 17/11/2013 00:16:16:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:30:58:
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:30:58:
Local Dev op 17/11/2013 00:16:16:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Toevoeging op 17/11/2013 00:26:35:
Toevoeging op 17/11/2013 00:33:04:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:34:28:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:36:13:
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Toevoeging op 17/11/2013 00:26:35:
Local Dev op 17/11/2013 00:16:16:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:33:04:
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:34:28:
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:36:13:
Local Dev op 17/11/2013 00:16:16:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Toevoeging op 17/11/2013 00:26:35:
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:39:04:
lol, wanneer ik mijn bericht aanpas, wordt mijn eerder geplaatste bericht x * de herhaling ..
Toevoeging op 17/11/2013 00:40:41:
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Toevoeging op 17/11/2013 00:26:35:
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
Toevoeging op 17/11/2013 00:39:04:
lol, wanneer ik mijn bericht aanpas, wordt mijn eerder geplaatste bericht x * de herhaling ..
Toevoeging op 17/11/2013 00:40:41:
Local Dev op 17/11/2013 00:16:16:
Blijkbaar wordt dit niet in de query gebruikt?
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
lol, wanneer ik mijn bericht aanpas, wordt mijn eerder geplaatste bericht x * de herhaling ..
Quote:
Eventuele beveiliging kan daarna redelijk simpel aangepakt worden.
Blijkbaar wordt dit niet in de query gebruikt?
Code (php)
1
$sql = "SELECT Username, Niveau, Class, vor, When_Added, Offerweb FROM userwag WHERE Offerweb = '" . $filename . "';";
Het lijkt me wanneer je iemand helpt, je ook wijst op de gevaren in de code? Inplaats daarvan schrijf je een scriptje waarin dit ook maar overgeslagen wordt :D
Controleer altijd op de volgende punten:
- is het formulier echt verzonden op de website zelf
- escape alle data (vertrouw niemand)
lol, wanneer ik mijn bericht aanpas, wordt mijn eerder geplaatste bericht x * de herhaling ..
Pipo Clown op 16/11/2013 23:33:57:
Je test $row != false,
$row is een array met de inhoud van de eerste rij uit je database resultaat.
Geen idee hoe PHP hier precies mee om gaat maar $row is in ieder geval geen boolean.
Ik heb onderstaande code niet getest maar probeer het er eens mee:
$row is een array met de inhoud van de eerste rij uit je database resultaat.
Geen idee hoe PHP hier precies mee om gaat maar $row is in ieder geval geen boolean.
Ik heb onderstaande code niet getest maar probeer het er eens mee:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
while ($row = mysqli_fetch_array($result)) {
echo 'Gebruiker : '.$row['username'].'<br.';
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
echo 'Gebruiker : '.$row['username'].'<br.';
$username = $row['Username'];
$class = $row['Class'];
$niveau = $row['Niveau'];
$vor = $row['vor'];
$when_added = $row['When_Added'];
$description = $row['Description'];
$err = 'query did not return null, there is no problem with the sql';
}
Bedankt voor de reactie,
Ik heb je code getest, maar het werkte ook niet, dus ben ik php.net nog maar eens gaan kijken bij mysqli_fetch_array(), en ik las dit:
The following functions return NULL when no more data is available in the result set (ext/mysql's functions return FALSE).
- mysqli_fetch_row()
- mysqli_fetch_array()
- mysqli_fetch_assoc()
dat betekent volgens mij dat ik in mijn php niets verkeerd doe, maar dat de sql query geen data terug stuurt, ik heb ze alle drie geprobeerd, en allemaal geven ze null. Dus..... mijn php werkt, de sql code hoort te werken, maar werkt niet....? iemand enig idee waarom? in tussen ga ik het moeilijk doen en ga de data gebruiken vanuit de form voor de html pagina(verzenden van script naar script d.m.v. curl post optie...)
Succes.
Als de while() geen data geeft en de query is gelukt dan is er blijkbaar niets gevonden.