[php] Invalid argument foreach()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer momenteel een klein forumpje te maken om wat te oefenen met PHP/MySQL. Nu heb ik het volgende stukje code geschreven om te controleren of een user al bestaat :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$query = "SELECT username FROM User";
$result = mysql_query($query)
     or die("Fout bij uitvoeren query");

$array = mysql_fetch_array($result, MYSQL_NUM);

$bestaat = FALSE;

foreach ($array as $value) {
  if (strtolower($value)==strtolower($_POST["username"])) {$bestaat = TRUE;}; 
  } 

if ($bestaat == TRUE) {echo "Username bestaat al";}
else {echo "Username bestaat nog niet";}


Ik heb dus een tabel User met daarin een kolom username. Deze pagina is de pagina die je krijgt als je op submit drukt (op vorige HTML pagina) met de methode POST.

Mijn tabel is nu nog leeg. Als ik dit uitvoer dan krijg ik het volgende resultaat :

Warning: Invalid argument supplied for foreach() in /home/sites/site170/users/webmaster/web/register.php on line 21
Username bestaat nog niet

Wat doe ik fout, want ik heb er nu al een hele tijd naar zitten staren maar kom er niet uit ?

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
je doet niets fout, als er niets in je array zit kan hij ook niets doen. Je moet het dan zo doen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$query = "SELECT username FROM User"; 
$result = mysql_query($query) 
     or die("Fout bij uitvoeren query"); 

$array = mysql_fetch_array($result, MYSQL_NUM); 

$bestaat = FALSE; 

if(mysql_num_rows($result) != 0)
{
    foreach ($array as $value) { 
      if (strtolower($value)==strtolower($_POST["username"])) {$bestaat = TRUE;};  
      }     
}
else
{
    // User bestaat niet
}

if ($bestaat == TRUE) {echo "Username bestaat al";} 
else {echo "Username bestaat nog niet";}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok hartstikke bedankt :D

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

$array is blijbaar geen array.

Je query gaat dus blijkbaar fout? Of er zijn geen resultaten.

Btw, wat probeer je met deze query te doen :?
Kan je niet beter zoiets doen:
"select count( * ) from User where username = '" . mysql_escape_string($username) . "'";

En verder maak je foutief gebruik van mysql_fetch_array, dat haalt niet _alle_ data uit de database, maar enkel het "huidige record".

zie de php-manual over mysql_fetch_array...

[ Voor 4% gewijzigd door ACM op 02-02-2003 16:01 ]


Acties:
  • 0 Henk 'm!

Verwijderd

zoiets?

PHP:
1
2
3
4
5
6
7
8
9
10
11
function usernameExists($username){
    $sql = "SELECT       1
            FROM         users
            WHERE        username = " . $username;
    $res =  mysql_query($sql);
    if(mysql_num_rows($res) == 0){
        return false;
    } else {
        return true;
    }
}

[ Voor 12% gewijzigd door Verwijderd op 02-02-2003 16:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

he CptEO, aangezien die andere topic over de create table in een database gesloten is geef ik je hier maar antwoord. Je hebt ook geen email of zo vermeld staan in je profile dusss....

T ligt er een beetje aan wat voor DBM je gebruikt. Er zijn er een paar die bepaalde "reserved words" gebruiken. Ik heb het beprobeerd in sybase en daar deed hij het ook niet. Het woord "user" is reserved. Daar zal je dus iets anders voor moeten verzinnen, "user1" doet het bijv. wel.
Verder zou je ook problemen kunnen krijgen bij:

user_id INT(5)

Niet iedere DBM ondersteunt dat. Sybase bijvoorbeeld niet. Een int is gewoon een int of je hebt een smallint en een int(5) kent ie niet.

suc6!!
Pagina: 1