php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.10.2006, 11:59  
Gast
 
Beiträge: n/a
Standard While-Schleife wird nicht ausgeführt.

Hallo!
Ich bin gerade dabei im PHP ein Script zu schreiben um User in eine Datenbank einzutragen.
Dabei kommt die folgende While-Schleife vor:
PHP-Code:
while($row mysql_fetch_assoc($ergebnis)){
    if((!isset(
$row['id'])) || ($row['id'] == "")){ // USER EXISTIERT NICHT
        
$abfrage "INSERT INTO user (id,user,pass,rights) VALUES('','".$_POST['user']."','".md5($_POST['pass1'])."','".$_POST['rights']."'";
                
$ergebnis = @mysql_query($abfrage)
                    or die(
"Fehler bei der Abfrage (".$abfrage.")!");
            }else{
                print(
"Ein Benutzer mit diesem Namen existiert bereits!");
            }
        } 
Nur leider landet man NIE in der while....
jemand ne idee? -.-'
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.10.2006, 12:08  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Wie sieht denn die Abfrage davor aus?
Suchst Du da nach allen Einträgen mit der gleichen id?

Dann könntest Du bemerken, dass bei keinem gefundenen Eintrag natürlich auch keine Zeile ausgelesen werden kann. Somit ist $row schon beim ersten Aufruf false.

Um rauszukriegen, dass der Benutzer nicht existiert solltest Du mysql_num_rows() nehmen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 20.10.2006, 12:12  
Gast
 
Beiträge: n/a
Standard

hier is das ganze script:

PHP-Code:
<?php
session_start
();
if(!isset(
$_SESSION['USER_NAME']) || $_SESSION['USER_NAME'] == "") {header("Location: login.php");die();}
if(
$_SESSION['RIGHTS'] < 10) {header("Location: logout.php");die();} 

print(
"[b]Eingeloggter User:[/b] ".$_SESSION['USER_NAME']."  -  <a href=\"./logout.php\">Logout</a>

"
);

if(!
$_POST['filled']){
    print(
"<h2>Benutzer hinzuf&uuml;gen (ohne Funktion!)</h2>");
    print(
"<FORM name=\"adduser\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n");
    print(
"Benutzername: <INPUT type=\"text\" name=\"user\" value=\"\" />
\n"
);
    print(
"Passwort: <INPUT type=\"password\" name=\"pass1\" value=\"\" />
\n"
);
    print(
"Passwort (wdh): <INPUT type=\"password\" name=\"pass2\" value=\"\" />
\n"
);
    print(
"Rechte (1-?): <INPUT type=\"text\" name=\"rights\" value=\"1\" /> [size="1"]Ab 10 = Admin[/size]
\n"
);
    print(
"<INPUT type=\"hidden\" name=\"filled\" value=\"1\" />\n");
?>
   <input type="hidden" name="PHPSESSID" value="<?=session_id()?>">
<?php
    
print("<INPUT type=\"submit\" value=\"Eintragen\" />\n");
    print(
"</FORM>");


}else{    
// AUSGEFÜLLT
    
if($_POST['pass1'] != $_POST['pass2']){

        die(
"Die zwei eingegebenen Passwörter stimmen nicht überein!");
    }else{ 
//PASSWÖRTER STIMMEN
    
$link2 mysql_connect("localhost","root","")
        or die(
"Verbindung zur Datenbank fehlgeschlagen!");
    
    
mysql_select_db("users")
        or die(
"Auswählen der Datenbank fehlgeschlagen!");

        
$abfrage "SELECT * FROM user WHERE user='".$_POST['name']."'";
        
$ergebnis mysql_query($abfrage)
            or die(
"Fehler bei der Abfrage (".$abfrage.")!");
echo(
mysql_fetch_assoc($ergebnis));
        while(
$row mysql_fetch_assoc($ergebnis)){
            if(!isset(
$row['id'])){ // USER EXISTIERT NICHT
                
$abfrage "INSERT INTO user (id,user,pass,rights) VALUES('','".$_POST['user']."','".md5($_POST['pass1'])."','".$_POST['rights']."')";
                
$ergebnis = @mysql_query($abfrage)
                    or die(
"Fehler bei der Abfrage (".$abfrage.")!");
            }else{
                print(
"Ein Benutzer mit diesem Namen existiert bereits!");
            }
        }
    }
}
?>
 
Alt 20.10.2006, 12:15  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

hier: echo(mysql_fetch_assoc($ergebnis));

Lässt du dir hier das Ergebnis ausgeben, springt er zum nächsten Datensatz. Wenn die Abfrage nur einen Datensatz enthält, dann kann er nicht mehr in die While-Schleife kommen weil es dann bereits keinen Datensatz mehr gibt.

Wenn es darum geht zu prüfen ob der User schon existiert tut es auch ein mysql_num_rows(...) == 0 ohne Schleife.

Deine Logik verstehe ich aber auch nicht wirklich.
Du willst prüfen ob es einen Namen schon gibt. Dafür Fragst du alle Datensätze mit diesem Namen ab und willst sie in einer Schleife durchgehen. Wenn die ID nicht gesetzt ist (was gar nicht vorkommen kann/sollte) dann trägst du ihn ein.
Wenn es den Benutzernamen nicht gibt wird er logischerweise keine Datensätze zum durchlaufen haben und somit nie in die Schleife kommen.
webbi ist offline  
Alt 20.10.2006, 12:19  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von webbi
hier: echo(mysql_fetch_assoc($ergebnis));

Lässt du dir hier das Ergebnis ausgeben, springt er zum nächsten Datensatz. Wenn die Abfrage nur einen Datensatz enthält, dann kann er nicht mehr in die While-Schleife kommen weil es dann bereits keinen Datensatz mehr gibt.

Wenn es darum geht zu prüfen ob der User schon existiert tut es auch ein mysql_num_rows(...) == 0 ohne Schleife.

Deine Logik verstehe ich aber auch nicht wirklich.
Du willst prüfen ob es einen Namen schon gibt. Dafür Fragst du alle Datensätze mit diesem Namen ab und willst sie in einer Schleife durchgehen. Wenn die ID nicht gesetzt ist (was gar nicht vorkommen kann/sollte) dann trägst du ihn ein.
Wenn es den Benutzernamen nicht gibt wird er logischerweise keine Datensätze zum durchlaufen haben und somit nie in die Schleife kommen.
oehm. danke - muss ich gleich mal ausprobieren
 
Alt 20.10.2006, 12:35  
Gast
 
Beiträge: n/a
Standard

leider gibt echo(mysql_num_rows($ergebnis)); IMMER 0 aus....
ob jetzt der eingegebene user existiert oder nicht..
 
Alt 20.10.2006, 12:43  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

PHP-Code:
<?php
$abfrage 
"SELECT * FROM user WHERE user='".$_POST['name']."'";
?>
Tabelle und Spalte haben den gleichen Namen? Wie übel ist das denn?


Ich hatte hier im Forum schon mal das Problem entdeckt, dass MySQL da evtl. Mist macht.

An Deinem Fehler mit dem echo und der falschen Art, einen fehlenden Eintrag festzustellen hat das aber nichts zu tun.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 20.10.2006, 12:45  
Gast
 
Beiträge: n/a
Standard

ich frag mich immernoch, warum immer 0 ausgegeben wird.
in einem anderen script funktioniert die abfrage genau so ($abfrage = "SELECT * FROM user WHERE user='".$_POST['name']."'"; ) auch....
 
Alt 20.10.2006, 12:51  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Wenn dem so ist muss "user" in der Datenbank ungleich $_POST['name'] sein.
Lass dir am besten mal dein SELECT * FROM user WHERE user='".$_POST['name']."' ausgeben und schaue ob es sich mit deinen Erwartungen deckt.

2 Anmerkungen, die mir auch auffallen:
- Es ist unnötig für jede Zeile neu ein print aufzumachen, ein einziges ist ausreichend.
- Kein Select * schreiben sondern nur die Spalten abfragen die man haben will

Edit: Ich sehe gerade dein Formularfeld heißt "user", deine Variable dann $_POST['name'], somit ist klar, warum es nicht geht.
webbi ist offline  
Alt 20.10.2006, 12:53  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Die Abfrage sollte auch funktionieren. Auch wenn sie furchtbar ist.
Nur hab ich mal hier mit wem ein Problem gelöst, wo genau das die Ursache für Probleme war.
Läuft das andere Script auf dem gleichen Server?

Ansonsten mach mal die üblichen Maßnahmen bei falschen Querys:

Lass Dir mal den String vorher ausgeben. Vielleicht sind da noch überraschende Leerzeichen oder sowas drin.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
While schleife -> letzter durchgang Skazi PHP Tipps 2006 7 16.09.2006 00:11
Problem mit while schleife obi PHP Tipps 2006 6 31.08.2006 13:40
mysql_query verschmelzen zweier abfragen (while schleife) Buschdieb PHP Tipps 2006 10 15.07.2006 17:11
while schleife - spezial datensatz einblenden Buschdieb PHP Tipps 2006 2 09.04.2006 13:05
while Schleife gibt nicht alle Daten aus PHP Tipps 2006 2 12.01.2006 19:24
[Erledigt] While schleife in while schleife = nur ein datensatz?! PHP Tipps 2005-2 9 28.10.2005 12:48
while schleife in einer while schleife beim tmpl-sys PHP Tipps 2005-2 0 27.07.2005 15:07
While Schleife Beatbox Off-Topic Diskussionen 8 19.05.2005 21:55
while schleife beenden PHP Tipps 2005 3 29.03.2005 20:35
IF ELSEIF ELSEIF ELSE mit While Schleife PHP Tipps 2005 9 04.03.2005 23:27
Variabel aus while schleife ausserhalb der schleife nutzen PHP Tipps 2005 8 12.02.2005 18:04
resultausgabe mit while schleife in pdf dokument PHP Tipps 2004 2 23.09.2004 14:56
Nach while Schleife funzt nix mehr?! PHP Tipps 2004 15 25.08.2004 00:25
[Erledigt] probleme mit ner while schleife PHP Tipps 2004 5 23.07.2004 17:28
Prob mit While schleife JEGO PHP Tipps 2004 2 04.06.2004 12:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php while schleife wird nicht ausgeführt, while schleife mit insert statement wird nicht ausgeführt, php warum springt er nicht in while schleife, php while nicht ausgeführt wird, php springt nicht in while schleife, while schleife wird nicht ausgeführt php

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.