我在表格中显示数据库中的列表(项目,类别和作业),用户可以单击表格中的列表,数据将显示在文本框中。用户可以在文本框中添加,更新和删除列表。之后,单击要运行的按钮。在这个PHP中,我决定做2个添加dan更新列表的功能(Item,Category和Job)。
最后我成功更新。
这是更新的代码:
首先,我在桌面上显示3个文本框。用户可以在文本框中添加新列表(项目,类别,作业)。之后,用户还可以单击另一个列表,列出我在3文本框中的数据库中的所有数据,因为我显示在顶部位置并更改要更新的文本框上的列表(类别和作业)。 / p>
<form id="form1" name="Checklist" method="post" action="Checklist2.php">
<table width="305" height="116" align="center" border="0">
<tr>
<td width="37%">Item : <br></td>
<td width="63%"><input type="text" name="Item" id="Item"></td>
</tr>
<tr>
<td>Category : </td>
<td>
<input type="text" name="Category" id="Category">
</td>
</tr>
<tr>
<td>Job : </td>
<td>
<input type="text" name="Job" id="Job">
</td>
</tr>
</table>
<div align="center">
<input type="image" value="submit" src="AddD.png" alt="submit Button" onmouseover="this.src='AddO.png'" onmouseout="this.src='AddD.png'" name="Add_btn" id="Add_btn">
<input type="image" value="submit" src="UpdateD.png" alt="submit Button" onmouseover="this.src='UpdateO.png'" onmouseout="this.src='UpdateD.png'" name="Update_btn" id="Update_btn">
<a href="DeleteChecklist2.php" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image3','','Delete1O.png',1)">
<img src="Delete1D.png" name="Image3" width="145px" height="50px" border="0" name="Delete_btn" id="Delete_btn">
</a>
</div>
</form>
//This is the PHP code of add and delete button
<?php
try {
$con = new PDO("mysql:host=localhost;dbname=gcmes", "root", "");
if(isset($_POST['Add_btn'])) {
$Item = $_POST["Item"];
$Category = $_POST["Category"];
$Job = $_POST["Job"];
if(empty($Item)||empty($Category)||empty($Job)) {
echo "<script type='text/javascript'>alert('Please fill in the required fields to add!')</script>";
}
else {
$insert=$con->prepare("INSERT INTO details(Item,Category,Job) VALUES(:Item,:Category,:Job)");
$insert->bindParam(':Item',$Item);
$insert->bindParam(':Category',$Category);
$insert->bindParam(':Job',$Job);
$insert->execute();
echo "<script type='text/javascript'>alert('Successful Added ! '); window.location.href = 'Checklist2.php';</script>";
}//else
}//if addbutton
if(isset($_GET['Update_btn'])) {
$Item = $_GET['Item'];
$Category = $_GET['Category'];
$Job = $_GET['Job'];
if(empty($Category)||empty($Job)) {
echo "<script type='text/javascript'>alert('Please fill in the required fields to update!')</script>";
}
else {
$st=$con->prepare("UPDATE details SET Category = :Category, Job = :Job WHERE Item = :Item");
$st->bindParam(":Category",$Category);
$st->bindParam(":Job",$Job);
$st->bindParam(":Item",$Item);
$st->execute();
}//else
}//if updatebutton
}//try
catch(PDOException $e) {
echo "error".$e->getMessage();
}
?>
//This is the table list all the data from database
<table id="table" border="0" align="center">
<tr>
<th>No</th>
<th>Category</th>
<th>Job</th>
</tr>
<?php
try {
$con = new PDO("mysql:host=localhost;dbname=gcmes", "root", "");
$sql = $con->query("SELECT * FROM details");
foreach($sql as $row) {
$Item = $row["Item"];
$Category = $row["Category"];
$Job = $row["Job"];
echo'
<tr>
<td>' . $Item . '</td>
<td>' . $Category . '</td>
<td>' . $Job . '</td>
</tr>
';
}
echo"</table>";
}
catch(PDOException $e) {
echo "error".$e->getMessage();
}
?>
当用户点击表格中的数据(上面的代码)时,这是一个脚本将显示在文本框中:
<script>
var table = document.getElementById('table');
for(var i = 1; i < table.rows.length; i++)
{
table.rows[i].onclick = function()
{
//rIndex = this.rowIndex;
document.getElementById("Item").value = this.cells[0].innerHTML;
document.getElementById("Category").value = this.cells[1].innerHTML;
document.getElementById("Job").value = this.cells[2].innerHTML;
};
}
</script>
谢谢大家!
答案 0 :(得分:0)
这里要介绍几件事。
问题1:
您的INSERT
设置不正确。你有:
$insert=$con->prepare("INSERT INTO details(Item,Category,Job) VALUES(:Item,:Category,:Job)");
$insert->bindParam('Item',$Item);
$insert->bindParam('Category',$Category);
$insert->bindParam('Job',$Job);
$insert->execute();
它应该是这样的(注意bindParam中的:
添加):
$insert=$con->prepare("INSERT INTO details(Item,Category,Job)
VALUES(:Item,:Category,:Job)");
$insert->bindParam(':Item',$Item);
$insert->bindParam(':Category',$Category);
$insert->bindParam(':Job',$Job);
$insert->execute();
问题2:
第二个是你的UPDATE
不正确,而且没有正确使用准备。你有这个:
$st=$con->prepare("UPDATE details SET Category='$Category', Job='$Job'");
$st->bindParam(1,$Category);
$st->bindParam(2,$Job);
$st->execute();
您将变量注入查询本身,否定完全使用prepare。然后尝试bindParam到不存在的占位符。最后,您正在使用相同的信息更新ENTIRE表,因为您忘记了WHERE
子句。
所以试试这个:
$st=$con->prepare("UPDATE details SET Category = :Category, Job = :Job
WHERE Item = :Item");
$st->bindParam(":Category",$Category);
$st->bindParam(":Job",$Job);
$st->bindParam(":Item",$Item);
$st->execute();
问题3:
最后,正如我在评论中提到的那样......你可以将Item作为隐藏的表单元素传递,这样用户就无法轻易改变它:
<tr>
<td width="37%">Item : <br></td>
<td width="63%">
<input type="hidden" name="Item" id="Item">
<span id="ItemDisplay"><!-- Item will be visible here --></span>
</td>
</tr>
// js addition:
document.getElementById("Item").value = this.cells[0].innerHTML;
document.getElementById("ItemDisplay").innerHTML = this.cells[0].innerHTML;
第4期:
在获得更新按钮的html之前,您有一个关闭form
标记,这会破坏您的html表单提交参数:
</form><!-- THIS shouldnt be here -->
<?PHP
// big block of php
?>
<div align="center">
<input type="image" value="submit" src="AddD.png" alt="submit Button" onmouseover="this.src='AddO.png'" onmouseout="this.src='AddD.png'" name="Add_btn" id="Add_btn">
<input type="image" value="submit" src="UpdateD.png" alt="submit Button" onmouseover="this.src='UpdateO.png'" onmouseout="this.src='UpdateD.png'" name="Update_btn" id="Update_btn">
</div>
</form><!-- this one is the CORRECT one to keep -->
删除早期的</form>
代码。
答案 1 :(得分:-1)
问题在于,您的更新查询会更新整个表,因为您没有指定要更新的行
$st=$con->prepare("UPDATE details SET Category='$Category', Job='$Job'");
$st->bindParam(1,$Category);
$st->bindParam(2,$Job);
$st->execute();
}
试试这个
$st=$con->prepare("UPDATE details SET Category='$Category', Job='$Job' where id='$id'");
您应该将隐藏输入中的行ID传递给表单,以便在提交时将其传递回脚本
<input type="hidden" name="db_id" value="1"><!-- the value should be the primary key id from your database-->
你可以像往常一样选择值
if(isset($_GET["db_id"])){$id = $_GET["db_id"];}//Kindly make sure you sanitize this input to prevent SQL injection attacks