select?

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

  • select?

    Hi leute hoffe irgendwer kann mir helfen!!!
    habe eine gruppe von checkboxen
    <input type="checkbox" name="checkbox[]" value="$VS">
    <input type="checkbox" name="checkbox[]" value="$HS">
    <input type="checkbox" name="checkbox[]" value="PTS">
    usw....
    (das $ steht nicht für eine var)
    in meiner mysql db sieht die tabelle folgendermasen aus:
    skz art
    666666 $HS
    111111 $VS $HS
    222222 $HS $VS
    333333 BRS MUS
    444444 PTS $VS
    555555 $VS

    jetzt soll mittels checkboxen eine auswahl getroffen werden (auch mehrfachauswahl)
    d.H es ist zb die checkbox mit der value $VS und die Checkbox mit der value $HS ausgewählt
    --> jetzt soll ein select alle skz aus der db auslesen wo im feld art $VS und $HS enthalten sind ( also für $VS $HS sind das 666666,111111,222222,444444,555555 )
    wenn jetzt aber nur die checkbox mit der value $VS ausgewählt ist soll alle skz wo $VS in art enthalten sin ausgelesen werden (also
    111111,222222,444444,555555)

    hab schon stunden an der problemlösung gebastelt aber es funkt einfach nicht
    hoffe es kann mir wer helfen und sagen wie man so ein prob löst

  • #2
    PHP-Code:
    $sql="SELECT * 
    FROM TABELLE
    WHERE art IN ('"
    .implode("', '"$_POST['checkbox'])."')"
    probier das mal

    das setzt allerdings voraus, dass du deine datenbankstruktur korrigierst

    aus 44444 $HS $VS musst du die zwei datensätze 44444 $HS und 44444 $VS machen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      genau das ist mein problem kann die datenbankstruktur nicht ändern
      da laufen andere prog die genau auf diese struk zugreifen

      Kommentar


      • #4
        Original geschrieben von nakg
        genau das ist mein problem kann die datenbankstruktur nicht ändern
        da laufen andere prog die genau auf diese struk zugreifen
        ist denn wenigstens die "reihenfolge" fest vorgegeben, in denen $VS, $HS, MUS etc. im feld art vorzufinden sind, wenn sie denn auftauchen?

        dann sähe der vorschlag von happi doch gar nicht mal so schlecht aus - statt "WHERE art IN" prüfst du dann halt auf "WHERE art =", und setzt dir die checkbox-values nicht mit IN(...) und durch kommata getrennt, sondern als einfachen textstring und durch space getrennt zusammen.

        PHP-Code:
        $art implode(" "$_POST['checkbox']));

        $sql "... WHERE art = '".$art."'"
        musst nur darauf achten, dass auch die checkboxen in deinem formular in dieser "richtigen" reihenfolge sind.


        und vergiss nicht, den typen, der das datenmodell verbrochen hat, zur sau zu machen :-)
        Zuletzt geändert von wahsaga; 05.03.2004, 13:20.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          like scheint mir hier sinniger ... also
          PHP-Code:
          foreach($_POST['checkbox'] as $v)
          {
              
          $out[] = "art LIKE '%"$v"%'";
          }
          $sql ".... WHERE "implode(" AND "$out) ." ..."
          Kissolino.com

          Kommentar


          • #6
            aber trotzdem mit OR or?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              danke für die antwort wurzel
              blicke bei deinem code jetzt gar nicht mehr durch
              währe echt super wenn du dir noch ein wenig zeit nehmen könntest und mir das erklärst

              Kommentar


              • #8
                Re: select?

                Original geschrieben von nakg
                --> jetzt soll ein select alle skz aus der db auslesen wo im feld art $VS und $HS enthalten sind ( also für $VS $HS sind das 666666,111111,222222,444444,555555 )
                @happy
                ... ich würds als AND interpretieren ... kann man ja flexibilisieren


                @nagk
                PHP-Code:
                // für jedes element im array $_POST['checkbox'] ....
                foreach($_POST['checkbox'] as $v)
                {
                    
                // ... füllen wir ein neues array ($out) mit dem string ...
                    
                $out[] = "art LIKE '%"$v"%'";
                }
                // implode fügt nun die strings zusammen mit einem AND dazwischen
                $sql ".... WHERE "implode(" AND "$out) ." ..."
                probier einfach mehrere markierungen aus und lass dir $sql mal mit echo ausgeben, dann wirds klarer
                Kissolino.com

                Kommentar


                • #9
                  d.h.:


                  meine sql lautet dann so ?


                  $result = mysql_query("Select skz from schulen Where ". implode("
                  AND ", $out) ." ...";

                  ..... sorry jetzt geht gar nichts mehr

                  probier einfach mehrere markierungen aus und lass dir $sql mal mit echo ausgeben, dann wirds klarer ....... ??????????? verstehe nicht was du meinst
                  Zuletzt geändert von nakg; 05.03.2004, 14:41.

                  Kommentar


                  • #10
                    das ist ja auch schwachfug ....
                    PHP-Code:
                    $sql "Select skz from schulen Where "implode(" AND "$out) ."";
                    echo 
                    $sql;
                    // ^^ du sollst gucken, was dabei rauskommt 
                    dann kannst du dir auch gleich angewöhnen, or die(mysql_error()) zu benutzen
                    PHP-Code:
                    $result mysql_query($sql) or die(mysql_error()); 
                    Kissolino.com

                    Kommentar


                    • #11
                      hab hier jetzt mal meinen gesamten code + fehlermeldung !

                      <?php
                      require("connect.inc.php");
                      ?>
                      <html>
                      <head>
                      <title>Unbenanntes Dokument</title>
                      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                      </head>
                      <body>
                      <?php
                      foreach($_POST['checkbox']as $v){

                      $out[]="art Like '%".$v."%'";
                      }

                      $sql = "Select skz From schulen Where ".implode(" AND ", $out)."";
                      echo $sql;

                      $result = mysql_query($sql)or die (mysql_error());

                      echo "<form method=post action=mail.php>";
                      echo("<table BORDER=1>");
                      echo("<tr>");
                      echo("<td BGCOLOR=\"#00FF33\"><B>mailadressen</B></td>");
                      echo("<td BGCOLOR=\"#FF0000\"><B>auswahl</B></td>");
                      echo("<td BGCOLOR=\"#FFFF00\"><B>skz</B></td>");
                      echo("</tr>");

                      while ($ds = mysql_fetch_array($result)) {
                      $skz = $ds['skz'];
                      echo $skz."<br>";
                      echo("<tr>");
                      //echo "<TD>" . $mail ."</TD>";
                      echo("<td> <input type=checkbox name=box[] value=$skz checked > </td>");
                      echo "<TD>" . $skz ."</TD>";
                      echo("</tr>");
                      }
                      echo("</table>");



                      ?>

                      Betreff:<br>
                      <input type="text" name="betreff" value="<?php echo $_POST['betreff']; ?>" readonly="readonly"><br>

                      Text:<br>
                      <textarea name="text" cols="100" rows="20" readonly="readonly" ><?PHP echo $text;?></textarea>
                      <input type="submit" name="Submit" value="Abschicken">
                      </form>
                      </body>
                      </html>


                      ergebnis wenn checkbox $VS : es werden alle skz ausgegeben wo $VS dabei steht
                      aber wenn 2 oder mehr checkboxen gesetzt sin wird nicht ausgegeben

                      wenn garkeine checkbox gesetzt ist folgende fehlermeldungen:
                      Warning: Invalid argument supplied for foreach() in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 34

                      Warning: implode() [function.implode]: Bad arguments. in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 39
                      You have an error in your SQL syntax near '' at line 1

                      Kommentar


                      • #12
                        Original geschrieben von nakg
                        ergebnis wenn checkbox $VS : es werden alle skz ausgegeben wo $VS dabei steht
                        aber wenn 2 oder mehr checkboxen gesetzt sin wird nicht ausgegeben
                        kann es sein, dass es keine passenden datensätze für die entsprechende query gibt?

                        wenn garkeine checkbox gesetzt ist folgende fehlermeldungen:
                        Warning: Invalid argument supplied for foreach() in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 34
                        das musst du abfangen ... zb
                        PHP-Code:
                        if(!isset($_POST['checkbox']) || empty($_POST['checkbox']))
                        {
                            die(
                        'nix selektiert');
                        }
                        else

                         .....

                        btw: bitte formatier deinen code mit den php-tags um
                        Kissolino.com

                        Kommentar


                        • #13
                          datensätze für query sind da

                          hab mal händisch ein statement geschrieben nur zu testen das lautet so
                          PHP-Code:
                          $sql "SELECT skz FROM schulen Where art  LIKE '%\$VS%' AND art  LIKE '%\HS%' "
                          da funkt das is halt ohne checkboxen denke das hängt mit dem \ zusammen kann das sein

                          wenn ich mir
                          PHP-Code:
                          echo $sql
                          ausgeben lasse lautet das ergebnis für $VS und $HS
                          Select skz From schulen Where art Like '%$VS%' AND art Like '%$HS%'
                          also schon fast richtig der string

                          das mit dem fehlermeldungen abfangen funkt 1 a

                          Kommentar


                          • #14
                            vielen vielen dank für die hilfe habs jetzt mi or statt and versucht und fürs erste funkt das so halbwegs

                            ja ja aller anfang ist schwer ... hoff bekomme bei weitern fragen auch wieder so schnell hilfe ...
                            danke

                            Kommentar


                            • #15
                              probiers mal damit:
                              PHP-Code:
                              foreach($_POST['checkbox']as $v){

                              $out[]="art Like '%" str_replace('$''\$'$v) . "%'";

                              Kissolino.com

                              Kommentar

                              Lädt...
                              X