2016-09-20 4 views
1

Ich entwerfe ein Schulportal. Ich möchte eine Situation, in der der Lehrer ein bestimmtes Thema aus der Liste der Fächer in meiner Tabelle auswählen und Noten von Schülern eingeben kann.Wie wählt man ein bestimmtes Tabellenfeld dynamisch aus?

Anschließend werden die Noten der einzelnen Schüler der ausgewählten Fächer in die Datenbank eingegeben.

Unten ist meine Tabellenstruktur.

my table structure

Die Form wird durch while-Schleife erzeugt wird. Die Idee ist, die Punktzahlen der Schüler auf einmal zu erhalten.

Form for the scores

Unten ist mein Code. Bitte, was mache ich falsch?

+0

Ihr Code ist anfällig für SQL-Injection-Angriffe. Der versteckte Eingang dient keinem Zweck.Was machst du falsch? gute Frage ... Sie haben versäumt zu erklären, was nicht funktioniert ... – NDM

+0

Ich bin ziemlich besorgt über '$ subject' ist eine Spalte in der Datenbank ... – NDM

+0

Sie müssen Ihr genaues Problem beschreiben. Aber '$ sub' wäre ein ganzzahliger Wert, der nicht die beabsichtigten Ergebnisse zu sein scheint. Benutze '" SELECT * FROM ca WHERE class = '$ class' "' dann ändere dein Formular-Steuerelement ' ' – fyrye

Antwort

0

Gemäß Ihren Kommentaren möchten Sie die Formulareinträge mit den entsprechenden Datenbankzeilen, Studenten oder anderen Bezeichnern verknüpfen.

Um die Formularfelder zuzuordnen, müssen Sie die form fields as an array Werte für Ihr Update-Skript zur Verarbeitung übermitteln. Dazu verwenden Sie eckige Klammern als Suffix des Namensattributs für das Formularfeld. Wie name="field[]" und optional einen gemeinsamen Bezeichner wie eine Datenbanktabellenzeilen-ID angeben, so dass keine Probleme mit fehlenden Datensätzen auftreten.

Datenansicht

<?php 
while ($row = mysqli_fetch_assoc($moreDetails)) { 
    $id = $row['id']; 
    $reg = $row['reg_num']; 
    $sub = $row[$subject]; 
    ?> 
    <tr> 
     <td><?php echo $id; ?></td> 
     <td><?php echo $reg; ?></td> 
     <td> 
      <label for="score_<?php echo $id; ?>"></label> 
      <input id="score_<?php echo $id; ?>" type="text" class="form-control" name="student[<?php echo $id; ?>][score]" /> 
      <input type='hidden' name='student[<?php echo $id; ?>][assessment]'/> 
     </td> 
    </tr> 
<?php } ?> 

Welche Ihnen einen resultierende von $_POST Wert ähnlich wie diese geben wird.

array(1) { 
    ["student"]=> 
    array(3) { 
    ["86236762057e1df012e662"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "a" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    ["40443582357e1df012e668"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "b" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    ["112264948957e1df012e66c"]=> 
    array(2) { 
     ["score"]=> 
     string(1) "c" 
     ["assessment"]=> 
     string(1) "A" 
    } 
    } 
} 

Dann müssen Sie das Array von Daten in einem Update verarbeiten oder Abfrage einfügen und die eigenen Fehler Trapping und Bedingungen hinzufügen, die Abfragen auf Ihre Bedürfnisse zu generieren.

Insert-Controller

if (false === empty($_POST['student'])) { 
    $queryValues = array(); 
    foreach ($_POST['student'] as $id => $student) { 
     $queryValues[] = "('" . $id . "', '" . $student['score'] . "')"; 
    } 
    echo 'INSERT INTO ca (id, score) VALUES ' . implode(', ', $queryValues); 
} 

Insert Query Result

INSERT INTO ca (id, score) VALUES ('86236762057e1df012e662', 'a'), ('40443582357e1df012e668', 'b'), ('112264948957e1df012e66c', 'c') 

Update-Controller-

if (false === empty($_POST['student'])) { 
    foreach ($_POST['student'] as $id => $student) { 
     echo "UPDATE ca 
       SET score = '" . $student['score'] . "' 
       WHERE id = '" . $id . "'"; 
    } 
} 

Update-Abfragen Ergebnis

UPDATE ca SET score = 'a' WHERE id = '86236762057e1df012e662' 
UPDATE ca SET score = 'b' WHERE id = '40443582357e1df012e668' 
UPDATE ca SET score = 'c' WHERE id = '112264948957e1df012e66c' 

Als Kenntnis von Best Practices, ich fordere Sie dringend zu prüfen, Aussagen unter Verwendung von SQL-Injection-Angriffe zu vermeiden. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Verwandte Themen