简体   繁体   中英

MySQL/PHP: Insert form array into database?

I am a PHP newbie having a problem inserting an array from a form into the database using foreach statement. I am trying to create a form that accepts Score, Grade and Comment for each subject. However,only the last subject gets inserted into the database. The list of subjects is loaded from previously registered subjects (I have no problem with that). My problem is getting all the subjects to save back to database. This is the form i use:

<legend>ENTER RESULTS:</legend>
<input type="hidden" name="results[]" value= "<?php foreach ($subjects as $subject):?>
<ul>
<li> <input type="text" name="subject_name" size="10" value ="<?php htmlout($subject['subject_name']); ?>"/>
          </label>
     <label for="subject_score">SCORE:</label>
    <input type="text" name="subject_score" size="5" value = "<?php
        htmlout($subject_score);?>"/> <label for="subject_score">GRADE:</label>
    <input type="text" name="subject_grade" size="5" value = "<?php
        htmlout($subject_grade);?>"/><label for="subject_grade">COMMENT:</label>
    <input type="text" name="subject_comment" size="30" value = "<?php
        htmlout($subject_comment);?>"/> </div></li>

    <?php endforeach; ?>
    <input type="hidden" name="student_id" value="<?php
        htmlout($student_id); ?>
  </fieldset>

This is the php code i use:

if (isset($_GET['result']))
{
try
{
  $sql = 'INSERT INTO results SET
      student_id = :student_id,
      subject_name = :subject_name,
      subject_grade = :subject_score,
      subject_grade = :subject_grade,
      subject_comment = :subject_comment';
  $s = $pdo->prepare($sql);

  foreach ($_POST['results'] as $result)
  {
  $s->bindValue(':student_id',$_POST['student_id']);
  $s->bindValue(':subject_name', $_POST['subject_name']);
  $s->bindValue(':subject_score', $_POST['subject_score']);
  $s->bindValue(':subject_grade', $_POST['subject_grade']);
  $s->bindValue(':subject_comment', $_POST['subject_comment']);
  $s->execute();
  }
  }
catch (PDOException $e)
{
  $error = 'Could not Register the Student for the Subjects, Please try again'.$e->GetMessage();
  include 'error.html.php';
  exit();
}
echo 'Success';

you can use form element in array like subject_score[]

your form should be like

foreach
<input type="text" name="subject_name[]" size="10" value ="<?php htmlout($subject['subject_name']); ?>"/>
          </label>
     <label for="subject_score">SCORE:</label>
    <input type="text" name="subject_score[]" size="5" value = "<?php
        htmlout($subject_score);?>"/> <label for="subject_score">GRADE:</label>
    <input type="text" name="subject_grade[]" size="5" value = "<?php
        htmlout($subject_grade);?>"/><label for="subject_grade">COMMENT:</label>
    <input type="text" name="subject_comment[]" size="30" value = "<?php
        htmlout($subject_comment);?>"/> </div></li>
endforeach

then you can collect those value like below

foreach($_POST['subject_name'] as $key=>$val){
  //val will hold subject name
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM