Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL-Datensatz-Abgleich funktioniert nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL-Datensatz-Abgleich funktioniert nicht

    Hi alle,

    im Rahmen eines Formulars soll vor dem Eintrag in die DB überprüft werden, ob der zum Übergeben gewünschte Datensatz bereits vorhanden ist. Ist dies der Fall, so soll keine Eintragung in die DB erfolgen und stattdessen ein Hinweis (Z.B. "Name befindet sich schon in der DB") erfolgen.

    Soweit so gut.

    Leider klappt die if-anweisung, die identische Namen abfangen soll, nicht.
    Hier das Script:
    PHP-Code:
    <?php
    // include 'connect.php';
    $spielername $_POST['spielername'];
    $spielername mysql_real_escape_string($spielername);
         
    mysql_select_db('meineDatenbank');
     
    $abfrage "SELECT meinSpaltenname FROM meinTabellenname WHERE meinSpaltenname LIKE '".$spielername."'";

     
    $result mysql_query($abfrage);
     
    $row mysql_fetch_array($result);

            if (
    $row['meinSpaltenname']>0) {
            echo 
    'Name schon vorhanden!';
            }
                else {
                    
    // Hier - wenn Name noch nicht vorhanden - dann mit INSERT INTO der Eintrag
                 
    echo 'Eintragung erfolgreich!';
             };
    mysql_close();
    ?>
    Ist z.B. "Beispielname" in der Spalte meinSpaltenname schon vorhanden, wird dennoch "Beispielname" nochmal zusätzlich eingetragen, was ja eben genau nicht sein soll, was aber zeigt, dass ansonsten die Syntax bzw. das Script fehlerfrei ist.

    Hat jemand eine Idee?
    Danke!


  • #2
    Zitat von MrSport Beitrag anzeigen
    , was aber zeigt, dass ansonsten die Syntax bzw. das Script fehlerfrei ist.
    Nein, das ist nur frei von Hirn.
    • warum LIKE, wenn Du auf Gleichheit prüfen willst?
    • warum vergleichst Du einen String mit einer Zahl?
    • was passiert, wenn mehrere Rows LIKE sind?
    • warum verwendest Du nicht Techniken der DB, um gleiche Records zu verhindern?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      PHP-Code:
      $row mysql_fetch_array($result); 

              if (
      $row['meinSpaltenname']>0
      Stringvergleich mit >0? Du musst schon die Anzahl der Zeilen prüfen und nicht den Namen (falls er existiert).
      Zitat von nikosch
      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

      Kommentar


      • #4
        @akretschmer
        warum LIKE, wenn Du auf Gleichheit prüfen willst?
        Ich frage doch lediglich mit LIKE ab, ob der gesendete Datensatz vorhanden ist...und wenn nix gefunden wird, sollte $row['meinSpaltenname'] 0 ergeben.
        warum vergleichst Du einen String mit einer Zahl?
        Tue ich doch gar nicht. Oder ist $row['meinSpaltenname'] ein String??
        was passiert, wenn mehrere Rows LIKE sind?
        Genau dann wäre $row[....] ja größer 0 und der Datensatz wäre schon vorhanden, womit der Zweck der Abfrage ja erfüllt wäre...nämlich eben, dass ein Hinweis kommt, "Datensatz schon vorhanden"....
        warum verwendest Du nicht Techniken der DB, um gleiche Records zu verhindern?
        Wenn ich wüsste wie, hätte ich wohl kaum diese script-variante gewählt.
        Nein, das ist nur frei von Hirn.
        Wenn die Syntax falsch ist, weshalb funktioniert das script unten dann einwandfrei?


        @tkausl
        Stringvergleich mit >0? Du musst schon die Anzahl der Zeilen prüfen und nicht den Namen (falls er existiert).
        Ist denn $row['meinSpaltenname'] ein String? Ich bin davon ausgegangen, dass dass ein array ist, welches die Zeilenzahl ausliest....

        Und noch was...deshalb war ich ja am verzweifeln....DENN:
        PHP-Code:
        <?php
         
        include 'db_blwest_connect.php';

        $spielername $_POST['spielername'];
        $spos $_POST['spos'];
        $verein $_POST['verein'];
        $spielername mysql_real_escape_string($spielername);
        $spos mysql_real_escape_string($spos);
        $verein mysql_real_escape_string($verein);

             
        mysql_select_db('meineDatenbank');

         
        $abfrage "SELECT Gesetzt_an FROM Meldeliste2015 WHERE Verein LIKE '".$verein."' AND Gesetzt_an='".$spos."'";
                
        $result mysql_query($abfrage);
                
        $row mysql_fetch_array($result);
                if (
        $row['Gesetzt_an']>0) {
                echo 
        'Setzlisten-Nummer falsch oder schon vergeben!';
                }
                    else {
                        echo 
        'Eintragung erfolgreich!';
                        
        mysql_query("INSERT INTO Meldeliste2015 (Spielername, Verein, Gesetzt_an) VALUES ('$spielername','$verein','$spos')");

                 };

        mysql_close();


        ?>
        funktioniert einwandfrei. Umso erstaunlicher ist es ja, dass die andere abfrage/bedingung nicht funktioniert.

        Kommentar


        • #5
          Zitat von MrSport Beitrag anzeigen
          Ich frage doch lediglich mit LIKE ab, ob der gesendete Datensatz vorhanden ist...und wenn nix gefunden wird, sollte $row['meinSpaltenname'] 0 ergeben.

          Tue ich doch gar nicht. Oder ist $row['meinSpaltenname'] ein String??

          Ist denn $row['meinSpaltenname'] ein String? Ich bin davon ausgegangen, dass dass ein array ist, welches die Zeilenzahl ausliest....
          Nö, ja, ja.
          $row ist dein Array, $row['meinSpaltenname'] ist der Inhalt der Spalte, sofern denn ein Datensatz gefunden wurde.
          Zitat von nikosch
          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

          Kommentar


          • #6
            Zitat von MrSport Beitrag anzeigen
            Wenn ich wüsste wie, hätte ich wohl kaum diese script-variante gewählt.
            Die Doku beschreibt UNIQUE.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Schade...hatte gehofft, dass ich das script nur leicht verändern muss, weil ich da irgendwo einen denkfehler drin hatte und nicht, dass ich jetzt wieder was neues lernen muss...

              Dann werde ich wohl dumm sterben und mich vor allem weiter extrem wundern, weshalb das andere script einwandfrei läuft...

              Trotzdem vielen Dank! Und keine Sorge...werde mir kein Seil holen..

              Kommentar


              • #8
                Zitat von akretschmer Beitrag anzeigen
                Die Doku beschreibt UNIQUE.
                In dem Fall sollte er aber PDO nutzen, damit er auch eine Exception abfangen kann.

                @MrSport: Musst du nicht Zwangsläufig, allerdings sollte dir klar werden, dass du im aktuellen Script eine Zeile abrufst und den Usernamen entnimmst. Nicht wirklich, was du willst. Google einfach mal nach "mysql count rows" oder ähnlichen, da sollten dich ein paar Ergebnisse in die richtige Richtung weisen.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  So habs tatsächlich hingekriegt.

                  Eure Antworten -wenn auch nicht auf direktem Wege- haben mich auf die richtige Fährte gebracht!

                  Vielen Dank!

                  Kommentar


                  • #10
                    Moin,

                    da es noch nicht geschrieben wurde noch:
                    Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt.
                    Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
                    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
                    Relax, you're doing fine.
                    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                    Kommentar

                    Lädt...
                    X