无法在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> 
+0

请使用mysql_query($ query)或die(mysql_error())输出错误消息; – Headshota

+0

mysql_error()被禁用。 –

+0

只是一个建议:使用参数化查询,否则你将陷入更多的麻烦(SQL注入,无效的SQL等)。 –

您在线路81上已经错误:

else 
{ 
    $referred_by_id = 0; 
} 

我没有看到IF之前构建,进行适当的修正,并再次运行该脚本。

+0

修复了有问题的代码 - 但仍然无效:/ –

+0

这是与错误标记的列结合使用 - 谢谢Tuga! –

+0

我很高兴我可以帮助:) –

不看表的结构,以确保所有的领域都在那里,我要承担这件事情与数据。

数据中的任何引号都会导致问题(包括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中执行它,看看它是否工作,或者它是否产生错误。

+0

我不是太在意注射,因为它不是公共页面。但是,无论如何,如果它有助于解决错误,我会尝试。我会在一两分钟内回复。 –

+0

好的,这并没有解决任何问题:/ –

绝对不能按原样工作。看起来你有一个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).'\') '; 
+0

$ params应该设置为'$ params [] =''''。我相信mysql_real_escape_string($ _REQUEST [$ key])。 –

+0

@Doug Kress - 谢谢你,这就是我写代码的理由。 :) –