wettmasta: Checkboxen dynamisch generieren

Moin moin,
ich bin noch etwas unerfahren in der PHP programmierung und habe folgendes Problem.
Ich möchte mehrere daten aus einer datenbank löschen.
Dafür lade ich mir die daten in eine tabelle. Die letzte Spalte der tabelle soll checkboxen enthalten. Diese Checkboxen möchte ich gerne dynamisch generieren und mit der ID des datensatzes verknüpfen. Nachher möchte ich prüfen, welche checkboxen markiert sind und an dem namen erkennen welchen datensatz ich löschen muß.
Habe schon verschieden Codes ausprobiert aber nichts führte zum erfolg.

Mfg
wettmasta

  1. Hi Wettmasta,

    must deine Liste erstmal so aufbauen:

    $this_id = mysql_result($res, $i, "id");
    $deletebox="<input name='delete_$this_id' type='checkbox' value='1'>";

    Dann nach submit musst du entsprechend deine Table durchgehen und mit doppelten Variablen checken, ob die entsprechende Deletebox markiet wurde:

    if($update) {
     $sql = "SELECT id FROM table";
     $res = mysql_query($sql);
     $anzahl = mysql_num_rows($res);

    for($i = 0; $i < $anz; $i++)
       {
        $this_id = mysql_result($res,$i,"id");

    $temp_delete="delete_".$this_id;
        $delete=$$temp_delete;
        if($delete==1){
           $sql="DELETE FROM table WHERE id=$this_id LIMIT 1;";
                  mysql_query($sql);
        } #end if
      } #end for
    } #end update

    WIchtig ist das doppelte $$ bei der Variable.
    Hab das script schon 100x benutzt und funktioniert super...

    Schöne Grüße,
    Tobi

    1. So kompliziert wollte ich das eigentlich nicht machen:)
      Habe eventuell nur probleme mit der syntax.

      So habe ich das bis jetzt versucht.

      Füllen der Tabelle:

      <?php
      while ($adr = mysql_fetch_array($adressen))
      {
      ?>
          <tr bgcolor="#C000B5">
            <td><?=$adr['Name']?></td>
            <td><?=$adr['Vorname']?></td>
            <td><?=$adr['Adresse']?></td>
            <td><?=$adr['Ort']?></td>
            <td><?=$adr['Tel']?></td>
         <td><input type="checkbox" name=<?=$adr['ID']?></input></td>
          </tr>
      <?php
      }
      ?>

      Abfragen ob die Checkbox markiert ist:

      <?php
        $abfrage2 = "Select max(id) from test";
        $ergebnis =  mysql_query($abfrage2);
        $max = mysql_fetch_array($ergebnis);

      if (isset($_REQUEST['Loeschen']))
          {
           for ($i=0; $i<$max[0]; $i++)
       {
                if  (isset($_REQUEST[$i])) //$i sollte der Name der                             Checkbox sein und damit gleich die ID des Datensatzes
                    {
                        //Datensatz löschen

      }

      Mfg
      wettmasta

      1. Naja, solange dein Code funktioniert ist ja gut...
        Was ich zeigen wollte war:

        * In HTML wird diwe dynamische Deletebox mit dem Namen z.B: delete_1 oder delete_2 ausgegeben.
        * das ist notwendig, um alles aus einem Formular heraus zu übergeben (eben als unique ID der deletebox)

        Und hinterher musst du halt deine komplette Table durchgehen, um abzugleichen, ob der entsprechende Datensatz gelöscht werden soll.

        Und das geht halt am besten dynamisch, wenn du mit der doppelte $$variable arbeitest, weil du nur so dynamisch den namen delete_$id zusammenbauen kannst.

        Ist eigentlich einfach, funktioniert auch toll - und dumusst meinen code nur kpieren (aber vorher das formular oben zusammenbauen).

        das istz alles!
        Grüße, Tobi

        1. Das Problem ist ja das mein Code nicht funktioniert :(
          aber so in der Art möchte ich es gerne machen.... Was mache ich denn Falsch?

          Mfg
          wettmasta

          1. Naja, wie gesagt:

            Wenn du mehrere werte in einer Liste haben willst (z.B: wie bei Email_Providern, wo du auch auswählen kannst welche gelöscht werden sollen), dann solltest du deinen code komplett wegwerfen und den geposteten benutzen.

            denn es geht nicht anders.

            schau dir mal deinen HTML Quelltext an, das sollte einige fragen beantworten.
            mein geposteter Code funktioniert einwandfrei - probier ihn mal aus!

            Grüße,
            Tobi

            1. Hab es hinbekommen und es funktioniert!

              Füllen der Tabelle:

              <?php
              while ($adr = mysql_fetch_array($adressen))
              {

              ?>
                  <tr bgcolor="#C000B5">
                    <td><?=$adr['Name']?></td>
                    <td><?=$adr['Vorname']?></td>
                    <td><?=$adr['Adresse']?></td>
                    <td><?=$adr['Ort']?></td>
                    <td><?=$adr['Tel']?></td>
                 <td><input type="checkbox" name="<?=$adr['ID']?>"</input></td>
                  </tr>
              <?php

              }

              ?>

              Löschen der ausgewählten Datensätze:

              <?php
                $abfrage2 = "Select max(id) from test";
                $ergebnis =  mysql_query($abfrage2);
                $max = mysql_fetch_array($ergebnis);
                if (isset($_REQUEST['Loeschen']))
                  {
                for ($i=0; $i<$max[0]; $i++)
                {
                    if  (isset($_REQUEST[$i]))
                    {
                      $sql = "DELETE FROM test where ID = $i";
                      $delete = mysql_query($sql);
                    }
                     echo "<meta http-equiv="refresh" content="0; URL=index.php?id=0" />";

              }
              }
              ?>

      2. echo $begrüßung;

        Habe eventuell nur probleme mit der syntax.

        Könntest du die Probleme bitte genauer beschreiben. Hast du dir den HTML-Code angesehen, der daraus generiert wird? Wie sehen die Formulardaten aus, die der Browser sendet? print_r($_REQUEST) gibt alles aus, was empfangen wurde (Ein <pre> vorher erhöht die Übersichtlichkeit). Entspricht das so deinen Vorstellungen? Ebenso kommt man Fehlern auf die Spur, wenn man zum Entwickeln von PHP-Scripten das error_reporting auf E_ALL stellt. Damit werden Meldungen beim Zugriff auf nicht vorhandene Variablen nicht mehr unterdrückt.

        <td><input type="checkbox" name=<?=$adr['ID']?></input></td>

        Die ID ist doch sicherlich nur ein Zahlenwert. Die Inhalte der HTML-Attribute name und id müssen eigentlich mit einem Buchstaben beginnen.

        echo "$verabschiedung $name";