首先,我想提前为任何缺乏信息道歉,我会尽可能地描述我的问题,并为您提供尽可能多的数据,我相信是相关的。
所以,我对PHP很陌生,并且在过去的几天里遇到了不止一个问题。我有两个主要问题,第一个是我在这个帖子中寻求帮助。
基本上,我为我们的父母为他们新成立的MotorHome Hire公司创建了一个网站。现在只是一个小时间的操作,所以我建议我建立网站,因为我有一个简短的HTML历史,很快就会开始一个Web开发学徒,所以认为学习一两件事是个好主意。方式。
该网站的一页允许客户检查MotorHome的当前可用性,该主页通过MySQL本地托管的数据库保持更新。日历按预期工作,我可以使用HeidiSQL手动更新它以向表中添加条目。但是,我想创建一个管理页面,我的父母可以通过网站轻松更新数据库,而不会涉及太多技术问题。
这是我的PHP代码:
<?php
if(isset($_POST['update']))
{
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = 'PASS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$olddate = $_POST['date'];
$name = $_POST['name'];
$newdate = strtotime(str_replace('/', '-', $olddate));
$sql = "UPDATE calendar ".
"SET date = $newdate ";
"SET customer = $name" ;
mysqli_select_db($conn, 'calendar');
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('Could not update data: ' . mysqli_error($conn));
}
echo "Updated data successfully\n";
mysqli_close($conn);
}
else
{
?>
<?php
}
?>
我遇到的问题是,每次我在表单上点击更新时,都会收到此错误:
无法更新数据:键'PRIMARY'重复输入'0000-00-00'
这告诉我数据库正在接收value 0000-00-00而不是表单中输入的日期。它还向我建议,它正试图在表中添加多个0000-00-00的条目,因为这当前不是表中的条目?
我认为问题归结为html和SQL的'date'类型不兼容,但是我不确定,我尝试更正日期的格式,因为HTML以DD / MM / YEAR的形式请求它,而数据库以YEAR-MM-DD格式存储它。
对我的情况的任何启发都会非常感激,因为我的思绪在这一点上已经完全陷入困境。
编辑:
所以我相信INSERT INTO路由是正确的方法,我已经更新了我的PHP代码:
<?php
if(isset($_POST['update']))
{
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = 'PASS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$olddate = $_POST['date'];
$name = $_POST['name'];
$newdate = strtotime(str_replace('/', '-', $olddate));
$sql = "INSERT INTO calendar (date, customer)
VALUES ($olddate, $name)";
mysqli_select_db($conn, 'calendar');
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('Could not update data: ' . mysqli_error($conn));
}
echo "Updated data successfully\n";
mysqli_close($conn);
}
else
{
?>
<?php
}
?>
但我现在收到错误:
无法更新数据:“字段列表”中的未知列'test'
'test'是我用于客户字段的名称,但是我不知道“字段列表”是什么引用?有什么帮助吗?
答案 0 :(得分:1)
您需要在WHERE
查询中包含UPDATE
语句,以告知MySQL您要更新的内容。现在它正在尝试将该表中的任何内容和所有内容更新为相同的值,其中一个值是必须唯一的主键。
例如:
$sql = "UPDATE calendar
SET date = '$newdate', customer = '$name'
WHERE date = '$olddate'";
旁注:您的日期采用2015-07-21 格式作为示例。您需要将与日期相关的变量包装在引号中。否则,将导致语法错误。
参考文献:
答案 1 :(得分:0)
感谢大家的投入。它最终有效,如果没有这个网站上令人惊叹的社区,我无法做到这一点。解决方案确实是:
<?php
if(isset($_POST['update']))
{
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = 'PASS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$date = $_POST['date'];
$name = $_POST['name'];
$newdate = strtotime(str_replace('/', '-', $olddate));
$sql = "INSERT INTO calendar (date, customer)
VALUES ('$date', '$name')";
mysqli_select_db($conn, 'calendar');
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('Could not update data: ' . mysqli_error($conn));
}
echo "Updated data successfully\n";
mysqli_close($conn);
}
else
{
?>
<?php
}
?>