我是 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/