Optionfeld mit mehrfachauswahl

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

  • Optionfeld mit mehrfachauswahl

    Hey,

    ich habe ein Optionfeld mit Mehrfachauswahl. Das übergeben ist nicht das Problem, aber wie mach ich die Abfrage wenn eine Mehrfachauswahl gemacht würde.

    Momentan habe ich folgenden Code auf meiner Ausgabeseite:
    PHP-Code:
    <tr>
    <td>
    Otter species
    </td>
    <td><?php
    $res 
    mysql_query("SELECT * FROM osg_species WHERE
    id=
    $species");
    while(
    $row mysql_fetch_array($res))
    {
    echo 
    "$row[species1] <i>($row[species2])</i>";
    }
    ?>
    </td>
    </tr>
    ich bekomme von der Auswahlseite folgende Daten geliefert per URL:
    Code:
    &species=1&species=3
    Wie muss ich jetzt die Ausgabeseite anpassen das er mir die Mehrfachauswahl auch aus der Datenbank holt?
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    &species=1&species=3

    Damit wird AFAIK nur 3 übergeben ... 1 kommt nicht an.
    Übergib die Werte als Array:

    $res = mysql_query("SELECT * FROM osg_species WHERE
    id IN('".implode("', '",$species)."')");

    EDIT: HAB WAS KORRIGIERT...
    Zuletzt geändert von Troublegum; 08.07.2002, 16:04.
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Soweit so gut.

      Habe auf der Auswahlseite jetzt den Namen des Optionsfeld auf species[] gesetzt.

      Doch jetzt kommt diese Fehlermeldung, nach dem ich auf der Ausgabeseite dein Code eingesetzt habe:

      Warning: Bad arguments to implode() in C:\wampp2036\htdocs\osg\opd\new_project.see.php on line 17

      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wampp2036\htdocs\osg\opd\new_project.see.php on line 18
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        if ($species)
        $res = mysql_query("SELECT * FROM osg_species WHERE
        id IN('".implode("', '",$species)."')");
        else
        $res = mysql_query("select * from osg_species where 0");
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Jetzt sieht es so aus:
          PHP-Code:
          if ($species)
          {
          $res mysql_query("SELECT * FROM osg_species WHERE
          id = IN('"
          .implode("', '",$species)."')"); //Zeile 19
          }
          else
          {
          $res mysql_query("select * from osg_species where id=$species");
          while(
          $row mysql_fetch_array($res))
          {
          echo 
          "$row[species1] <i>($row[species2])</i>";
          }

          Und bekomme immer noch folgende Fehlermeldung:
          Warning: Bad arguments to implode() in C:\wampp2036\htdocs\osg\opd\new_project.see.php on line 19
          *winks*
          Gilbert
          ------------------------------------------------
          Hilfe für eine Vielzahl von Problemen!!!
          http://www.1st-rootserver.de/

          Kommentar


          • #6
            Wenn $species keinen Wert hat, wird deine zweite Query zu
            select * from osg_species where id=
            Dass das nicht funzt, sollte klar sein.

            Und aus der ersten Query muss das '=' entfernt werden,
            sonst gibt das auch einen Syntax Error von mySQL.

            so, zu den bad arguments:
            Du scheinst $species immer noch nicht als Array zu übergeben,
            sonst würde das tun. Aber so kannst Du alle Fälle abhaken:
            PHP-Code:
            $where = (is_array($species)
              ? 
            "id IN('".implode("', '",$species)."')");
              : (
            $species
                
            "id = '$species'"
                
            '0'
              
            )
            );

            if (
            $res mysql_query("select * from osg_species where $where"))
              while(
            $row mysql_fetch_assoc($res))
                echo 
            "$row[species1] <i>($row[species2])</i><br>";
            else
              echo 
            "Fehler in Query <b>$query</b>: '. mysql_error(); 
            Wenn du ohne Angabe von $species alle statt gar keinem
            ausgeben möchtest, dann mach aus der '0' da oben eine '1'.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Danke erstmal Titus das du dir die zeit nimmst.

              Auf der Auswahlseite habe ich das so zu stehen:
              PHP-Code:
              <select size="5" name="species[]" multiple
              Und auf der Ausgabeseite habe ich dein Code eingefügt.

              Und es kommt diese Fehlermeldung, mit der ich nichts anfangen kann.
              Parse error: parse error, unexpected ')' in C:\wampp2036\htdocs\osg\opd\new_project.see.php on line 18

              PHP-Code:
              <?php
              $where 
              = (is_array($species))
              "id = IN('".implode("', '",$species)."')");//Zeile 18
              : ($species
              "id = '$species'"
              '0'
              )
              );

              if (
              $res mysql_query("select * from osg_species where $where"))
                while(
              $row mysql_fetch_assoc($res))
                  echo 
              "$row[species1] <i>($row[species2])</i>";
              else
                echo 
              "Fehler in Query <b>$query</b>: "mysql_error();        ?>
              in der URL wird das jetzt Übergeben:
              Code:
              species=Array
              Zuletzt geändert von Wotan; 08.07.2002, 18:05.
              *winks*
              Gilbert
              ------------------------------------------------
              Hilfe für eine Vielzahl von Problemen!!!
              http://www.1st-rootserver.de/

              Kommentar


              • #8
                Wie findet man Parse-Fehler?

                Parse error: parse error, unexpected ')'
                Lies mal die Fehlermeldung genau: "unerwartete )" steht da.
                Wie findet man nun so einen Fehler?
                ? "id = IN('".implode("', '",$species)."')");//Zeile 18

                Immerhin gehen in der Zeile ja zwei bzw. drei Klammern zu.

                einfach ein paar Zeilenumbrüche einfügen:
                18 ? "id = IN('"
                19 . implode("', '",$species)
                20 . "')"
                21 );


                Jetzt taucht der Parse Error unexpected ')' in Zeile 21 auf.

                also die Klammer löschen
                18 ? "id = IN('"
                19 . implode("', '",$species)
                20 . "')"
                21 ;

                und nochmal probiert: Parse Error unexpected ';' in line 21
                also das Semikolon auch noch gelöscht, und es funktioniert.

                dann die vier (jetzt noch drei) Zeilen wieder zusammenfassen,
                damit es wieder schön aussieht und fertig.
                ? "id = IN('". implode("', '",$species). "')"//Zeile 18
                Zuletzt geändert von Titus; 08.07.2002, 19:15.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  echo 'Array'

                  Original geschrieben von Wotan
                  in der URL wird das jetzt Übergeben:
                  Code:
                  species=Array
                  In welcher URL? Ist das erste Mal, dass in diesem Thema
                  von Parameter weiterreichen die Rede ist ...
                  Aber dein Problem wird dadurch verursacht,
                  dass du den Parameter falsch weiterreichst.

                  Wenn du ein Array einfach mit echo ausgibst,
                  dann bekommst du 'Array' geliefert.
                  Nimm statt dessen
                  echo 'species[]='. implode('&species[]=', $species);
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar


                  • #10
                    Gut habe ich mal ausprobiert und bin dann auch recht gut auf den Fehler gekommen.

                    Jetzt gibt es zwar keine fehlermeldung mehr, aber es wird auch sonst keine Ausgabe gemacht.

                    Der Code
                    hat jetzt folgendes Aussehen:
                    PHP-Code:
                    <?php echo"$species<br>"
                    $where = (is_array($species))
                    "id = IN('".implode("', '",$species )."')"
                    : ($species)
                    "id = '$species'"
                    '0'
                    ;

                    if (
                    $res mysql_query("select * from osg_species where $where"))
                    while(
                    $row mysql_fetch_assoc($res))
                    echo 
                    "$row[species1] <i>($row[species2])</i>";
                    else
                    echo 
                    "Fehler in Query <b>$query</b>: "mysql_error();
                    ?>
                    Das Echo in der ersten Zeile gibt nur Array aus, sonst nichts.
                    Was ist jetzt noch falsch?
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      Da haben sich die Posts überschnitten.

                      Ich pack dir mal die Dateien als Anhang bei.

                      Die Datei new_project.php ist die Startdatei, Sie übergibt die Vars an die new_project.what.php um zu entscheiden was gemacht werden soll. Jenachdem wo es weitergeht wird wird per header eine neue Seite geladen. mit den Vars in der URL. Die Datei new_project.see.php ist die Ausgabeseite.
                      Angehängte Dateien
                      Zuletzt geändert von Wotan; 08.07.2002, 19:27.
                      *winks*
                      Gilbert
                      ------------------------------------------------
                      Hilfe für eine Vielzahl von Problemen!!!
                      http://www.1st-rootserver.de/

                      Kommentar


                      • #12
                        Probier als Übertragungsmethode mal POST aus, du verwendest gerade GET, oder ? Probier mal POST !
                        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                        © Harald Schmidt

                        Kommentar


                        • #13
                          Ich benutze POST und danach header("Location...
                          *winks*
                          Gilbert
                          ------------------------------------------------
                          Hilfe für eine Vielzahl von Problemen!!!
                          http://www.1st-rootserver.de/

                          Kommentar


                          • #14
                            Für header('Location: ...') gilt das gleiche wie für echo;
                            nur statt der Kommata musst du Punkte zur String-Verknüpfung benutzen.
                            Die funktionieren übrigens auch beim echo:

                            header('Location: new_project.see.php?species[]='
                            . implode('&species[]=', $species));
                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar


                            • #15
                              Bring nach oben!

                              Jetzt gibt er mir, auf der Ausgabeseite nur den letzten Datensatz aus. Nicht aber alle. Das heisst, das das Script die weiteren Abfragen nicht macht. Wie kann ich jetzt, mit dem Script, die weiteren Auswahlen ausgeben?

                              Per URL kommt jetzt das auf die Ausgabeseite:

                              Code:
                              species=1&species=3&species=5
                              Wie bekomme ich es jetzt hin, das er mir alle Datensätze aus der Datenbank holt?
                              Zuletzt geändert von Wotan; 09.07.2002, 11:40.
                              *winks*
                              Gilbert
                              ------------------------------------------------
                              Hilfe für eine Vielzahl von Problemen!!!
                              http://www.1st-rootserver.de/

                              Kommentar

                              Lädt...
                              X