2016-05-19 8 views
0

Ich verwende diesen Code, um alle Daten aus der Datenbank zu erhalten und zeigt sie in einer Tabelle automatisch erhöht:Wie Checkbox-ID in einer Tabelle

class Product 
{ 
private $conn; 
private $id; 
private $name; 
private $description; 
private $price; 
private $category_id; 
private $category_name; 
private $created; 

public function __construct($db) 
{ 
    $this->conn = $db; 
} 

public function readAll() 
{ 
    $stmt = $this->conn->prepare('SELECT name, description, price, CategoryID, created FROM products'); 
    $stmt->execute(); 
    echo "<table class=\"highlight responsive-table\"> 
     <thead> 
      <tr> 
       <th data-field=\"empty\"> </th> 
       <th data-field=\"name\">Name</th> 
       <th data-field=\"description\">Description</th> 
       <th data-field=\"price\">Price</th> 
       <th data-field=\"category\">Category</th> 
       <th data-field=\"action\">Action</th> 
      </tr> 
     </thead>"; 

    while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $n = $result['name']; 
     $d = $result['description']; 
     $p = $result['price']; 
     $ca = $result['CategoryID']; 
     $c = $result['created']; 

     echo "<tbody> 
       <tr> 
       <td style=\"width:10%;\"> 

          <input type=\"checkbox\" id=\"checkbox\" /> 
          <label for=\"checkbox\"></label> 

        </td> 



        <td style=\"width:15%;\">" .$n. "</td> 
        <td style=\"width:30%;\">" . $d. "</td> 
        <td style=\"width:10%;\">" ."$".$p. "</td> 
        <td style=\"width:15%;\">" . $ca. "</td> 
        <td style=\"width:20%;\"> 
         <a class=\"waves-effect waves-light btn\"><i class=\"material-icons\">mode_edit</i></a> 
         <a class=\"waves-effect waves-light btn\"><i class=\"material-icons\">delete</i></a> 
        </td>"; 

    } 

    echo "</tbody> </table>"; 


} 
} 

Es ist zu arbeiten, aber in der ersten Spalte möchte ich haben ein Kontrollkästchen, damit ich Datensätze markieren kann, die ich löschen/bearbeiten möchte, aber jetzt, egal welches Kontrollkästchen ich anklicke, wird nur das erste überprüft. Wie kann ich die Checkbox-ID automatisch erhöhen?

+1

Sie sollten die ID aus dem DB-Element auswählen. Die ID, die Sie zur Identifizierung für das Kontrollkästchen verwenden können. –

Antwort

2

ich empfehlen würde das id-Feld aus der Produkttabelle verwenden. Wenn es keinen hat, würde ich es hinzufügen.

Dann in Ihrem HTML um die Linie zu Checkbox ändern:

<input type=\"checkbox\" id=\"checkbox".$id."\" name=\"delete_product\" value=\"".$id".\" /> 
<label for=\"checkbox".$id."\"></label> 

I Namen und den Wert für den Fall hinzugefügt Sie das Formular einreichen, können Sie diese Daten in der POST, wenn Sie ein Formular am Ende mit.

+0

Ich habe Ihren Code verwendet und auch $ id = $ result ['id']; 'in while und" id "hinzugefügt:' $ stmt = $ this-> conn-> prepare ('SELECT ID, Name, Beschreibung , price, CategoryID, erstellt von FROM products '); 'aber es wird immer noch nicht aktiviert, nachdem ich auf checkbox geklickt habe – artur47wien

+0

Hast du überprüft, dass das html wie erwartet rendert? Ich vermute ein mögliches Javascript-Problem, wenn die Checkbox buchstäblich nicht überprüft wird. Können Sie genauer erklären, was Sie vielleicht meinen, es wird "immer noch nicht überprüft". – Kevin

+1

Ich habe es ein wenig geändert: ' 'und jetzt funktioniert es, danke :) – artur47wien

1

Versuchen Sie, eine Zählvariable wie folgt aus:

$i = 0; 
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $n = $result['name']; 
     $d = $result['description']; 
     $p = $result['price']; 
     $ca = $result['CategoryID']; 
     $c = $result['created']; 

     echo "<tbody> 
       <tr> 
       <td style=\"width:10%;\"> 

          <input type=\"checkbox\" id=\"checkbox".$i."\" /> 
          <label for=\"checkbox".$i."\"></label> 

        </td> 



        <td style=\"width:15%;\">" .$n. "</td> 
        <td style=\"width:30%;\">" . $d. "</td> 
        <td style=\"width:10%;\">" ."$".$p. "</td> 
        <td style=\"width:15%;\">" . $ca. "</td> 
        <td style=\"width:20%;\"> 
         <a class=\"waves-effect waves-light btn\"><i class=\"material-icons\">mode_edit</i></a> 
         <a class=\"waves-effect waves-light btn\"><i class=\"material-icons\">delete</i></a> 
        </td>"; 
     $i++; 
    } 
+0

Jetzt wird keiner von ihnen überprüft – artur47wien

+0

Natürlich habe ich vergessen, das gleiche Prinzip für das Etikett zu verwenden. Überprüfen Sie meine aktualisierte Antwort. Aber um ehrlich zu sein, mag ich Nikolai Engels Ansatz noch mehr. Wenn möglich, sollten Sie seinen Vorschlag versuchen. –

2

eine Variable $ i verwenden, initialisieren Sie es mit 1 vor while-Schleife und innerhalb der Schleife, erhöhen sie
ersetzen Ihre Checkbox Code wie

     <input type=\"checkbox\" id=\"checkbox_$i\" /> 
         <label for=\"checkbox_$i\"></label> 

$ i ++;

1

Fügen Sie Ihrer SQL-Abfrage eine ID-Spalte hinzu. Ändern Sie dann Ihre erste Spalte in der Tabelle zu

<input type=\"checkbox\" id=\"checkbox\" . $result['id'] . " name=\"id[" . $result['id'] . "]\"/> 
<label for=\"checkbox" . $result['id'] . "\"></label> 

In-Controller haben Sie Zugriff auf ausgewählte ids haben mit zum Beispiel $ _POST [ ‚id‘]

+0

Inkorrekte Entweichung passiert hier, was bei dieser Art von Anführungszeichen wahrscheinlich passieren wird. Ich könnte in die Verwendung von Single-Quote-Wrapper schauen, so dass Sie doppelte Anführungszeichen in HTML verwenden können. – Kevin

Verwandte Themen