无法在php脚本中执行sql INSERT查询(mysql_query)。 PHP/MySQL - 时间敏感
更新:现在解决 - 谢谢大家!无法在php脚本中执行sql INSERT查询(mysql_query)。 PHP/MySQL - 时间敏感
修复:我有一个名为“referenced_by”的列,在我的代码中它被称为“referenced_by_id” - 所以它试图插入到一个不存在的列 - 一旦我解决了这个问题,它决定工作!
我在这个项目上工作的时间有限。时钟在滴答滴答。
我想将$ php_variables插入到名为“clients”的TABLE中。
我一直在努力几个小时才能使这个脚本工作,我得到它的工作一次,但后来我意识到我忘了一个领域,所以我不得不添加另一列到表,当我更新它停止工作的脚本。我恢复了,但现在它仍然无法正常工作,我只是感到很沮丧。
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
if (!isset($_COOKIE["user"]))
{
header ("Location: ./login.php");
}
else
{
include ("./source.php");
echo $doctype;
}
$birthday = $birth_year . "-" . $birth_month . "-" . $birth_day;
$join_date = date("Y-m-d");
$error_type = 0;
$link = mysql_connect("SERVER", "USERNAME", "PASSWORD");
if (!$link)
{
$error = "Cannot connect to MySQL.";
$error_type = 1;
}
$select_db = mysql_select_db("DATABASE", $link);
if (!$select_db)
{
$error = "Cannot connect to Database.";
$error_type = 2;
}
if ($referred_by != "")
{
$result = mysql_query("
SELECT id FROM clients WHERE referral_code = $referred_by
");
if (!$result)
{
$error = "Cannot find referral.";
$error_type = 3;
}
while ($row = mysql_fetch_array($result))
{
$referred_by_id = $row['id'];
}
}
else
{
$referred_by_id = 0;
}
$first_name = mysql_real_escape_string($_POST['first_name']);
$last_name = mysql_real_escape_string($_POST['last_name']);
$birth_month = mysql_real_escape_string($_POST['birth_month']);
$birth_day = mysql_real_escape_string($_POST['birth_day']);
$birth_year = mysql_real_escape_string($_POST['birth_year']);
$email = mysql_real_escape_string($_POST['email']);
$address = mysql_real_escape_string($_POST['address']);
$city = mysql_real_escape_string($_POST['city']);
$state = mysql_real_escape_string($_POST['state']);
$zip_code = mysql_real_escape_string($_POST['zip_code']);
$phone_home = mysql_real_escape_string($_POST['phone_home']);
$phone_cell = mysql_real_escape_string($_POST['phone_cell']);
$referral_code = mysql_real_escape_string($_POST['referral_code']);
$referred_by = mysql_real_escape_string($_POST['referred_by']);
$organization = mysql_real_escape_string($_POST['organization']);
$gov_type = mysql_real_escape_string($_POST['gov_type']);
$gov_code = mysql_real_escape_string($_POST['gov_code']);
$test_query = mysql_query
("
INSERT INTO clients (first_name, last_name, birthday, join_date, email, address, city, state, zip_code,
phone_home, phone_cell, referral_code, referred_by_id, organization, gov_type, gov_code)
VALUES ('".$first_name."', '".$last_name."', '".$birthday."', '".$join_date."', '".$email."', '".$address."', '".$city."', '".$state."', '".$zip_code."',
'".$phone_home."', '".$phone_cell."', '".$referral_code."', '".$referred_by_id."', '".$organization."', '".$gov_type."', '".$gov_code."')
");
if (!$test_query)
{
die(mysql_error($link));
}
if ($error_type > 0)
{
$title_name = "Error";
}
if ($error_type == 0)
{
$title_name = "Success";
}
?>
<html>
<head>
<title><?php echo $title . " - " . $title_name; ?></title>
<?php echo $meta; ?>
<?php echo $style; ?>
</head>
<body>
<?php echo $logo; ?>
<?php echo $sublogo; ?>
<?php echo $nav; ?>
<div id="content">
<div id="main">
<span class="event_title"><?php echo $title_name; ?></span><br><br>
<?php
if ($error_type == 0)
{
echo "Client was added to the database successfully.";
}
else
{
echo $error;
}
?>
</div>
<?php echo $copyright ?>
</div>
</body>
</html>
您在线路81上已经错误:
else
{
$referred_by_id = 0;
}
我没有看到IF之前构建,进行适当的修正,并再次运行该脚本。
修复了有问题的代码 - 但仍然无效:/ –
这是与错误标记的列结合使用 - 谢谢Tuga! –
我很高兴我可以帮助:) –
不看表的结构,以确保所有的领域都在那里,我要承担这件事情与数据。
数据中的任何引号都会导致问题(包括SQL注入安全漏洞)。你应该包装每个_POST [] $用mysql_escape_string()和如:
$first_name = mysql_real_escape_string($_POST['first_name']);
编辑:进一步调试...
正如有人建议(对不起,找不到评论),尝试:
$sql = "
INSERT INTO clients (first_name, last_name, birthday, join_date, email, address, city, state, zip_code,
phone_home, phone_cell, referral_code, referred_by_id, organization, gov_type, gov_code)
VALUES ('".$first_name."', '".$last_name."', '".$birthday."', '".$join_date."', '".$email."', '".$address."', '".$city."', '".$state."', '".$zip_code."',
'".$phone_home."', '".$phone_cell."', '".$referral_code."', '".$referred_by_id."', '".$organization."', '".$gov_type."', '".$gov_code."'
)";
// Debug:
print "<pre>". $sql ."</pre>";
mysql_query($sql);
提交表单时应该打印出SQL语句。采取该SQL语句,并尝试直接在MySQL中执行它,看看它是否工作,或者它是否产生错误。
我不是太在意注射,因为它不是公共页面。但是,无论如何,如果它有助于解决错误,我会尝试。我会在一两分钟内回复。 –
好的,这并没有解决任何问题:/ –
绝对不能按原样工作。看起来你有一个500错误,因为你还有一个缺少的if:
else
{
$referred_by_id = 0;
}
否则,你需要发布你的数据库模式。
另外,请注意,你真的需要很长的路程与这段代码,这使得难以阅读&保持。你也缺少对SQL注入的任何检查......你真的需要通过mysql_real_escape_string来传递(事实上,你应该使用mysqli,因为mysql接口在几年前基本上被弃用了)。
$keys = array('first_name',
'last_name',
'birthday',
'join_date',
'email',
'address',
'city',
'state',
'zip_code',
'phone_home',
'phone_cell',
'referral_code',
'referred_by_id',
'organization',
'gov_type',
'gov_code');
$_REQUEST['birthdate'] = $_REQUEST['birth_year'].'-'.$_REQUEST['birth_month'].'-'.$_REQUEST['birth_day'];
$_REQUEST['join_date'] = date('Y-m-d',time());
$params = array();
foreach ($keys as $key)
{
$params[] = mysql_real_escape_string($request[$key]);
}
$sql = 'INSERT INTO clients ('.implode(',', $keys).') ';
$sql .= ' VALUES (\''.implode('\',\'', $params).'\') ';
$ params应该设置为'$ params [] =''''。我相信mysql_real_escape_string($ _REQUEST [$ key])。 –
@Doug Kress - 谢谢你,这就是我写代码的理由。 :) –
请使用mysql_query($ query)或die(mysql_error())输出错误消息; – Headshota
mysql_error()被禁用。 –
只是一个建议:使用参数化查询,否则你将陷入更多的麻烦(SQL注入,无效的SQL等)。 –