插入表不工作,没有错误通过PHP页面

时间:2011-08-21 10:14:23

标签: php mysql

我将此代码插入表中。我对INSERT INTO类别的问题是它永远不会将数据插入表中而且没有错误。我在代码中使用几乎相同的查询与不同的表,并在那里工作。任何线索?

<?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();
    }

  }
}
?>

6 个答案:

答案 0 :(得分: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()使您的查询安全(呃)


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

include("db.php");

require("db.php");

如果找不到包含文件,则会失败。在这种情况下,请修复!

答案 1 :(得分: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();
    }

  }
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我有同样神秘的情况。更糟糕的是,在远程,相同的数据库上,相同的代码正在运行。解决方案是为所有数据库字段定义一个默认值(任何值)......希望这会有所帮助。

答案 4 :(得分:0)

我长期坚持这个问题我发现的唯一解决方案是

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

使用以下方法

并确保顺序保持顺序dirst变量,例如'$ conn',然后在方法'mysqli_select_db($ conne,'checksum')中找到数据库名称;'。

类似于'mysqli_query($ conne,$ 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']);

希望这会有用

答案 5 :(得分:0)

您的代码工作正常,这里的问题是未设置数据库自动增量。如果未设置自动递增,则会发生这种情况。无论您运行脚本多少次,都将无法插入多条记录。如果遇到这种问题,请检查以确保启用了自动增量。

这并不是真正的错误,但是当用户忘记启用自动递增功能时,mysql或php的开发人员应发出警告,以便用户可以选择修复或忽略它。