login] irgendwie mysteriös

Harrier

Erfahrenes Mitglied
Servus, Leute! Ich hab jetzt mal ein Problem: Ich hab für jemanden nen PHP-Script geschrieben einschließlich einem Log-In-Script und da liegt genau das Problem:

Die Daten sind in einer MySQL-Datenbank gespeichert! Wenn ich jetzt mache:
SELECT * FROM member WHERE name='test' funktioniert das auch!

Ich habe es eben über ein Formular. Also
"SELECT * FROM member WHERE name='".$_REQUEST[name]."'";
Wenn ich jetzt einen Benutzernamen angebe den es NICHT gibt funktioniert die Query auch so weit normal. Nur dass es den Datensatz eben nicht gibt. Jetzt das für mich irgendwie vollkommen unbegeifliche:
gebe ich einen Benutzernamen ein der auf der DB vorhanden ist wird der einfach leer:
$sql="SELECT * FROM member WHERE name='".$_REQUEST[name]."'";
echo $sql;
$result=mysql_query($sql) ;
if(mysql_affected_rows($db)==0) {
echo "Den User gibt es nicht!";
}

Naja. Er zeigt mir sql:
SELECT * FROM member WHERE name=''
und findet daher auch keine Datensätze!
Vielleicht ist es wichtig: Auf meinem Server hat das ganze perfekt funktioniert - Aber jetzt auf dem anderen Server ......

Danke schon mal im Vorraus
CYA
 
HI

nimm mal ein paar Gänsefüßchen bei deinem Select Statement weg.
Code:
$sql = ("SELECT * FROM member WHERE name='$_REQUEST[name]'");

So sollte es dann gehen, aber noch einen Tip.
Mach am besten nie ne *-Abfrage, da er dann die ganze Tabelle durchgeht. Zwar ist das nicht schlimm, aber denk Dir mal, du programmierst einen OnlineShop oder was ähnliches, was ziemlich viele Datensätze hat. Dann dauert das ganzschön lang, bevor er alle hat.

Hoffe ich konnte Dir helfen.;)
 
Ich finde schon, dass die doppelten Anführungszeichen an der richtigen Stelle sind, aber ich würde den Feldwert des Feldes name noch auf Gültigkeit überprüfen:
PHP:
$name = ( isset($_REQUEST['name']) && !empty($_REQUEST['name']) && (trim($_REQUEST['name'])!="") )
  ? $_REQUEST['name']
  : FALSE;

if($name !== FALSE) {
  $query = "SELECT * FROM `member` WHERE name='".$name."'";
  echo("<tt>".$query."</tt>");
  $result = mysql_query($query);
  if(mysql_affected_rows($db)==0) {
    echo("Den User gibt es nicht!");
  }
}
 
quasi machst du dann am besten noch ein Limit 1 dahinter, das bewirkt, das wenn der user gefunden wird er sofort abbricht weiterzusuchen.
Das mit dem * hat sicher auch was mit geschwindigtkeit zu tuen, aber meist will man ja die daten die da drin stehen irgendwo noch anzeigen und kann sie daher gleich in ein array($user['name']; ... ) schreiben.
Aber es ist empfehlenswert das * zu begrenzen wenn du wirkich nur ein oder 2 daten brauchst.

PHP:
$sql = ('SELECT name, email FROM member WHERE name="'.$_REQUEST[name].'" LIMIT 1);
 
okay! danke erstmal das war sehr informativ! ich werde es mal versuchen!

was sollte ich statt * machen? imemr die entsprechenden feldnamen? naja! cu
 
@Voodoo Guck mal meinen Post an, hab da auch die . weggenommen, aber die wohlen ja nicht auf mich hören. :( :-)

@ Harrier Ja, du solltest immer dieses * vermeiden, das andere ist wesentlich schneller, auch wenn mehr Schreibarbeit, aber zahlt sich bei der Ausgabe aus.
 
wie auch immer! mein problem ist dass das trotzdem alles net richtig will - was ich besonders komisch finde:
ich lasse mir als $_REQUEST[name] anzeigen! Wenn der User in der DB NICHT exestiert passt das auch. Er zeigt das an was ich ins form getippt hab. Wenn jetzt aber der User exestiert gbt er mir nichts aus (=> er schreibt auch in $sql nur nen leerstring nach name= ). Das ganze nebenbei bemerkt passoert BEVOR ich mysql_query() ausführe! (Was nach meiner Vorstellung technisch unmöglich ist!) Ich hab das jetzt schon zig mal durch probiert! Alles funktioniert so lange bis ich den Namen den ich eingebe auch in die MySQL-DB schreibe! *sehr sehr verwirrt ist*

//nebenbei: man bekommt hier echt schnell, kompetente Antworten ;) ich hab eigentlich gedacht vor heut Abend brauch ich hier gar net reinschaun

//edit2:
@angeltv:okay thx! jetzt muss ich zwar n paar hundert querys (auf ner anderen site) umschreiben aber geschwindigkeit ist wichtig ;)
 
Zuletzt bearbeitet:
@Harrier

Poste mal bitte Deinen kompletten PHP Code, dann kann ich nochmal reinschauen, meist ist es nur ein kleiner Flüchtigkeitsfehler.
 
das vermute ich auch - hat aber finde ich sehr komische auswirkungen ;)

PHP:
<?php
session_start();
include("connect.php");


$sql = "SELECT * FROM member WHERE name='".$_REQUEST[name]."'";
//echo $sql;

$result=mysql_query($sql) OR die ("Ein Fehler ist aufgetreten!");
if(mysql_affected_rows($db)==0) {
    echo "Benutzername falsch!";
    exit();
}
$row=mysql_fetch_array($result);
if($row[pw]!=md5($_REQUEST[logpw])) {
    echo "Passwort falsch!";
    include("index.php");
    exit();
}
else {
    setcookie("logname",$_REQUEST[logname],time()+604800);
    setcookie("logpw",$_REQUEST[logpw],time()+604800);
    $_SESSION['name']=$row[name];
    $_SESSION['level']=$row[level];
    header("location:index.php");
}
?>

bei dem echo $sql das hier nur comment ist würde eben wenn der user exestiert SELECT * FROM member WHERE name='' ausgegeben und anderenfalls statt dem leerstring der eingegebene Name
 
Zurück