[PHP/MySQL] ik krijg geen waardes terug

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Goedenavond :)

Ik ben de laatste dagen wat aan het proberen met PHP en MySQL.
Vandaag heb ik een zoek-pagina aangemaakt die er zo uitziet;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if (isset($_POST['zoeken'])){
include("connectiebestand.php");
$spelnaam = $_POST['spelnaam'];
$query = "SELECT * FROM spelletjes WHERE titel='.$spelnaam.'";
echo $spelnaam;
$uitvoer = mysql_query($query) or die (mysql_error());
while($array = mysql_fetch_assoc($uitvoer))
{
        echo '<table width="800" border="0" bgcolor="#CECCCC">';
        foreach ($array as $key => $value){
            echo "<tr><td>$key </td><td>$value</td></tr>\n";
        }
            echo "</table>\n";
        echo "<p />";       
}

echo $array;

}
?>

HTML:
1
2
3
4
5
6
<h1><a href='http://filipkta2.t15.org/'>Terug naar overzicht</a> </h1>
<form id="toevoegen" name="toevoegen" method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
         <input name="spelnaam" type="text" id="spelnaam" />
         <input type="submit" name="zoeken" id="zoeken" value="Zoeken" />

</form>



Het probleem is bij deze pagina dat ik geen zoekresultaten terugkrijg (alleen de echo van spelnaam). :?
Heeft iemand een flauw idee hoe dit komt? De kans dat dit een domme fout is is groot, wees gewaarschuwd.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
WEB >> PRG
filenox schreef op zondag 20 maart 2011 @ 21:59:
Heeft iemand een flauw idee hoe dit komt? De kans dat dit een domme fout is is groot, wees gewaarschuwd.
Begin gewoon eens met debuggen: Debuggen: Hoe doe ik dat?

offtopic:
Je weet dat je hier nogal risico's loopt op, o.a., SQL Injection en XSS om maar wat te noemen? ;) Je vergeet nogal wat escaping op kritieke plekken.

[ Voor 76% gewijzigd door RobIII op 20-03-2011 22:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Echo ook vooral $query eens en kijk dan hier.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Beste Roblll dit 'project' is puur educatief bedoeld dus het is geen drama dat er SQL injection etc mogelijk is maar het is natuurlijk interessant om mij dit te laten weten, dank daarvoor. Ik zal het debug-topic eens doorlezen. :)

Echo $query; geeft
PHP:
1
SELECT * FROM spelletjes WHERE titel='.Snake.'

Dit lijkt me niet echt de bedoeling..

[ Voor 21% gewijzigd door filenox op 20-03-2011 22:14 ]


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
doe eens een var_dump($array)


$query = "SELECT * FROM spelletjes WHERE titel='.$spelnaam.'";
daar zit je fout..

$query = "SELECT * FROM spelletjes WHERE titel='$spelnaam'";

of
$query = "SELECT * FROM spelletjes WHERE titel='".$spelnaam."'";

edit:
dan maar de uitleg.

code:
1
2
3
$hiereenvar=1;
$nogeenvar="aa";
$a="hier staat code $hiereenvar en zo door $nogeenvar";

echo hiervan is 'hier staat code 1 en zo door aa

als je " gebruikt dan voert hij de code/tekst uit. Terwijl als je ' gebruikt hij deze als een literal gaat nemen, dus letterlijk
als je bovenstaande zou herschrijven naar dit:
code:
1
2
3
$hiereenvar=1;
$nogeenvar="aa";
$a='hier staat code $hiereenvar en zo door $nogeenvar';

echo is daarvan: hier staat code $hiereenvar en zo door $nogeenvar


Het mooiste voorbeeld voor het gebruik van '' kan ik je geven voor HTML code.
$htmltag='<img src="" alt=""> ...</img>'; als je veel "" in tekst hebt en dit steeds moet escapen mbv \" dan wordt dit vermoeiend en kun je beter '.$string.' gebruiken zoals jij deed.. maar dan mag je niet vergeten _overal_ ' te gebruiken

[ Voor 142% gewijzigd door Icekiller2k6 op 20-03-2011 22:21 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

Is het probleem niet gewoon dat je een equality check doet op een string waar je eigenlijk LIKE hoort te gebruiken en daardoor (terecht) geen regels terug krijgt.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Matis schreef op zondag 20 maart 2011 @ 22:15:
Is het probleem niet gewoon dat je een equality check doet op een string waar je eigenlijk LIKE hoort te gebruiken en daardoor (terecht) geen regels terug krijgt.
Nee, het probleem is subtieler en zit 'm in 't gebruik van " waar ' wordt bedoeld of andersom ;)

Desalniettemin voor Icekiller2k6 hierboven:
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
filenox schreef op zondag 20 maart 2011 @ 22:08:
Beste Roblll dit 'project' is puur educatief bedoeld dus het is geen drama dat er SQL injection etc mogelijk is
De pest met stoei-projectjes, hobby-projectes en 'educatieve projectjes' is dat ze soms als ze vorm beginnen te krijgen uitgroeien naar meer en niemand die er nog aan denkt dat er diep in de code dit soort ongein verborgen zit. Dit soort zaken die je ter-plekke, meteen, altijd, goed af te handelen en niet "oh, dat komt naderhand wel" of "ja ik doe 't in mijn volgende project goed/beter"

[ Voor 37% gewijzigd door RobIII op 20-03-2011 22:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:10
Even verdergaand op RobIII, zou je de mogelijkheid hebben tot bijvoorbeeld PDO of een andere SQL interface waarin je bijvoorbeeld prepared statements werkt. Dat werkt al een stuk veiliger dan zo mysql of mysqli vanuit PHP.



In MySQL mag je ook = gebruiken, alhoewel je daar ook niet altijd vrolijk van wordt 8)7.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

RobIII schreef op zondag 20 maart 2011 @ 22:16:
Nee, het probleem is subtieler en zit 'm in 't gebruik van " waar ' wordt bedoeld of andersom ;)
Getverdemme, nu je het zegt :P
Daarom ben ik zo blij met PDO / prepared statements in het algemeen O+

Edit; en weer ninja'd

[ Voor 4% gewijzigd door Matis op 20-03-2011 22:18 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Erg leuk al die reacties maar ik krijg hier het gevoel van een input overflow :)
Kan iemand me zeggen wat ik nu precies moet lezen of proberen? :)

echo $query geeft SELECT * FROM spelletjes WHERE titel='Snake' (....WHERE titel='$spelnaam'";)
echo var_dump($array); geeft bool(false)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
filenox schreef op zondag 20 maart 2011 @ 22:20:
Kan iemand me zeggen wat ik nu precies moet lezen of proberen? :)
Nee. We zitten hier niet om oplossingen voor te kauwen of aan te dragen op zilveren presenteerblaadjes. Je weet wat je wil hebben in $query, je weet wat je hebt dus dat herleiden naar de fout is geen rocket science meer. Hier moet je prima zelf uit kunnen komen.

En nogmaals: debuggen, debuggen, debuggen. >> Debuggen: Hoe doe ik dat?

[ Voor 35% gewijzigd door RobIII op 20-03-2011 22:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14:14

Matis

Rubber Rocket

Als je die query eens in de phpMyAdmin oid invoert, wat krijg je dan?

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

is .$spelnaam onderdeel van je query, of een variabele waarvan de inhoud in de querie moet komen ;)

Iperf


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

filenox schreef op zondag 20 maart 2011 @ 22:20:
Kan iemand me zeggen wat ik nu precies moet lezen of proberen? :)
In aanvulling op de eerder genoemde links: http://php.net/manual/en/function.var-dump.php
Als je niet weet wat een functie doet of hoe je 'm moet gebruiken kun je 'm altijd opzoeken. Daar zou je ons niet nodig voor moeten hebben.

[ Voor 3% gewijzigd door 8088 op 20-03-2011 22:26 ]

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
bool(false)

Bool = Boolean, een boolean is iets wat True of False kan zijn.. in dit geval dus False.. wat betekend dat hij null heeft toegekend gekregen.. wat dus betekend..

(ff dora spelen..)

juist hij is leeg, zit niets in. Het probleem zit hier voor.
Bij de query dus!

Edit:
ik weet wat filenox meemaakt :p van die irri foutjes die der inzitten omdat je niet 100% juist leest etc.. maar na X aantal jaren code weet je van jezelf ik doe altijd een echo van de query als ik aan het code ben.. en naderhand verwijder ik die.. als ik code vaak moet aanpassen etc dan gebruik ik vak zelfs een GLOBAL mbv if debug==1 idee ;)

[ Voor 38% gewijzigd door Icekiller2k6 op 20-03-2011 22:32 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
$query = 'SELECT * FROM spelletjes WHERE titel ="' . $spelnaam . '"'; *O* *O*

Bedankt voor de nuttige tips en links!

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
filenox schreef op zondag 20 maart 2011 @ 22:31:
$query = 'SELECT * FROM spelletjes WHERE titel = " ' . $spelnaam . ' " '; *O* *O*

Bedankt voor de nuttige tips en links!
neen dat is fout :p, ook al werkt het.. 't is fout :D

lees de ' & " eens..

--
etiquette, werkwijze etc .. PHP is redelijk vergevend op alle vlakken.. ik heb in zijn profiel gezien gezien dat hij informaticabeheer doet.. bij C/perl/python/WSH/... gaat dat nooit lukken.. en slechte gewoontes afleren is moeilijk. (geloof me ik weet er alles van ;))

[ Voor 41% gewijzigd door Icekiller2k6 op 20-03-2011 22:38 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

Verwijderd

Icekiller2k6 schreef op zondag 20 maart 2011 @ 22:33:
[...]


neen dat is fout :p, ook al werkt het.. 't is fout :D
Waarom is het dan fout?

[ Voor 75% gewijzigd door Verwijderd op 20-03-2011 22:36 ]


Acties:
  • 0 Henk 'm!

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

$query = "SELECT * FROM spelletjes WHERE titel='" . $spelnaam. "'";


(denk ik)

Iperf


Acties:
  • 0 Henk 'm!

Verwijderd

Dat maakt toch niet uit? Zolang de quotes maar juist genest zijn, niet?

Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Met Rubinski_be.
fish schreef op zondag 20 maart 2011 @ 22:39:
$query = "SELECT * FROM spelletjes WHERE titel='" . $spelnaam. "'";
Dan is een al eerder genoemde regel een stuk efficiënter:
PHP:
1
$query = "SELECT * FROM spelletjes WHERE titel='$spelnaam'";

[ Voor 4% gewijzigd door 8088 op 20-03-2011 22:48 ]

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

Verwijderd

Maar dat komt toch op hetzelfde neer, niet?

Acties:
  • 0 Henk 'm!

  • kKaltUu
  • Registratie: April 2008
  • Laatst online: 02-09 19:59

kKaltUu

Profesionele Forumtroll

fish schreef op zondag 20 maart 2011 @ 22:39:
[...]

$query = "SELECT * FROM spelletjes WHERE titel='" . $spelnaam. "'";


(denk ik)
PHP:
1
$query = 'SELECT * FROM spelletjes WHERE titel ="' . $spelnaam . '"';


klopt in principe.

Ik zou zelf wel uitkijken met je single en double quotes.

Bovenstaande is mijn post. Lees deze aandachtig, dank u wel voor uw medewerking.


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Verwijderd schreef op zondag 20 maart 2011 @ 22:47:
Maar dat komt toch op hetzelfde neer, niet?
In de zin dat 't hetzelfde resultaat oplevert wel, ja. Echter, de syntax highlighting kan er in sommige editors wel onder lijden.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

Verwijderd

Ik schrijf alle code in Notepad++ en heb er nog geen last van ondervonden. Maar toch bedankt voor de tip!

Acties:
  • 0 Henk 'm!

  • nemo55
  • Registratie: Februari 2004
  • Laatst online: 21-09 23:41
8088 schreef op zondag 20 maart 2011 @ 22:46:
Met Rubinski_be.

[...]

Dan is een al eerder genoemde regel een stuk efficiënter:
PHP:
1
$query = "SELECT * FROM spelletjes WHERE titel='$spelnaam'";
Ik weet niet wat je met efficiënter bedoeld, maar sneller is het niet. Bij dubbele quotes moet PHP zelf gaan zoeken naar variabelen ed. Bij literals (enkele quotes) hoeft de engine dat niet te doen en neemt hem zoals hij is wat sneller zou moeten zijn. Ondanks dat is de winst misschien verwaarloosbaar, maar in sommige gevallen handig om te weten.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gaan we nou echt die single/double quotes discussie voor de hondermiljardste keer voeren over het wel of niet sneller zijn en toch wel zeker 3 nanoseconden winst op een hele pagina waar we 't toch niet over eens worden en ondanks argumenten van beide kanten toch aan ons eigen geloof blijven hangen? Of zullen we die discussie eens achterwege laten?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • nemo55
  • Registratie: Februari 2004
  • Laatst online: 21-09 23:41
RobIII schreef op maandag 21 maart 2011 @ 13:27:
Gaan we nou echt die single/double quotes discussie voor de hondermiljardste keer voeren over het wel of niet sneller zijn en toch wel zeker 3 nanoseconden winst op een hele pagina waar we 't toch niet over eens worden en ondanks argumenten van beide kanten toch aan ons eigen geloof blijven hangen? Of zullen we die discussie eens achterwege laten?
Excuus dat ik niet mijn hele leven wijd aan tweakers.net en niet alle zinvolle en/of loze discussies hier in de gaten houdt. Het zou je trouwens een stuk proffesioneler staan als je niet van die overdreven aantallen in je taal gebruikt. Dat doet m'n dochter van 7 nl. ook en je bericht komt zo nogal overdreven over.

Fijne dag verder.

Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

nemo55 schreef op maandag 21 maart 2011 @ 09:57:
Ik weet niet wat je met efficiënter bedoeld, maar sneller is het niet.
Ik doelde meer op schrijfgemak. Maar dat is uiteraard subjectief, zeker als je gebrekkige syntax highlighting in aanmerking neemt. Maar inderdaad, deze discussie is al te vaak gevoerd.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?

Pagina: 1