Fehler bei SQL-Array-Übergabe???

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

  • Fehler bei SQL-Array-Übergabe???

    Hallo Leute,

    nachdem mir die Suchfunktion keine Antwort lieferte, muss ich mein Problem hier doch mal posten, wobei ich sicher bin, dass die Lösung hier im Forum schon irgendwo geschrieben steht...

    Folgendes Problem:
    Ich möchte mir eine Abfrage coden, die verhindern soll, dass in der SQL-DB eine Dopplung entsteht...

    PHP-Code:
    mysql_connect("localhost","root","") or die ("Keine Verbindung möglich");
    mysql_select_db("bow") or die ("Die Datenbank existiert nicht");
       
    $abfrage2 "SELECT angebot_name FROM angebote WHERE oberbegriff_ort = 'Dresden' AND oberbegriff_name = 'Albert'";
    $ergebnis2 mysql_query($abfrage2); 
    $ausgabe2 mysql_fetch_array($ergebnis2);

    if   (
    in_array("Alpha"$ausgabe2))
         {echo 
    "Dopplung gefunden";}
    else {echo 
    "Keine Dopplung gefunden";} 
    Das Problem: Der String "Alpha" existiert in dem ARRAY "$ausgabe2", trotzdem bekomme ich die Ausgabe "KEINE Dopplung gefunden"...
    Daher habe ich den Verdacht, dass meine SQL-Daten nicht korrekt in das ARRAY $ausgabe2 übernommen werden...

    Kann mir da jemand weiterhelfen?
    Danke und viele Grüße aus Dresden,

    Dampfi

  • #2
    Re: Fehler bei SQL-Array-Übergabe???

    Original geschrieben von Dampfi
    Der String "Alpha" existiert in dem ARRAY "$ausgabe2"
    Da sind wohl Zweifel angebracht - kontrolliere das mittels
    var_dump($ausgabe2);

    Daher habe ich den Verdacht, dass meine SQL-Daten nicht korrekt in das ARRAY $ausgabe2 übernommen werden...
    Ich habe den Verdacht, du weißt nicht, was mysql_fetch_array() macht, und was nicht.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für deine Antwort.
      Ich habe die Lösung gefunden...
      Ich verstehe aber immernoch nicht, was an "mysql_fetch_array" falsch sein soll!?

      PHP-Code:
      mysql_connect("localhost","root","") or die ("Keine Verbindung möglich");
      mysql_select_db("bow") or die ("Die Datenbank existiert nicht");
         
      $abfrage2 "SELECT angebot_name FROM angebote WHERE oberbegriff_ort = 'Dresden' AND oberbegriff_name = 'Albert'";
      $ergebnis2 mysql_query($abfrage2); 
      while(
      $ausgabe2 mysql_fetch_array($ergebnis2))
           {
           
      $array_angebote explode(",",$ausgabe2["angebot_name"]);
           echo 
      $array_angebote[0];
           echo 
      $array_angebote[1];
           echo 
      $array_angebote[2];
           };

      if   (
      in_array("Alpha"$array_angebote))
           {echo 
      "Dopplung gefunden";}
      else {echo 
      "Keine Dopplung gefunden";} 
      Gruß,
      Dampfi

      Kommentar


      • #4
        Original geschrieben von Dampfi
        Ich verstehe aber immernoch nicht, was an "mysql_fetch_array" falsch sein soll!?
        Scherzkeks ...

        Vorher hast du es falsch angewendet, und jetzt richtig.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Also habe ich gelernt, das man in Verbindung mit MYSQL_FETCH_ARRAY eine WHILE-Schleife erzeugen MUSS!

          Sehe ich das richtig?
          Gibt es auch einen Befehl, mit dem ich eine Spalte in ein ARRAY auslesen kann, ohne eine WHILE-Schleife zu machen???
          Zuletzt geändert von Dampfi; 10.07.2006, 15:14.

          Kommentar


          • #6
            Original geschrieben von Dampfi
            Also habe ich gelernt, das man in Verbindung mit MYSQL_FETCH_ARRAY eine WHILE-Schleife erzeugen MUSS!
            Muss man nicht - wenn man nur den Inhalt eines Datensatzes haben will, kann man auch mysql_fetch nur einmal anwenden.

            Wenn man aber mehrere Datensätze haben will, empfiehlt sich natürlich eine Schleife (die aber nicht While sein muss).
            Gibt es auch einen Befehl, mit dem ich eine Spalte in ein ARRAY auslesen kann, ohne eine WHILE-Schleife zu machen???
            Aus allen Datensätzen im Ergebnis die Werte von Spalte XY in einem Array?

            Nein, dafür gibt es nichts "fertiges".
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Danke für deine Antwort.
              Ich stelle also fest, dass ich die Lösung eher zufällig gefunden habe

              Es ist ein neues Problem aufgetaucht...
              Das Skript funktioniert nur dann, wenn unter dem jeweiligen Oberbegriff EXAKT EIN Angebot gespeichert ist...
              Sind zwei oder mehr Angebote in der SQL-Tabelle, geht es nicht mehr?

              Woran könnte das liegen...?

              Kommentar


              • #8
                Original geschrieben von Dampfi
                [...] funktioniert nur dann, wenn [...]
                [...] geht es nicht mehr?
                Sowas ist keine Problembeschreibung.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Hmm, ja... ist schwierig zu erklären...

                  Das Skript, so wie ich es OBEN hier gepostet habe, funktioniert einwandfrei.
                  Baue ich das in mein Projekt ein, geht es nur noch MANCHMAL!

                  Wie kann ein Skript nur MANCHMAL funktionieren...
                  Es ist eigentlich unmöglich, denn sobald dieses kleine Skript eine Dopplung entdeckt, wird die Variable $dopplung auf "ja" gesetzt. Nun trägt er die Daten in die SQL-Tabelle ein, OBWOHL das Skript zum Eintragen in die Datenbank in der ELSE-Schleife steht...


                  Hier nun der Quelltext der gesamten Seite...
                  Wie man sieht ist das Skript mit IF/ELSE eingebaut
                  PHP-Code:
                  session_start ();
                  if (!isset (
                  $_SESSION["zutritt"])) 
                     {
                  header ("Location: ../../admin/admin_index.php");}

                  //ARRAY mit einem LEEREN Array überschreiben, um keine Komplikationen mit EXPLODE-Function zu bekommen
                  $array_angebote2 = array();
                  $array_angebote $array_angebote2;

                  //Prüfen, ob Angebot schon existiert
                  mysql_connect("localhost","root","") or die ("Keine Verbindung möglich");
                  mysql_select_db("bow") or die ("Die Datenbank existiert nicht");  
                  $abfrage2 "SELECT angebot_name FROM angebote WHERE oberbegriff_ort='$_SESSION[ort]' AND [...]"
                  //Während Daten gelesen werden, ARRAY erweitern
                  while($ausgabe2 mysql_fetch_array($ergebnis2))
                       {
                  $array_angebote explode(",",$ausgabe2["angebot_name"]);}
                  //Im Array nach Angebot suchen
                  if   (in_array($HTTP_POST_VARS["angebot"], $array_angebote))
                       {
                  $dopplung="ja";}
                  else {
                  $dopplung="nein";}

                  //Wenn Angebot schon vorhanden, dann zurück
                  if   ($dopplung=="ja")
                       {
                  header ("Location: ../../admin/admin_start.php?dopplung=ja");}
                  else {
                       
                       
                  // Wenn Eingabe vom User "LEER", dann zurück zur Eingabe, andernfalls...
                       
                  if ($HTTP_POST_VARS["angebot"]!="")
                          { 

                          
                  // Verbindung mit Datenbank herstellen
                          
                  mysql_connect("localhost","root","") or die ("Keine Verbindung möglich");
                          
                  mysql_select_db("bow") or die ("Die Datenbank existiert nicht");

                  [...] 
                  usw. [...] 
                  Also das widerspricht doch der Logik, oder?
                  Die Variable $dopplung ist auf "ja" gesetzt, aber trotzdem geht das Programm in die ELSE-Schleife...?

                  Kommentar


                  • #10
                    Der Logik widerspricht ja schon dein Hantieren mit in_array - wieso fragst du nicht gleich die Datenbank explizit danach, ob Datensätze existieren, die den gesuchten Angebotsnamen enthalten ...?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Ich komme von einem Formular, in dem der User auswählt, welches Angebot er in die SQL-DB einfügen möchte...

                      Nun baue ich eine Verbindung zur SQL-DB auf, und hole mir alle Angebote, die darin verzeichnet sind in ein ARRAY.

                      Anschließend vergleiche ich mit "in_array", ob das Angebot, was eingetragen werden soll, schon existiert.

                      Wenn ein "ja" zurückkommt, dann soll es zurück zum START gehen.
                      Kommt ein "nein" zurück, dann darf er das ANgebot in die DB schreiben.

                      Ich sehe da eigentlich keinen Fehler in der Logik. Es ist vielleicht nicht der eleganteste Weg zum Ziel zu kommen, aber ich habe auch nie behauptet das ich Profi bin

                      Kommentar


                      • #12
                        Original geschrieben von Dampfi
                        Nun baue ich eine Verbindung zur SQL-DB auf, und hole mir alle Angebote, die darin verzeichnet sind in ein ARRAY.

                        Anschließend vergleiche ich mit "in_array", ob das Angebot, was eingetragen werden soll, schon existiert.
                        Warum holst du dir erst alle Angebote, um dann anschließend mit in_array zu ermitteln, ob darunter ein bestimmtes ist?

                        Warum fragst du nicht direkt die Datenbank danach, ob es Datensätze mit diesem einen bestimmten gibt?
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          ...weil ich immernoch keinen anderen Weg gefunden habe???

                          Wie muss der SELECT-Befehl aussehen, damit ich das gleiche bezwecke wie mit "in_array".
                          Außerdem brauche ich ja nicht den Wert jedes Feldes, sondern eine Variable $dopplung mit Inhalt true/false.
                          Gibt es eine Select-Abfrage, die mir einen True/False-Wert zurück gibt?
                          So tief bin ich dann in der Materie doch noch nicht drin

                          EDIT:
                          Trotzdem bleibt die Frage zu dem Quelltext in Post #8 offen...
                          Das Skript, was die Dopplung erkennt, funktioniert ja:

                          PHP-Code:
                          if   (in_array($HTTP_POST_VARS["angebot"], $array_angebote))
                               {
                          $dopplung="ja";}
                          else {
                          $dopplung="nein";}

                          if (
                          $dopplung=="ja")
                             {
                          header ("Location: ../../admin/admin_start.php");}
                          else { [...] 
                          Trotzdem wechselt er in die ELSE-Schleife, auch wenn $dopplung=="ja" - WARUM???
                          Wie gesagt: Ist nur ein Angebot unter dem Oberbegriff gespeichert, dann funktioniert es. Sind aber mehr als zwei Datensätze gespeichert, so wechselt er IMMER in die ELSE-Schleife...
                          Zuletzt geändert von Dampfi; 11.07.2006, 10:31.

                          Kommentar


                          • #14
                            Kann mir hier wirklich keiner weiterhelfen, wie ich eine Abfrage programmiere, um einen doppelten Eintrag in der Datenbank vorzubeugen???

                            EDIT:
                            So, nach 3 Tagen habe ich nun das Skript endlich fertig *freu*
                            Für alle die es interessiert, wie ich es nun doch geschafft habe, hier der fertige Code...

                            PHP-Code:
                            // Skript, um Angebots-Dopplungen zu vermeiden...
                            mysql_connect("localhost","root","") or die ("Keine Verbindung möglich");
                            mysql_select_db("bow") or die ("Die Datenbank existiert nicht");

                            $array_angebote = array();
                               
                            $abfrage2 "SELECT angebot_name FROM angebote WHERE oberbegriff_ort = '$_SESSION[ort]' AND [...]";
                            $ergebnis2 mysql_query($abfrage2); 
                            $counter "0";
                            while(
                            $ausgabe2 mysql_fetch_array($ergebnis2))
                                 {
                                 
                            $array_angebote[$counter]=$ausgabe2["angebot_name"];
                                 
                            $counter++;
                                 }

                            if   (
                            in_array($HTTP_POST_VARS["angebot"], $array_angebote))
                                 {
                            header ("Location: ../../admin/admin_start.php");}
                            else {
                            // Skript ENDE 
                            @ wahsaga... Danke für deine schnelle und GUTE Hilfe... Ich bin zwar um das "Selbstnachdenken" nicht drumherum gekommen, aber das ist ja auch gut so
                            Zuletzt geändert von Dampfi; 12.07.2006, 15:43.

                            Kommentar

                            Lädt...
                            X