Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bedingte Anweisung funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Bedingte Anweisung funktioniert nicht

    Hallo miteinander!

    Habe ein Problem mit einer bedingten Anweisung. Ich bekomme fünf Werte aus einem Formular ($_POST) wobei ich einen Wert (marke) mit einem vorhandenen aus der Datenbank (mysql) vergleichen will. Wenn dieser Wert bereits in der Datenbank existiert, soll er nicht noch einmal angelegt werden (übernehme einfach die ID vom vorhandenen Datensatz zum weiteren inserten).

    Aus diesem Grund habe ich die Variable $marke_exists (boolean) eingeführt um die Existenz bzw. Nicht-Existenz des Wertes zu speichern. Ist $marke_exists true, existiert der Wert bereits, ansonsten nicht.

    Die Daten werden korrekt vom Formular gesendet und die SQL-Anweisung ist ebenfalls richtig. Trotzdem funktioniert das nicht ganz so wie ich es mir Vorgestellt habe und ich kann den Fehler einfach nicht finden. Eine Fehlermedlung an sich wird nicht ausgegeben, jedoch weiß ich, dass ich garnicht erst in den Anweisungsblock (in der while-Schleife) komme.

    Hoffe, dass ihr mir helfen könnt und bin dankbar für jede Antwort und jeden Vorschlag!

    Gruß!

    PHP-Code:
    $marke $_POST['marke']." ";
        
    $type $_POST['type']." ";
        
    $karosserie $_POST['karosserie']." ";
        
    $baujahr $_POST['baujahr']." ";
        
    $sitzart $_POST['sitzart']." ";
        
        
    /****************************************MARKENPRÜFUNG**************************************************/
        
        
    $marke_exists=false//Ausgangssituation: Marke existiert noch nicht
        
    $marke_id;
        
        
    $sel_marke="SELECT `marke_id`, `marke_name` FROM `tbl_marke`";
        
    $quer_marke=mysql_query($sel_marke) or die(mysql_error());
        
        while(
    $res_marke=mysql_fetch_array($quer_marke))
        {
          
    //Ausgabe zum debugging:
          
    echo $res_marke[1]." "//Ausgabe: Audi
          
    echo $marke."<br>"//Ausgabe: Audi
          
          //Wenn die Eingabe mit einem vorhandenen Eintrag übereinstimmt muss die Marke nicht doppelt eingetragen werden.
          //In diesen Anweisungsblock komme ich nicht hinein:
          
    if(strtolower($res_marke[1]) == strtolower($marke))
          {
            
    $marke_exists=true//Marke vorhanden
            
    $marke_id=$res_marke[0]; //ID wird zum automatischen inserten gespeichert
            
    break;
          }
          else
          {
            continue;
          }
        }
                
        
    //Vermeidung der Redundanz (DB) bei Marken sowie Typen, da diese immer unique sind
        
    if($marke_exists == false)
        {
          
    //INSERT marke (SET markenID)
          
    echo 'marke existiert noch nicht';
        }
        elseif(
    $marke_exists == true)
        {
          echo 
    'marke existiert';
        } 


  • #2
    Hi !

    Also wenn es wirklich stimmt und du garnicht erst in die While-Schleife reinkommst, dann würd ich zuerst in der Bedingung, bzw deren Variablen nach dem Fehler suchen:

    PHP-Code:
    $res_marke=mysql_fetch_array($quer_marke
    Ich würde nach dem Abrufen der mysql Daten die Variable $quer_marke überprüfen, ob mit der auch alles in Ordnung ist, schon um bei einem Fehler die Ausführung des Skripts mit einem Fehler zu quittieren, anstatt unten mit $marke_exists=false weiterzumachen.

    Im Moment sollte es aber reichen, wenn du ein var_dump($quer_marke) machst und schaust, ob $quer_marke auch den erwarteten Inhalt hat und nicht NULL ist.

    Kommentar


    • #3
      In die while-Schleife komme ich schon rein, nur eben nicht in die IF!

      Kommentar


      • #4
        Tja, dann sind die Begriffe wohl eben nicht gleich. Benutze
        PHP-Code:
        var_dump ($res_marke[1] , $marke); 
        echo ist zu ungenau.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Welche ? Diese ?

          PHP-Code:
          f(strtolower($res_marke[1]) == strtolower($marke)) 
          {
          ...

          Schau nach ob beide Variablen die von dir erwarteten Werte haben.

          Ausserdem... werden Strings in php nicht mit strcmp(str1, str2) verglichen ?

          versuch mal:

          PHP-Code:
          if(strcmp(strtolower($res_marke[1]),strtolower($marke))==0
          {
          ...

          Ansonsten wird glaub ich nur die Adresse der beiden ersten Chars verglichen, welche zwangsläufig ja nicht gleich ist (Zumindest in anderen Sprachen so).

          EDIT: strcmp war an der falschen Stelle

          Kommentar


          • #6
            Ausserdem... werden Strings in php nicht mit strcmp(str1, str2) verglichen ?
            Nein. Und das
            if(strtolower(strcmp($res_marke[1]),strtolower($marke))==0)
            ist totaler Müll. Da gibts nichts zu versuchen.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              @RedWraith:

              Ich glaube, dass ich mein Problem verständlich geschildert habe. Ich bin den Code sehr, sehr oft durchgegangen. Habe verschiedenste Fehlerquellen ausgemerzt und gedebuggt. SQL-Anweisungen, Daten aus der Datenbank sind korrekt und syntaktisch dürfte alles in bester Ordnung sein.

              Mir stellt sich nur die Frage warum ich nicht in dieses IF komme? Hab davor beide Vergleichsoperatoren ausgegeben und diese sind identisch. Somit müsste ich in der IF-Anweisung landen. Leider ists aber nicht so.

              Kommentar


              • #8
                Siehe #4. Das Prinzip ist aber eh nicht so dolle, denn so eine Abfrage gehört direkt in die Query. Du lädst ja auch nicht alle Deine Freunde zu Dir in die Wohnung ein, wenn Du nur mit einem Kaffeetrinken willst.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Tja, dann fallen mir als Letztes nurnoch whitespaces, wie Zeilenumbrüche oder so ein. Schau dir mal trim an.

                  Kommentar


                  • #10
                    Danke für eure Hilfe.. War wieder einmal ein unnötiger, blöder Fehler ^^

                    Kommentar

                    Lädt...
                    X