Andreas Cloos: select nur für bestimmte Spalten?

Moin,

ich arbeite mich gerade in PHP ein... bin also was das angeht ziemlicher (totaler?) Newbie. Das nur vorweg.

Ich will einen select machen, der sich aber auf bestimmte Spalteb bezieht. Das sieht bis jetzt so aus: 1.) abfragen.htm (nur der formbereich):

<form action="abfragen.php" method="post"> <TABLE WIDTH="400" BORDER="0" bgcolor="#666666" CELLPADDING="5" CELLSPACING="1">             <TR><TD colspan="2" align="left" CLASS="TABHEADER" BGCOLOR="#88ca5d">&#160;&#160;Abfragen</TD></TR>             <TR><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap>Attribut</TD>                 <TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><select name="attribut" size="1">                                                                         <option value="id">ID                                                                         <option value="name">Name                                                                         <option value="vorname">Vorname                                                                         <option value="geburtsdatum">Geburtsdatum                                                                         <option value="strasse">Strasse                                                                         <option value="plz">PLZ                                                                         <option value="ort">Ort                                                                         <option value="land">Land                                                                         <option value="telefon">Telefon                                                                         <option value="email">eMail                                                                         <option value="eintrittsdatum">Eintrittsdatum                                                                         <option value="mitgliedskz">Mitgliedskennzeichen                                                                         <option value="kontonr">Kontonummer                                                                         <option value="blz">BLZ                                                                         <option value="bank">Bank                                                                         <option value="orgkz">Geschlecht/Orgkz.                                                                         </select></TD></tr>             <TR><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap>Suchanfrage</TD>                 <TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="text" name="suchanfrage" size="10" maxlength="20" value="%"></TD></tr>             <TR><TD rowspan="16" align="left" valign="top" class="KLEIN" BGCOLOR="#F7F7F7" nowrap>was anzeigen?</TD>                 <TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="id"> ID</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="name"> Name</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="vorname"> Vorname</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="geburtsdatum"> Geburtsdatum             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="strasse"> Strasse</tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="plz"> PLZ</tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="ort"> OrtD</tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="land"> Land</tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="telefon"> Telefon</tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="email"> eMail</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="eintrittsdatum"> Eintrittsdatum</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="mitgliedskz"> Mitgliedskennzeichen</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="kontonr"> Kontonr.</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="blz"> BLZ</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="bank"> Bank</TD></tr>             <tr><TD align="left" class="KLEIN" BGCOLOR="#F7F7F7" nowrap><input type="checkbox" name="field" value="orgkz"> Geschlecht/Orgkz.</TD></tr>             </TABLE> <br><br><input type="submit" value="Abfragen"> <input type="reset" value="Zurücksetzen"> </form>

2.) abfragen.php (nur der php-bereich):

<?php $link=mysql_connect(); mysql_select_db("vvwv001");  $anfrage="select $field from stammdaten WHERE $attribut LIKE '$suchanfrage' ORDER BY id;";  $ergebnis=mysql_query($anfrage) or die  ("<p class='TEXT'><b>Ergebnis:</b><br>Fehlermeldung = ".mysql_error(). "</p>");   echo mysql_num_rows($ergebnis)." Datensätze<p> ";   echo "<table width='100%' border='0'><tr><td align='center'><table border='0' bgcolor='#666666' cellpadding='5' cellspacing='1'>";   for ($i=0;$i<mysql_num_fields($ergebnis);$i++) {echo   "<td align='left' BGCOLOR='#88ca5d' class='TABHEADER'>".mysql_field_name($ergebnis,$i)."</td>";};   while ($zeile=mysql_fetch_row($ergebnis))    { echo "<tr>";       for ($i=0;$i<mysql_num_fields($ergebnis);$i++) {echo       "<td align='left' class='KLEIN' bgcolor='#F7F7F7'>".$zeile[$i]."</td>";};      echo "</tr>"; };    echo "</table></td></tr></table>";   mysql_free_result($ergebnis); mysql_close($link); ?>

(Sieht ganz schön fies aus, aber das "schöne" programmieren kommt später...)

Das funzt auch so einigermaßen. Leider wird in der Tabelle nur die letzte Checkbox verarbeitet. Was mu ich ändern, damit alle Checkboxen in die select-Abfrage übernommen werden? Ich erwarte keine fertige Lösung (wäre aber auch nicht schlimm :-) ), aber ein für mich wirklich hilfreicher Tipp wäre etwas ausführlicher als "lies mal da und da nach"...

Danke schonmal!

Greetz, Andreas

PS. Wenn das zu lang ist für eine Nachricht, dann poste ich das, was untergeht gleich hintendran...

  1. Hi Andreas,

    Wenn Du alle Checkboxen gleich benennst, wirds *ein wenig* schwierig. Also erstmal: bennene sie z.B. mit fortlaufenden Nummern, also "field0", "field1", usw. Am besten Du machst Dir in einer include-Datei eine Definition a'la $fields["stammdaten"]=array("id", "name", "vorname",..usw...), und erzeugst die checkboxen dann mit php:
    <?
    for($i=0;$i<sizeof($fields["stammdaten"];$i++)
    {
       echo "<input type="checkbox" name="field"".$i." value="".$fields["stammdaten"][$i]."">
    }
    ?>

    Dann gehts ungefähr folgendermaßen (ohne connect usw.):

    <?

    $numcheckboxes=sizeof($fields["stammdaten"]; //die anzahl der checkboxen
    for($i=0;$i<$numcheckboxes;$i++)
    {
       $checkboxname="field".$i;  //der name der der checkbox, die jetzt verarbeitet wird
       $checkboxvalue=$$checkboxname;  //das value der checkbox
       if($checkboxvalue!="")
       {
          $allfields[]=$checkboxvalue;  //value an den array allfields anhaengen
       }
    }
    //und jetzt den select bauen
    for($i=0;$i<sizeof($allfields);$i++)
    {
       $fieldstoselect.=$allfields[$i].", ";
    }
    //letzes komma wieder entfernen
    $fieldstoselect=substr($fieldstoselect, 0, strlen($fieldstoselect)-2);
    $querystring="select $fieldstoselect from stammdaten WHERE $attribut LIKE '$suchanfrage' ORDER BY id";
    ?>

    Viele Grüße
    Stephan

    1. ... und natürlich habe ich ein paar ")" und ";" vergessen... aber das ist ja das SELF-Forum... ;-)

      1. Moin,
        superdanke! Auch ohne es schon ausprobiert zu haben. Ich guck mal, wie weit ich damit komme, aber wird schon schief gehen... Und die ; und ) und so kriegt man als mittlerweiler semiprofessioneller Debugger ja in den Griff!
        Greetz,
        Andreas

  2. <input type="checkbox" name="field" value="id">
    »»<input type="checkbox" name="field" value="name">

    Hallo,
    (Hi Stephan auch wieder mal hier unterwegs *gg*)

    Die lösung von Stephan ist eine möglichkeit, aber ich denke es geht einfacher:

    bennene die checkox als name="field[]"

    normalerweisse solltest php seitig dann ein array bekommen welches nur elemente enthält welche durch den user "gechecked" wurden.

    print_r($field);

    // sollte sowas ähnliches wie:
    // Array
    // (
    //     [0] => id
    //     [1] => name
    // )
    //
    // ausgeben

    und durch das kannst ja durchloopen und dir den select from string bauen..

    $select="";
    for($i=0;$i<count($field);$i++){
      $select.=$field[$i].",";
    }

    // den letzen komma sollte man noch entfernen :)

    mysql_query("SELECT $select FROM ....);

    lg
    Ludwig