使用HTML表单将数据插入数据库时出错
问题描述:
我试图创建一个网站,管理员可以在该网站上查看有关在商店购物的顾客的详细信息。主页上列出了所有客户的名称,点击后,每个名称都被引导到一个名为CustomerDetails.php的页面,该页面提供了有关该特定客户的更多详细信息。我试图编写一些代码,允许管理员向特定客户添加备注。这两个表如下:使用HTML表单将数据插入数据库时出错
CREATE TABLE PHPNotes(
NoteID INT,
NoteContent VARCHAR(100) NOT NULL,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES CustomerEnrolment(CustomerID),
PRIMARY KEY(NoteID))ENGINE=InnoDB;
CREATE TABLE CustomerEnrolment(
CustomerID INT,
Name VARCHAR(30),
Email VARCHAR(30),
PhotoURL VARCHAR(30),
PRIMARY KEY(CustomerID)) ENGINE=InnoDB;
我试图从窗体中获取数据(如下所示)并将此特定数据插入到数据库中。不过,我被告知,我写的代码存在错误。
<?php
$Name = $_GET['Name'];
$CustomerID = $_GET['CustomerID'];
$sql1 ="SELECT * FROM CustomerEnrolment WHERE CustomerID='$CustomerID'";
$sql2 ="SELECT c.*, e.CustomerID FROM CustomerNotes c, CustomerEnrolment e WHERE e.CustomerID=n.CustomerID AND Name='$Name'" ;
if(! get_magic_quotes_gpc()) {
$NoteContent = addslashes ($_POST['NoteContent']);
}
else {
$NoteContent = $_POST['NoteContent'];
}
$NoteID = $_POST['NoteID'];
$sql = "INSERT INTO CustomerNotes ". "(NoteID,NoteContent,CustomerID) ". "VALUES('$NoteID','$NoteContent','$CustomerID')";
$result = mysql_query($sql);
if(! $result) {
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
?>
<p> Add New Customer Record </p>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table id="Add Record">
<tr> <td> Note ID </td>
<td> <input name = "NoteID" type="text" id="NoteID"></td>
<td> <input name = "NoteContent" type="text" id="NoteContent"></td> </tr>
<tr> <td> <input type="hidden" name="CustomerID" value="$CustomerID"></td> </tr>
<tr> <td> <input name = "Add Customer Note" type = "submit" id = "Add Customer Note" value = "Add Customer Note"> </td> </tr>
</table>
</form>
的错误是:
Notice: Undefined index: CustomerID
Notice: Undefined index: NoteContent
Notice: Undefined index: NoteID
Could not enter data: Duplicate entry '0' for key 'PRIMARY'
一些意见,以我要去的地方的将是巨大的!
答
一两件事 - 你的查询有问题 - 它应该是:
$sql = "INSERT INTO CustomerNotes (NoteID,NoteContent,CustomerID) VALUES('".$NoteID."','".$NoteContent."','".$CustomerID."')";
和同样可以为你的第一个2级的查询可以说为好。
而且你混合PHP和HTML而不是一个好办法:))
<tr>
<td>
<input type="hidden" name="CustomerID" value="$CustomerID">
</td>
</tr>
应该是:
<tr>
<td>
<input type="hidden" name="CustomerID" value="<?php echo $CustomerID; ?>">
</td>
</tr>
而且你不关闭你的输入 - 他们应该是怎样的?
<input name = "NoteID" type="text" id="NoteID" />
而且 - 鉴于noteID是你的主键 - 你应该考虑这种自动递增,因此,您就不需要有一个名为“noteID”任何输入 - 无autoincrementation,因为你需要一个验证机制,以检查那个ID里面还没有一张纸条。
答
使用POST功能,
$Name = $_POST['Name'];
您的形式使用POST方法。
答
另一个问题你可能有:
<tr> <td> <input type="hidden" name="CustomerID" value="$CustomerID"></td> </tr>
如果你想显示VAR $CostumerID
你应该使用PHP标签<?php $CostumerID ?>
或<?= $CostumerID ?>
。
答
1)变化
$sql = "INSERT INTO CustomerNotes ". "(NoteID,NoteContent,CustomerID) ". "VALUES('$NoteID','$NoteContent','$CustomerID')";
要
$sql = "INSERT INTO CustomerNotes(NoteID,NoteContent,CustomerID) VALUES('$NoteID','$NoteContent','$CustomerID')";
2)变化
<input type="hidden" name="CustomerID" value="$CustomerID">
要
<input type="hidden" name="CustomerID" value="<?php echo $CustomerID;?>">
表单用作“post”方法 – selvan