Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfen, ob Wert schon vorhanden ist funktioniert nicht.

Einklappen

Neue Werbung 2019

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

  • Prüfen, ob Wert schon vorhanden ist funktioniert nicht.

    Hallo,
    ich möchte, in einer php-Datei prüfen, ob ein gewisser Wert schon in einer Spalte der gesamten Tabelle vorkommt.
    Ist dieser Wert noch nicht vorhanden, wird dieser in einer neuen Reihe eingetragen.

    Um zu prüfen, ob es den Wert schon gibt, habe ich folgendes auf der phpmyadmin Seite ausprobiert:
    Code:
    SELECT EXISTS(SELECT name FROM `list` WHERE name='test');
    Allerdings funktioniert dies nicht, wenn ich das Script auf der php-Seite nutze:
    PHP-Code:
     $con mysqli_connect("127.0.0.1""root""***");if(!$con){echo "nicht verbunden";}
    if(!
    mysqli_select_db($con"all_users")){echo "nicht ausgewählt";}

    $sql "SELECT EXISTS(SELECT name FROM `list` WHERE name='test');";
    if(!
    mysqli_query($con$sql))//prüfen, ob es den Eintrag "test" schon gibt
            
    {//!wenn nicht, dann...
                
    mysqli_query($con"INSERT INTO `list` (name) VALUES('test')");//trage test ein
            

    Aber die überprüfung kann nicht ausgeführt werden.

    Habe es auch schon mir INSERT IGNORE INTO versucht, aber da wurden Werte immer eingetragen, egal, ob es sie schon gab.

  • #2
    Du möchtest bestimmt mal nachsehen, was mysqli_query liefert: http://de2.php.net/manual/de/mysqli.query.php

    Nur im Fehlerfall kommt da ein false, bei einem leeren Ergebnis aber nicht
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Zitat von KratzKatz Beitrag anzeigen
      ...
      Aber die überprüfung kann nicht ausgeführt werden.

      Habe es auch schon mir INSERT IGNORE INTO versucht, aber da wurden Werte immer eingetragen, egal, ob es sie schon gab.
      Wie schon von uha angedeutet, Du püfst schon und es wird ausgeführt. Du hast aber offenbar nicht Dein Statement ausprobiert, bzw. ob es fehlerfrei läuft.
      Also Fehler kontrollieren und ich würde jedenfalls schon mal sagen, das ; aus dem Statement String entfernen.

      Kommentar


      • #4
        Zitat von Perry Staltic Beitrag anzeigen

        Wie schon von uha angedeutet, Du püfst schon und es wird ausgeführt. Du hast aber offenbar nicht Dein Statement ausprobiert, bzw. ob es fehlerfrei läuft.
        Also Fehler kontrollieren und ich würde jedenfalls schon mal sagen, das ; aus dem Statement String entfernen.
        Das Statement bzw. das Semikolon ist hier nicht das Problem, sondern wie das Ergebnis mit PHP ausgewertet wird.
        Es wird ausgewertet, ob das SQL einen Fehler wirft und nicht ob als Ergebnis 0 zurück kommt. Korrekt wäre also:

        PHP-Code:
        $result mysqli_query($con$sql);
        $row $result->fetch_array(MYSQLI_NUM);

        if (
        $row[0] == 0) {
            
        // Eintrag existiert nicht

        sorry, shift-taste kaputt

        Kommentar


        • #5
          Danke, hatte wohl eine kleine Hirnblähung
          Habs nun so lösen können:
          PHP-Code:
          $auth $_POST["auth"];
                  if(!
          mysqli_select_db($con"all_users")){echo "nicht ausgewählt";}

                  
          $result mysqli_query($con"SELECT name FROM `list` WHERE name='$auth';");
                  
          $row $result->fetch_array(MYSQLI_NUM);

                  if(empty(
          $row[0]))
                  {
                     
          mysqli_query($con"INSERT INTO `list` (name) VALUES('$auth');");
                  } 

          Kommentar


          • #6
            Zitat von KratzKatz Beitrag anzeigen
            Habs nun so lösen können:
            Und warum nicht mit http://de2.php.net/manual/de/mysqli-result.num-rows.php

            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

            Kommentar


            • #7
              Zitat von KratzKatz Beitrag anzeigen
              Habs nun so lösen können [...]
              Oder noch einfacher, setz ein UNIQUE Constraint auf die Spalte, dann kannst du Werte gar nicht erst doppelt eintragen.

              Kommentar


              • #8
                Zitat von KratzKatz Beitrag anzeigen
                Danke, hatte wohl eine kleine Hirnblähung
                Habs nun so lösen können:
                PHP-Code:
                $auth $_POST["auth"];
                if(!
                mysqli_select_db($con"all_users")){echo "nicht ausgewählt";}

                $result mysqli_query($con"SELECT name FROM `list` WHERE name='$auth';");
                $row $result->fetch_array(MYSQLI_NUM);

                if(empty(
                $row[0]))
                {
                mysqli_query($con"INSERT INTO `list` (name) VALUES('$auth');");

                Eine schöne Sicherheitslücke, die du da baust. Beschäftige dich mal mit SQL-Injections und mysqli_real_escape_string().

                Kommentar

                Lädt...
                X