javascript - 复选框不起作用

标签 javascript php jquery database checkbox

我是 PHP 的新手,希望有人能帮助我。我有 4 个 PHP 文件,它们基本上是供用户填写的表单,然后系统将导航到验证页面,用户将单击提交以保存它。我在复选框部分有问题。

错误显示:

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

为了便于理解,我简化了代码以仅显示复选框部分。我希望有人可以帮助我。

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;
  }

 ?>

插入.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);
}
?>

最佳答案

首先,为了得到 $module 的数组, 则需要使用数组语法(有关更多信息,请参阅 this section of the PHP documentation)。为此,每个复选框输入都需要有 name添加了值 module[] 的属性,如下面的标记所示:

<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 -->

然后在 LMvalidate_reservation.php 中,$module将是一个数组(有关更多信息,请参阅 this answer)。为了正确地打印出数组中的每个元素(即在表单中选中的每个值),请使用类似 print_r() 的函数或使用类似 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>

请参阅 this phpfiddle 中的演示.请注意,由于只允许使用一个 PHP 文件,因此合并了 LMreservation.php 和 LMvalidate_reservation.php 中的代码。

这是因为表单(即 <form action="LMvalidate_reservation.php" method="post"> )是以标准方式提交的(即不是异步的,就像 jQuery AJAX 代码试图做的那样)。

此外,如果您想让 jQuery AJAX 代码正常工作,提交按钮需要有一个 id attribute。放。所以 reservation.php 中的这一行

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

需要像这样更新:

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

这样点击处理程序(即 $('#submit').click(function(){...} )将绑定(bind)到对 DOM 中存在的元素的点击。

关于javascript - 复选框不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44275977/

相关文章:

php - 如何在指定的一个之后删除数组的所有元素

jquery - 当我点击每个按钮时,它会显示与第一个按钮相同的内容

php - 发送邮件 - Yii 2.0

javascript - 如何在 Canvas 中实现英雄选择?

JavaScript setSelectionRange() 方法和光标位置

javascript - 如何在堆积条形图-d3.js 中设置轴样式

c# - PHP 中 C# 转换为 char 的等效项是什么?

jquery - 是否可以在表单域中找到输入的索引?

javascript - 在当前类(class)中添加一个具有相同 3 类(class)的类(class)

javascript - 如何替换 Canvas onclick 上的图像?