我刚创建了一个ajax函数,它将数据发送到php和php到数据库。插入dotp_task_log表,工作正常。但是,当我需要在添加到dotp_task_log之后向dotp_tasks添加数据时,它不会添加,我无法找到原因......我得到了Gerror,这是我的php文件,它将数据添加到数据库。
<?php
$currentUser = isset($_POST['currentUser']) ? $_POST['currentUser'] : '';
$currentTasken = isset($_POST['currentTasken']) ? $_POST['currentTasken'] : '';
$currentPercent = isset($_POST['currentPercent']) ? $_POST['currentPercent'] : '';
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
if(!$con)
die('Could not connectzzz: ' . mysql_error());
mysql_select_db("foxi" , $con) or die ("could not load the database" . mysql_error());
$check = mysql_query("SELECT * FROM dotp_task_log");
$numrows = mysql_num_rows($check);
if($numrows >= 1)
{
//$pass = md5($pass);
$ins = mysql_query("INSERT INTO dotp_task_log (task_log_creator, task_log_Task) VALUES ('$currentUser' , '$currentTasken')" ) ;
if($ins)
{
$check = mysql_query("SELECT * FROM dotp_tasks");
$numrows = mysql_num_rows($check);
if($numrows > 1)
{
//$pass = md5($pass);
$inss = mysql_query("INSERT INTO dotp_tasks (task_percent_complete) VALUES ('$currentPercent') WHERE task_id='$currentTasken'" ) ;
if($inss)
{
die("Succesfully added Percent!");
}
else
{
die("GERROR");
}
}
else
{
die("Log already exists!");
}
}
else
{
die("ERROR");
}
}
else
{
die("Log already exists!");
}
?>
答案 0 :(得分:5)
正如我在评论中所述:
INSERT ...没有
WHERE
子句。 Error checking会发出语法错误信号。 INSERT ON DUPLICATE KEY。您可能想要使用UPDATE
$inss = mysql_query("UPDATE dotp_tasks
SET task_percent_complete = '$currentPercent'
WHERE task_id='$currentTasken'" );
参考文献:
另外,测试时请使用错误检查:
而不是回显自定义消息。
将or die(mysql_error())
添加到mysql_query()
。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
脚注:
确保您的HTML表单确实包含POST方法,并且所有输入都带有名称属性且没有拼写错误。使用错误报告,将发出信号。
您现在的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements,它们更安全。
答案 1 :(得分:2)
Fred -ii-在他的评论中钉了它 - 你在该查询中使用了不正确的语法。
看起来您需要更新查询,例如:
update dotp_tasks
set task_percent_complete = '$currentPercent'
where task_id = '$currentTasken'
此外 - 最好避免通过手动设置字符串来创建查询 - 您需要查看prepared statements以进一步改进此代码。