• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datenbankinhalte vergleichen

THE_fan

Neues Mitglied
Hallo,

ich bin gerade dabei, eine Datenbankabfrage für ein Formular zu bauen.

Sinn des Formulars ist es, dass sich Leute für eine Disziplin (Laufband, Radfahren oder Radfahren (Kinder)) eintragen können. Dabei möchte ich abfragen, ob der Name des Menschen in der Datenbank schon vorhanden ist. Ist er das, soll es eine Fehlermeldung geben, andernfalls soll der Name eingetragen werden.
Soweit alles verstanden?

Ich habe versucht mit meinen bescheidenen Kentnissen da mal was zu bauen.
Allerdings wird mir nach Absenden des Formulars nichts in die Datenbank eingetragen.

PHP:
error_reporting(E_ALL);

if(isset($_POST['send'])){
  $pruefe = mysql_query("SELECT COUNT(*) FROM wettkampf WHERE UPPER(vorname) = '".strupper($_POST['vname'])."'") or die(mysql_error());
  
  if($pruefe >= 1){
      while($res = mysql_fetch_array($pruefe)){
        if(strupper($res['nachname']) == strupper($_POST['nname'])){
          $info = "Der Name ist schon eingetragen!";
        }
        echo "1";
      }
  }else{
    $vname = htmlentities($_POST['vname']);
    $nname = htmlentities($_POST['nname']);
    $geraet = $_POST['geraet'];
    mysql_query("INSERT INTO wettkampf(vorname, nachname, geraet) VALUES('".$vname."', '".$nname."', '".$geraet."')") or die(mysql_error());
    $info = "Erfolgreich eingetragen. Vielen Dank!";
  }
}
 
Werbung:
Hallo,

habe nun mal etwas weiter geforscht.

PHP:
<?php
include('../sqlconfig.inc.php');
error_reporting( -1 );
ini_set('display_errors', TRUE);
$info = "";

if(isset($_POST['send'])){
  echo "jo ";
  $pruefe = mysql_query("SELECT COUNT(id) FROM wettkampf WHERE UPPER(vorname) = '".strtoupper($_POST['vname'])."'") or die(mysql_error()); #Anzahl der EInträge mit gleichem Vornamen
  echo mysql_num_rows($pruefe); #Zahl
  if($pruefe >= 1){ #Wenn 1 oder mehr Treffer
    echo "ok ";
      $pruefung = mysql_query("SELECT * FROM wettkampf WHERE UPPER(vorname) = '".strtoupper($_POST['vname'])."'") or die(mysql_error()); #Prüfe alle Nachnamen
      while($res = mysql_fetch_array($pruefung)){
       echo "while ";
        if(strtoupper($res['nachname']) == strtoupper($_POST['nname'])){ #Prüfung
          $info = "Der Name ist schon eingetragen!";
        }
        echo "whilenachif ";
      }
  }else{ #Wenn keine gleichen VOrnamen gefunden werden und Prüfung negativ.
    echo "else ";
    $vname = htmlentities($_POST['vname']);
    $nname = htmlentities($_POST['nname']);
    $geraet = $_POST['geraet'];
    mysql_query("INSERT INTO wettkampf(vorname, nachname, geraet) VALUES('".$vname."', '".$nname."', '".$geraet."')") or die(mysql_error());
    $info = "Erfolgreich eingetragen. Vielen Dank!";
  }
}

?>

Nach jeder Abfrage habe ich eine Ausgabe.
Bisher ausgegeben wird mir "jo 1 ok", sprich, ich komme bis nach die if-Abfrage zur Prüfung.
Was mich allerdings wundert - eventuell habe ich es auch nicht verstanden (?) - ist, dass mir eine "1" ausgegeben wird, obwohl die Datenbank leer ist.

Weiß jemand Rat?
 
Werbung:
COUNT() gibt dir immer eine Ergebnistabelle zurück.. wenn es halt keine (EDIT: )Zeilen gibt dann hast du da ne 0 drin stehen. Lass das COUNT() weg oder prüf den count wert. Außerdem solltest du dich über SQL Injection kümmern.. das ist eine ziemliche Sicherheitslücke in deinem Script. Niemals Benutzereingaben ungeprüft an ein Script übergeben.
 
Zuletzt bearbeitet:
PHP:
<?php
include('../sqlconfig.inc.php');
error_reporting( -1 );
ini_set('display_errors', TRUE);

if(isset($_POST['send'])){
  $vname = mysql_real_escape_string(strtoupper($_POST['vname'])); // SQL Injection erschweren
  $nname = mysql_real_escape_string(strtoupper($_POST['nname'])); // SQL Injection erschweren
  $sql = "SELECT id
         FROM wettkampf 
         WHERE  UPPER(vorname) = '".$vname."' and // Vorname und Nachname sollen übereinstimmen
                UPPER(nachname) = '".$nname."'";
  $result = mysql_query($sql) or die(mysql_error());
  $result_count = mysql_num_rows($result); // Zeilen zählen
  if($result_count > 0) // Zeilen gefunden?
     echo "Der Name ist schon eingetragen!"; // Namenskombination vergeben
  else { // Keine Zeilen gefunden
    $vname = mysql_real_escape_string(htmlentities($_POST['vname'])); // HTML Zeichen umwandeln, SQL Injection erschweren
    $nname = mysql_real_escape_string(htmlentities($_POST['nname']));
    $geraet = mysql_real_escape_string(htmlentities($_POST['geraet']));
    $sql = "INSERT INTO wettkampf (vorname, nachname, geraet) VALUES('".$vname."', '".$nname."', '".$geraet."')"; // SQL Eintrag..
    mysql_query($sql) or die(mysql_error()); //..eintragen
    echo "Erfolgreich eingetragen. Vielen Dank!"; //gern geschehen
  }
}

?>
Nur wärend der Vorlesung geschrieben, keine Ahnung obs funktioniert.
 
Zuletzt bearbeitet:
Hallo ka9de,

ich habe es nun hinbekommen, dass es funktioniert.

PHP:
<?php
include('../sqlconfig.inc.php');
error_reporting( -1 );
ini_set('display_errors', TRUE);
$info = "";

if(isset($_POST['send'])){
  echo "jo ";
  $pruefung = mysql_query("SELECT * FROM wettkampf WHERE UPPER(vorname) = '".strtoupper($_POST['vname'])."'") or die(mysql_error());
  $pruefe =  mysql_num_rows($pruefung); #Zahl
  if($pruefe >= 1){
    echo "ok ";
      while($res = mysql_fetch_array($pruefung)){
       echo "while ";
        if(strtoupper($res['nachname']) == strtoupper($_POST['nname'])){
          $info = "Der Name ist schon eingetragen!";
        }
        echo "whilenachif ";
      }
  }else{
    echo "else ";
    $vname = htmlentities($_POST['vname']);
    $nname = htmlentities($_POST['nname']);
    $geraet = $_POST['geraet'];
    mysql_query("INSERT INTO wettkampf(vorname, nachname, geraet) VALUES('".$vname."', '".$nname."', '".$geraet."')") or die(mysql_error());
    $info = "Erfolgreich eingetragen. Vielen Dank!";
  }
}

?>

Jetzt geht es an die SQL-Injections ;)

Vielen Dank für deine Hilfe!
 
Werbung:
Das ist aber umständlich was du da machst.. wieso prüfst du den Nachnamen nicht gleich mit in der SQL Abfrage?? Das ist nicht nur schöner sondern auch schneller.
 
Zurück
Oben