我正试图在我的网站上添加一个"admin"部分。现在我正在编写一个部分,将新行添加到我的MySQL数据库中。
第一个文件是我的admin.php:
<html>
...
<body>
<form action="add.php" method="post">
<input type="text" name="order" />
<input type="text" name="newstatus" />
<input type="submit" value="Add" />
</form>
</body>
</html>
我的目标是向新行添加2条数据(表现在只有2列)。
然后,我有我的add.php文件:
<?
//declare my connection variables - I'll move these to a secure method later
mysql_connect($servername, $username, $password) or die (mysql_error ());
// Select database
mysql_select_db($dbname) or die(mysql_error());
// The SQL statement is built
$sql="INSERT INTO $tblname(id, status)VALUES('$order', '$newstatus')";
$result=mysql_query($sql);
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='admin.php'>Back to main page</a>";
}
else {
echo mysqli_errno($this->db_link);
}
?>
<?php
// close connection
mysql_close();
?>
每当我输入任何数据(与表中已有的数据不重复)时,都会出现错误。如果我完全清除表中的所有数据,它将输入一次。我得到了一个重复的密钥错误,但我的密钥应该是"订单",这是唯一的,每次我输入它。
建议?
如果实际插入新行,则不应该自己填写ID,而是在数据库中将其设置为AUTO_INCREMENT
。然后,你有这样的表格吗:
<form action="add.php" method="post">
<input type="text" name="newstatus" />
<input type="submit" value="Add" />
</form>
你的PHP代码是这样的:
$newstatus = mysql_real_escape_string($_POST['newstatus']); // note the usage of $_POST variable
$sql="INSERT INTO `$tbl_name` (`status`) VALUES ('$newstatus')";
$result = mysql_query($sql) or die('Failed executing query: '.mysql_error());
AUTO_INCREMENT
可以通过以下查询在phpMyAdmin
中设置:
ALTER TABLE `WorkOrders` MODIFY `id` INTEGER NOT NULL AUTO_INCREMENT;
最后,不要使用mysql_*
函数,它们已被弃用。
我猜表的"id"字段是主键。如果是这种情况,就不能有两个具有相同标识符的行。
根据您的变量名newstatus,在我看来,您似乎正在尝试更新订单的状态;是这样吗?如果是,您应该使用形式为的UPDATE SQL查询
UPDATE table SET status='somestatus' WHERE id=someid