简体   繁体   中英

Checkbox not functioning

I'm new to PHP and I hope someone can help me. I have 4 PHP files and they are basically a form for the user to fill, then the system will navigate it to validate page, and user will click submit to save it. I have a problem in the checkbox part.

The error shows :

Notice: Array to string conversion in C:\\xampp\\htdocs\\LM\\LMvalidate_reservation.php

I have simplified the code to show only the checkbox part for easier understanding. I hope someone(s) can help me in this.

LMreservation.php

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="LMvalidate_reservation.php" method="post"> <div class="col-md-4"><b>Please check (√ ) the module(s) that you want to attend:</b><br></div> <div class="col-md-8"> <input type="checkbox" class="get_value" value="WEBOPAC Usage">WEBOPAC Usage<br> <input type="checkbox" class="get_value" value="Accessing Online Database Skill">Accessing Online Database Skill<br> <input type="checkbox" class="get_value" value="E-Books and E-Journals Accession">E-Books and E-Journals Accession<br> <input type="checkbox" class="get_value" value="Digital Collection Accession">Digital Collection Accession<br> <input type="checkbox" class="get_value" value="EQPS Exam Papers">EQPS Exam Papers<br> <input type="checkbox" class="get_value" value="Information Searching Strategy">Information Searching Strategy<br> <input type="checkbox" class="get_value" value="SCOPUS & Web Of Science Usage Skill">SCOPUS & Web Of Science Usage Skill<br> <input type="checkbox" class="get_value" value="Reference Management Software (EndNote & Mendeley)">Reference Management Software (EndNote & Mendeley)<br> <input type="checkbox" class="get_value" value="UiTM Institutional Repository (Thesis & Dissertation)">UiTM Institutional Repository (Thesis & Dissertation)<br> <input type="checkbox" class="get_value" value="Digital Map">Digital Map<br> <input type="checkbox" class="get_value" value="E-Newspaper (BLIS (Bernama Library & Infolink Service)">E-Newspaper (BLIS (Bernama Library & Infolink Service))<br> <input type="checkbox" class="get_value" value="Facility">Facility<br><br> </div> <script> $(document).ready(function(){ $('#submit').click(function(){ var insert = []; $('.get_value').each(function(){ if($(this).is(":checked")) { insert.push($(this).val()); } }); insert = insert.toString(); $.ajax({ url: "insert.php", method: "POST", data:{insert:insert}, success:function(data){ $('#result').html(data); } }); }); }); </script> <input type="submit" name="LMreservation_form" value="Submit"> </form> 

LMvalidate_reservation.php

<?php

if (isset($_POST['LMreservation_form'])) {

  $module = "";
  $count_error = 0;
  $msg = "";

  // validate if submitted variables empty show error msg else put in local variables

  }
  if (isset($_POST['module']) && ($_POST['module'] != ""))
    $module = $_POST['module'];
  else
  {
    $msg .= "Error: Please select your module.<br>";
    $count_error++;
  }

  if ($count_error > 0) {
    echo $msg;
    echo "$count_error error(s) detected.";
    die();
    // display error(s) here and stop
  }
}
else {
  echo "Error: You have execute a wrong PHP. Please contact the web administrator.";
  die();
}

?>

<!DOCTYPE html>
<html>
<head>

</head>

<body>

<form action="LMsave_reservation.php" method="post">
<table> 
     <tr>
      <td class="col-md-4 col-xs-4">Module:</td>
      <td class="col-md-8 col-xs-8"><?php print $module; ?><input type="hidden" name="module" value="<?php echo $module; ?>"></td>
    </tr>


  </table><br>

  <input type="submit" name="LMreservation_validate" value="Save My Reservation">


</form>

</body>
</html>

LMsave_reservation.php

<?php

if (isset($_POST['LMreservation_validate'])) {

  // Connection variables
  $servername = "localhost";
  $username = "root";
  $password = "";
  $dbname = "lm_reservation";

  try {
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      // Prepare the SQL statement
      $stmt = $conn->prepare("INSERT INTO lmreservation(name, studentstaffid, faculty, contactno, email, program, participant, attandance, module, date, starttime, endtime) VALUES (:name, :studentstaffid, :faculty, :contactno, :email, :program, :participant, :attandance, :module, :date, :starttime, :endtime)");

      // Bind the parameters

      $stmt->bindParam(':module', $module, PDO::PARAM_STR);


      // insert a row

      $module = $_POST['module'];

      $stmt->execute();

      echo "Your application is successful. Have a nice day! :)";
      }

    catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }

    $conn = null;
  }

 ?>

insert.php

<?php
if(isset($_POST["insert"]))
{
 $conn = mysqli_connect("localhost", "root", "", "lm_reservation");
 $query = "INSERT INTO lmreservation(modules) VALUES ('".$_POST["insert"]."')";
 $result = mysqli_query($conn, $query);
}
?>

First, in order to get an array for $module , the array syntax would need to be used (see this section of the PHP documentation for more information). For this, each checkbox input would need to have the name attribute added with value module[] , like in the markup below:

<input type="checkbox" name="module[]" class="get_value" value="WEBOPAC Usage">WEBOPAC Usage<br>
<input type="checkbox" name="module[]" class="get_value" value="Accessing Online Database Skill">Accessing Online Database Skill<br>
<!-- repeated for all other checkboxes -->

Then when in LMvalidate_reservation.php , $module will be an array (refer to this answer for more information). In order to properly print out each element in the array (ie each value checked in the form), use a function like print_r() or iterate over the values with a construct like foreach .

<table> 
    <?php 
    foreach($module as $moduleItem) { 
        echo '<tr>
            <td class="col-md-4 col-xs-4">Module:</td>
            <td class="col-md-8 col-xs-8">'.$moduleItem.'<input type="hidden" name="module" value="'.$moduleItem.'"></td>
            </tr>';
    }?>   
</table>

See a demonstration of this in this phpfiddle . Note that because only one PHP file is allowed, the code from LMreservation.php and LMvalidate_reservation.php have been combined.

This is because the form (ie <form action="LMvalidate_reservation.php" method="post"> ) is being submitted the standard way (ie not asynchronously, like the jQuery AJAX code attempts to do).

Additionally, if you wanted that jQuery AJAX code to work, the submit button would need to have an id attribute set. So this line in reservation.php

<input type="submit" name="LMreservation_form" value="Submit"> 

Would need to be updated like this:

<input id="submit" type="submit" name="LMreservation_form" value="Submit"> 

That way the click handler (ie $('#submit').click(function(){...} ) will be bound to clicks on an element that exists in the DOM.

use a For loop instead in that file LMvalidate_reservation.php

 <?php if (isset($_POST['LMreservation_form'])) { $module = ""; $count_error = 0; $msg = ""; // validate if submitted variables empty show error msg else put in local variables } if (isset($_POST['module']) && ($_POST['module'] != "")) $module = $_POST['module']; else { $msg .= "Error: Please select your module.<br>"; $count_error++; } if ($count_error > 0) { echo $msg; echo "$count_error error(s) detected."; die(); // display error(s) here and stop } } else { echo "Error: You have execute a wrong PHP. Please contact the web administrator."; die(); } ?> <!DOCTYPE html> <html> <head> </head> <body> <form action="LMsave_reservation.php" method="post"> <table> <?php foreach($module as $element) { ?> <tr> <td class="col-md-4 col-xs-4">Module:</td> <td class="col-md-8 col-xs-8"><?php print $element; ?><input type="hidden" name="module" value="<?php echo $element; ?>"></td> </tr> <?php } ?> </table><br> <input type="submit" name="LMreservation_validate" value="Save My Reservation"> </form> </body> </html> 

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