select?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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...

    Comment


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

      Comment


      • #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 :-)
        Last edited by wahsaga; 05-03-2004, 12:20.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Comment


        • #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

          Comment


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

            Comment


            • #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

              Comment


              • #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

                Comment


                • #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
                  Last edited by nakg; 05-03-2004, 13:41.

                  Comment


                  • #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

                    Comment


                    • #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

                      Comment


                      • #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

                        Comment


                        • #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

                          Comment


                          • #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

                            Comment


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

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

                              Kissolino.com

                              Comment

                              Working...
                              X