2011-08-21 54 views
3

我有这个代码插入到表中。我对INSERT INTO类的问题是它永远不会向表中插入数据,也没有错误。我在代码中使用几乎相同的查询与不同的表,并在那里工作。任何线索?插入表不工作,没有错误通过PHP页面

<?php 
$action = $_GET['action'] ; 
if ($action=='question') 
    question(); 
elseif ($action=='categories') 
    categories(); 

function question() { 
    if ((isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)) 
    { 
    $include("db.php"); 
    $category = $_POST['category'] ; 
    $subcategory = $_POST['subCategory'] ; 
    $question = $_POST['question'] ; 
    $answer = $_POST['answer'] ; 

    $query = "INSERT INTO faq (category,subcategory,question,answer) 
     VALUES('.$category.','.$subcategory.','.$question.','.$answer')"; 
    $success = mysql_query($query); 

    if ($success) 
    { 
     echo '<a href="admin.php" >done >';  
    } 
    else 
    { 
     echo mysql_error(); 
    } 

    } 
} 


function categories(){ 
    if (! (isset($_SESSION['loggedin']) && ! $_SESSION['loggedin'] == true)) 
    { 
    include("db.php"); 
    $category = $_POST['category'] ; 
    $subcategory = $_POST['subCategory'] ; 

    $query = "INSERT INTO categories (category,subcategory) 
     VALUES('$category' , '$subcategory')"; 
    $success = mysql_query($query); 

    if ($success) 
    { 
     echo '<a href="admin.php" >done>'; 
    } 
    else 
    { 
     echo mysql_error(); 
    } 

    } 
} 
?> 
+4

你好[Bobby Tables](http://xkcd.com/327/)! – Shef

+0

您不应该以这种方式构建SQL字符串。谷歌SQL注入,你会知道为什么。 –

+0

我知道SQLi不好处理一次问题修正 – LeoSam

回答

4

的几个问题:“”

  • 如果要结合变量转换成字符串,就可以使用字符加入它们,或者你可以在字符串中包含变量,只要字符串用双引号括起来即可。在你的代码中,你同时做了两件事。
  • 你不是在讨厌你的数据库输入。
  • 您的逻辑检查“类别”功能是不正确的。
  • 您的超链接标签缺少结束标签。

请参阅下面的修改代码。

<?php 

$action = $_GET['action']; 

if($action=='question') 
    question(); 
elseif($action=='categories') 
    categories(); 

function question(){ 
    if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){ 

    include('db.php'); 

    $category = mysql_real_escape_string($_POST['category']); 
    $subcategory = mysql_real_escape_string($_POST['subCategory']); 
    $question = mysql_real_escape_string($_POST['question']); 
    $answer = mysql_real_escape_string($_POST['answer']); 

    $query = "INSERT INTO faq (category , subcategory , question , answer) VALUES('{$category}' , '{$subcategory}' , '{$question}' , '{$answer}')"; 

    echo "SQL Query to execute: $query"; # Debug Message 

    $success = mysql_query($query); 

    if ($success){ 
     echo '<a href="admin.php">done</a>'; 
    }else{ 
     echo mysql_error(); 
    } 

    } 
} 


function categories(){ 
    if(!(isset($_SESSION['loggedin']) || $_SESSION['loggedin']==true)){ 

    include('db.php'); 
    $category = mysql_real_escape_string($_POST['category']); 
    $subcategory = mysql_real_escape_string($_POST['subCategory']); 

    $query = "INSERT INTO categories (category , subcategory) VALUES ('{$category}' , '{$subcategory}')"; 

    echo "SQL Query to execute: $query"; # Debug Message 

    $success = mysql_query($query); 

    if($success){ 
     echo '<a href="admin.php">done</a>'; 
    }else{ 
     echo mysql_error(); 
    } 

    } 
} 
+0

感谢提及所有这些问题,感谢你的时间 – LeoSam

+0

但仍然不能插入 – LeoSam

+0

@MarcoDonJuan:尝试修改上面的代码,它应该回显要执行的SQL代码,前缀为“SQL Query to execute:”。通过phpMyAdmin或类似的方式登录到数据库,并尝试直接运行SQL Query。是好的 - 它必须是上述修改代码之外的问题,不管它是否在** db中。php **文件,或者您正在编辑的字段,或类似的东西。 –

4

首先,为了帮助调试,我将这两行放在脚本的顶部以显示所产生的所有错误。但是,不要将它们放在生产环境中。

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

变化

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('.$category.','.$subcategory.','.$question.','.$answer')"; 

要这样:

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('".$category."','".$subcategory."','".$question."','".$answer."')"; 

$answer后错过了一个.(点);这是一个语法错误,而不是查询错误。

为了让事情简单一点,你其实可以省略点完全:

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('$category','$subcategory','$question','$answer')"; 

千万要注意的SQL注入攻击;使用mysql_real_escape_string(),使您的查询安全(ER)


另一个问题可能是您的包含文件。尝试改变

include("db.php"); 

require("db.php"); 

这是否包括文件无法找到将失败。在这种情况下,请修复!

+0

感谢您的时间,但没有任何东西或语法修复此问题,即使没有错误报告 – LeoSam

+0

@Marco尝试在'$ query =“''行之前执行'print_r($ _ POST)'。这将打印'$ _POST'数组并显示是否有任何内容。 – Bojangles

+0

也没有输出只是空白页 – LeoSam

0

我有同样的神秘情况。更糟糕的是,在一个远程的,相同的数据库中,相同的代码正在工作。解决的办法是为所有数据库字段定义一个默认值(任何值)...希望这有助于。

1

我有同样的问题,使用or die(mysql_error());,并意识到我没有对我的一个变量做addslashes($string)。它有我需要逃脱的角色。

0

我一直停留在这个问题上很长一段时间内唯一的解决办法,我发现是

使用mysqli的,而不是MySQL的,因为在PHP中的较新版本的这些MySQL已经被弃用例如

使用以下方法

并确保保持顺序正确dirst变量例如'$ conn',然后数据库名称在方法'mysqli_select_db($ conne,'checksum');'。在'mysqli_query($ conne,$ enter_command);'同样在'mysqli_query($ connec,$ enter_command)'''''''''''''''''''''''''''''''''''''''''''第一个变量,然后是查询变量。

$conn=mysqli_connect($mysql_host,$mysql_user,$mysql_password); 
mysqli_select_db($conne,'checksum'); // checksum is database name 
mysqli_query($conne,$enter_command); 
mysqli_close($conne); 

也确保进入数据库表列

$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('".$name."','".$lastname."','".$password."')"; 

,你也可以使用这个语法

$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('{$name}','{$lastname}','{$password}')"; 

尽量避免SQL注入

$gender  = mysql_real_escape_string($_POST['gender']); 

希望的时候,给空间这将工作