Read MySQL Table, lukt niet goed?

Pagina: 1
Acties:
  • 522 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo GT,
Hopelijk is het niet weer een syntax fout 8)7 , maar heb alweer eventjes jullie hulp nodig. In het volgende scriptje maak ik connectie met de database (lukt). In die database staat een table genaamd customer waarvan ik de data wil lezen en weergeven. -->
<?php

$cxn = mysqli_connect("localhost","testdb1","","customer")
or die("Couldn't connect to server");

$query = "SELECT * FROM customer";
$result = mysqli_query($cxn,$query);


$a_row = mysqli_fetch_array($result);


foreach($a_row as $list){
echo "$list <br />";

}


?>
Nu is het probleem dat hij wel data weergeeft, maar alleen 4 keer user1 achter elkaar. Table ziet er alsvolgt uit: *(let niet op de rare combinaties etc :P ).
NAME PASSWORD
user1 user1
user2 user2
user3 user3
user4 user4
2 2
2 2
2 2
23 23
23 23
23 23
23 23
23 23

Wat doe ik verkeerd? Volgens mij zit het probleem in de buurt van het $result converten naar een array. Hij gaf eerst een error, omdat $result geen string was en je hem dan ook niet kan echoen.??

Alvast bedankt! :)

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Ten eerste gebruik de code tag van het forum, of de php tag, zo is het een beetje leesbaar voor ons ;)
Ten tweede, haal de variabelen uit de aanhalingstekens, scheelt je weer performance.
Ten derde, ik raad je aan eerst te gaan debuggen.. Zo te zien heb je dat in dit geval ook weer niet gedaan (net als in je vorige topic).

Trouwens, geef eens een paramter 2 op bij mysqli_fetch_array:
PHP:
1
$a_row = mysqli_fetch_array($result, MYSQLI_ASSOC);


offtopic:
Ik dacht dat dit ook met een while werkte?
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
echo $row["name"] . "<br />";
}

Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 19-09 13:53
Doe eens een printf van result

Lees ook eens wat fetch_array precies doet: http://nl3.php.net/mysqli_fetch_array

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04 15:22
Probeer eens met een group by in je query.

Waarom gebruik je de mysqli_query functies en niet de 'gewone' mysql_query

Windsoft


Acties:
  • 0 Henk 'm!

  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04 15:22
Ik zou het zo oplossen

code:
1
2
3
4
5
6
$query = "select * from customer";
$result = mysql_query($query) or die("Geen query kunnen uitvoeren");

while($rec = mysql_fetch_object($result)){
    echo $rec->veld1 . " - " . $rec->veld2;
}

Windsoft


Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 19-09 13:53
JoostMartijn schreef op zaterdag 11 juli 2009 @ 11:16:
Probeer eens met een group by in je query.

Waarom gebruik je de mysqli_query functies en niet de 'gewone' mysql_query
Een group by zou hier totaal nutteloos zijn, zie ook de FAQ met tips over waar je hem wel zou willen gebruiken ;)

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm ik heb printf geprobeerd.. maar dan krijg ik die string error.. moment, eventjes andere tips proberen^^

Edit: Vraag: waar komt die $rec vandaan in de code hierboven (in while loop)??

[ Voor 27% gewijzigd door Verwijderd op 11-07-2009 11:25 ]


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Verwijderd schreef op zaterdag 11 juli 2009 @ 11:23:
Hmm ik heb printf geprobeerd.. maar dan krijg ik die string error.. moment, eventjes andere tips proberen^^

Edit: Vraag: waar komt die $rec vandaan in de code hierboven (in while loop)??
Die geeft die zelf op, trouwens dat is mysql en geen mysqli wat jij nu wel gebruikt ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm, in php & Mysql for dummies gaan ze uit van mysqli, maar wat is het grote verschil tussen i en zonder i eigenlijk? Improved?? Klinkt beter?

En ik wil die data uit de tabel lezen.. Is dit wel de goede manier? Lukt nog steeds niet echt, heb parameter 2 toegevoegd aan die fetch functie..

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
MySQLi is eigenlijk een nieuwe MySQL extentie, die beter gebruikt maakt van alle onderdelen van MySQL en wat ook sneller schijnt te zijn. http://nl2.php.net/manual/en/intro.mysqli.php

Trouwens, probeer dit eens:

PHP:
1
2
3
while($row = mysqli_fetch_assoc($result)) {
      echo $row["NAME"] . "<br />";
}


En geef ons daar eens de output van?
Als ik me het goed herinner moest dat namelijk altijd in een while loop wil je alle data uit je tabel fetchen.

[ Voor 6% gewijzigd door Manuel op 11-07-2009 11:31 . Reden: Linkie ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
   
            $cxn = mysqli_connect("localhost","testdb1","","customer")
        or die("Couldn't connect to server");
        
        $query = "SELECT * FROM customer";
        $result = mysqli_query($cxn,$query);
        
    
        while($row = mysqli_fetch_assoc($result)) {
              echo $row["NAME"] . "<br />";
              } 
        
        
?>

De output hiervan is niets...

[ Voor 4% gewijzigd door Verwijderd op 11-07-2009 11:36 ]


Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
Ook niet een aantal <br />'s?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kan niets selecteren nee

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Moet het niet $row['name'] zijn? Of heb je je velden in de database ook met hoofdletters gezet?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:31

Creepy

Tactical Espionage Splatterer

En het resultaat van mysql_query is niet false? Als het wel false is, dan is er iets mis gegaan. Voor zover ik kan zien standaard debug werk: check altijd de result values zoals prima staat uitgelegd in de voorbeelden op http://us2.php.net/manual/en/mysqli.query.php.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
w00t NAME moest inderdaad Name zijn.. Het werkt! Bedankt :D. Nog even iets anders: Wat moet ik toevoegen om ook de rij Password te lezen? En hoe kan ik die 2 naast elkaar weergeven?
Ah nvm.. heb m,,, echo $row["Password"] . "<br />"; :)

[ Voor 13% gewijzigd door Verwijderd op 11-07-2009 12:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 11 juli 2009 @ 12:04:
w00t NAME moest inderdaad Name zijn.. Het werkt! Bedankt :D. Nog even iets anders: Wat moet ik toevoegen om ook de rij Password te lezen? En hoe kan ik die 2 naast elkaar weergeven?
Ah nvm.. heb m,,, echo $row["Password"] . "<br />"; :)
Het is vaak handig om zo'n associatieve array (een array met woorden als keys) even door print_r() of var_dump() te halen, die geven precies aan hoe elke key heet en wat er in zit.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah ty, dus in dit geval doe ik print_r($result); En dan geeft hij aan dat het een object is. Wat is de procedure trouwens wanneer ik een object tegen kom? Fetch naar array en dan de array uitpakken? Kan dat uitpakken niet met foreach?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Dat klopt inderdaad, die mysqli_fetch_array/assoc leest dat object uit en zorgt ervoor dat het readable-data wordt.
Dus: print_r($mysqli_fetch_assoc)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ty =D, nog veel te leren lol

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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
<?php
     $name = $_REQUEST["name"];
     $companycountry = $_REQUEST["companycountry"];
     $director = $_REQUEST["director"];
     $relation = $_REQUEST["relation"];
     
    if(!$name OR !$companycountry OR !$director OR !$relation){
        echo "you've missed one of the fields, try again!";
    }
    else if($name & $companycountry & $director & $relation){
        
        $cxn = mysqli_connect("localhost","user1","","salesdb") or die ("Couldn't connect to server, try again later");
        $query = "INSERT INTO company (name,country,directorname,relationship) VALUES ($name,$companycountry,$director,$relation)";
        $result = mysqli_query($cxn,$query);
        if($result){
                echo "Data succesfully stored <br />";
            }
         $query2 = "SELECT * FROM company";
     $result2 = mysqli_query($cxn,$query2);
     while($row = mysqli_fetch_assoc($result2)) {
              echo "$row[name]  $row[country] $row[directorname] $row[relationship] . <br />";
               } 
     }
      
         
         
         
?>

Nog een probleemje... Het laatste gedeelte is goed, hij leest de gegevens uit de tabel, maar het schrijven lukt niet. INSERT INTO blabla.. Al een tijdje naar gekeken maar niets gevonden.. =/

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Heb jij eigenlijk wel mijn eerste reactie gelezen, daarin zei ik ook, liefste alles uit de quotes halen maar nu doe je het weer.. Verder ga eens debuggen, hieronder zie je een link van hoe je dat moet doen. Plus voor als je het nog niet wist, je moet escapen in MySQL met een ''..

PHP:
1
$query = "INSERT INTO company (name,country,directorname,relationship) VALUES ('" . $name . "','" . $companycountry . "', '" . $director . "', '" . $relation . "');";


PS: Gebruik GEEN $_REQUEST, gebruik hiervoor $_POST of $_GET, voor meer informatie zie php.net

[ Voor 10% gewijzigd door Manuel op 11-07-2009 16:42 . Reden: PS added ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
aw ty again... Moet echt die " en andere Syntax onder controle krijgen. Maar erm... Als ik die quotes weg had gehaald dan zou je de fout toch niet kunnen vinden? Ik gebruik trouwens Aptana studio.. Zit daar niet al een debugger in?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Ik heb het dan voornamelijk over: Hoe te debuggen. Plus wat betreft die quote dan zou je de fout niet vinden? Hoe bedoel je dat precies? Die variablen in quotes zorgt alleen maar dat je code achteruit gaat wat betreft performance. (Zie php.net voor meer informatie).

Verder wat je while loop betekend, volgens mij bedoel je:
PHP:
1
2
3
while($row = mysqli_fetch_assoc($result2)) { 
    echo $row["name"] . "<br />" . $row["country"] . "<br />" . $row["directorname"] . "<br />" . $row["relationship"] . "<br />"; 
}

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Die if's om te kijken of velden leeg zijn klopt ook niet helemaal. Strings naar booleans casten om te kijken of ze leeg zijn kan wel, maar hiervoor hebben we de empty functie (language construct eigenlijk).

Bij de } elseif { gebruik je een enkele ampersand (&), en die is bedoeld om met bits te vergelijken. De logische and is &&.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ah ty, kun je trouwens een voorbeeldje geven van hoe je een string naar boolean cast? Moet dat met var_dump?

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Een string naar true/false cast?
Hoe bedoel je dat precies?

PS: var_dump is een informatief middel om te zien welk type de variabele is ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ah right en is er een groot vershil in gebruik tussen print_r en var_dump??

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
print_r is specifiek voor array's en var_dump voor variabelen ;)
Voor meer informatie zie php.net

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ty =D

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Genoeg geweest. GoT is geen snelle helpdesk waar je even snel je kleine vraagje dumpt zodat wij het voor je oplossen. Zelf debuggen en zelf basiskennis kunnen opdoen zijn twee vereisten vóór je hier een topic opent, en dat mis ik in dit topic beiden. Daarom doe ik het op slot.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.