#1 19. April 2010 daten einer datenbank überprüfen servus, ich bin gerade dabei eine regestrierung zu schreiben. es funktioniert alles soweit captcha und schreiben in die datenbank. nun habe ich folgendes proplem. es soll ein fehler kommen wenn die email schonmal vorhanden ist oder wenn der username vorhanden ist. nun weiß ich nicht genau wie ich das machen soll. Code: <?php session_start(); if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){ unset($_SESSION['captcha_spam']); }else{ die ("Der Sicherheitscode ist falsch!"); } class DB{ var $DB_Name; var $DB_User; var $DB_Pass; var $DB_Server; var $Abfrage; function __construct(){ require_once('config.php'); $link = mysql_connect(DB_SERVER, DB_USER, DB_PASS); if (!$link) { die('keine Verbindung möglich: ' . mysql_error()); } #Auswahl der Datenbank $db_selected = mysql_select_db(DB_NAME, $link); if (!$db_selected) { die ('Kann foo nicht benutzen : ' . mysql_error()); } } // Ende __construct function queryDB(){ $result = mysql_query($this->Abfrage); if (!$result) { die('Ungültige Abfrage: ' . mysql_error()); } $data[0][0]=$num_rows = mysql_num_rows($result); $x=1; while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $data[$x]=$row; $x++; } Return($data); mysql_free_result($result); }// Ende queryDB function editDB(){ $result = mysql_query($this->Abfrage); if (!$result) { die('Ungültige Abfrage: ' . mysql_error()); } } } //Ende Class ?> Code: <?php include('classes/class_DB.php'); $loginname = $_POST[username]; $pass = $_POST[passwort]; $pass_conf = $_POST[pass_conf]; $vorname= $_POST[vorname]; $nachname=$_POST[nachname]; $email = $_POST[email]; $gebdatum=$_POST[gebdatum]; $strasse = $_POST[strasse]; $plz=$_POST[plz]; $wohnort = $_POST[wohnort]; $ip = $_POST[ip]; if($loginname == false || $pass == false || $pass_conf == false || $email == false || $vorname == false || $nachname == false || $gebdatum == false || $strasse == false || $plz == false || $wohnort == false ){ echo"Bitte alle Felder ausfüllen";} if ($pass != $pass_conf){ echo"Passwort wiederholen"; } else { Values($name,$pass,$email,$strasse,$wohnort,$ip) "; $status=1; $Abfrage="Insert into user (loginname,password,email,vorname,nachname,geburtsdatum,strasse,plz,wohnort,status) Values('".$loginname."','".md5($pass)."','".$email."','".$vorname."','".$nachname."','".$gebdatum."','".$strasse."','".$plz."','".$wohnort."','".$status."')"; $obj = new DB; $obj->Abfrage=$Abfrage; $obj->editDB(); header("location:index.php"); echo"Danke für deine Registration" ; } ?> so sieht bis jetzt mein script aus + Multi-Zitat Zitieren
#2 19. April 2010 AW: daten einer datenbank überprüfen 1. Du solltest die eigegebenen Daten prüfen. Such mal mysql_real_escape_string. 2. Du machst ne Abfrage mit Where-Klausel und überprüfst so, ob es nen Usernamen oder die Mailaddy schon gibt. Über die Boardsuche gefunden: if ( mysql_num_rows( mysql_query( "SELECT daten FROM tabelle WHERE daten='$daten'" ) ) != 0 ) { echo "Datensätze gefunden"; } + Multi-Zitat Zitieren
#3 19. April 2010 AW: daten einer datenbank überprüfen Mach ein Check mit mysql_num_rows. PHP: SELECT loginname FROM user WHERE vorname = '".$vorname."' || email = '".$email."' Und dann bekommst du ne Zahl ausgegeben entweder 1 oder 0. 0= Kein Eintrag gefunden 1= Ein eintrag gefunden. Email adresse oder Name ist bereits verwendet. Edit:// zu langsam^^ + Multi-Zitat Zitieren
#4 19. April 2010 AW: daten einer datenbank überprüfen Was du suchst ist vermutlich mysql_num_rows. Was ist das für eine DB-Klasse, die Du da benutzt? Sofern du unter PHP5 arbeitest, kann ich dir mysqli empfehlen. Damit sähe es dann ungefähr so aus PHP: $db = new $mysqli ( ); $email = strtolower ( $db -> real_escape_string ( $_POST [ 'email' ])); $qry = $db -> query ( "SELECT loginname FROM user WHERE email='" . $email . "'" );if ( $qry -> num_rows > 0 ) $email_vorhanden = true ; Alternativ könnte auch das klappen (ungetestet) PHP: $db = new $mysqli ( ); $email = strtolower ( $db -> real_escape_string ( $_POST [ 'email' ]));if ( $qry = $db -> query ( "SELECT loginname FROM user WHERE email='" . $email . "'" )) $email_vorhanden = true ; Um Dein Script vor XSS zu schützen, habe ich mir erlaubt, mysql_real_escape_string zu benutzen. Außerdem wird mit strtolower sichergestellt, dass es keine Probleme mit der Groß- und Kleinschreibung gibt. EDIT:/ noch langsamer XD + Multi-Zitat Zitieren