Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过php页面插入到表中不工作且无错误_Php_Mysql - Fatal编程技术网

通过php页面插入到表中不工作且无错误

通过php页面插入到表中不工作且无错误,php,mysql,Php,Mysql,我有这个代码要插入到表中。我对INSERT INTO categories的问题是,它从不向表中插入数据,而且没有错误。我在代码中使用了几乎相同的查询,但使用了不同的表,并且它在那里工作。有线索吗 <?php $action = $_GET['action'] ; if ($action=='question') question(); elseif ($action=='categories') categories(); function question() { i

我有这个代码要插入到表中。我对INSERT INTO categories的问题是,它从不向表中插入数据,而且没有错误。我在代码中使用了几乎相同的查询,但使用了不同的表,并且它在那里工作。有线索吗

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

  }
}
?>

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

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注入攻击;用于使您的查询安全(er)


另一个问题可能是您的include文件。试着改变

include("db.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 = 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();
    }

  }
}

我也有同样的神秘处境。更糟糕的是,在一个远程、相同的数据库上,相同的代码正在工作。解决方案是为所有数据库字段定义一个默认值(任意值)。。。希望这有帮助。

我也有同样的问题,使用了
或die(mysql_error())并意识到我没有对我的一个变量执行
addslashes($string)
。它有我需要转义的字符。

我陷入这个问题已经很长时间了,我找到的唯一解决办法是

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

使用以下方法

并确保在方法“mysqli_select_db($conne,'checksum');”中保持变量的正确顺序,例如“$conn”,然后是数据库名称

类似地,“mysqli_查询($conne,$enter_命令);”首先是变量,然后是查询的变量

$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']);

希望这能起作用

您的代码工作正常,这里的问题是没有设置数据库自动增量。如果未设置“自动增量”,则可能发生这种情况。无论您运行脚本多少次,都无法在一条记录之外插入其他记录。如果您遇到此类问题,请检查以确保启用了自动增量


这不是一个真正的错误,但是当用户忘记启用自动增量时,mysql或php的开发人员应该发出警告,这样用户就可以选择修复它或忽略它。

您好!您不应该以这种方式构建SQL字符串。Google SQL injection,您将了解原因。我知道SQLi将在问题解决后处理它“没有错误”的确切含义是什么?你能找到一个“完成”链接吗?您是否遇到了一个
echo mysql_error()行?哪个插件不起作用?当这不起作用时,您的url上的查询字符串是什么(从“?”开始的所有内容)?插入到类别中工作正常,使用完成的echo插入到常见问题解答中没有发生任何事情白色页面没有echo没有错误完全没有感谢您的时间,但是没有任何内容或语法修复此问题甚至没有错误reported@Marco尝试执行
print\r($\u POST)
$query=”“
行之前。这将打印
$\u POST
数组,并显示其中是否有任何内容。也没有输出,只有空白页。输入可能会破坏语句。尝试此mysql_查询($query)或死亡(mysql_error());然后继续执行echo“done>”;建议的代码中仍然有一个bug。它将生成
…值(“.TheCategory.”、“.TheSubcategory.”、“.TheQuestion.”、“.TheAnswer.”)
@MarcoDonJuan:试试上面修改过的代码。它应该回显要执行的SQL代码,前缀为“要执行的SQL查询:”。通过phpMyAdmin或类似工具登录到数据库,并尝试直接运行SQL查询。该守则是好的-它必须是一个问题以外的上述修订守则。无论是db.php文件中的内容,还是您正在编辑的字段中的内容,或者类似的内容。db.php中出现错误的原因是什么?如果您注意到,我使用相同的方法插入到类别中,有两个函数,一个是到faq,另一个是到类别,类别插入可以很好地使用echo done msg和数据库中已有的数据,同时,类别显示没有错误,没有插入,只有白色page@MarcoDonJuan:我是说我提供的代码,JamWaffles提供的代码看起来是正确的。因此,我建议您可能希望查看图片的另一半,即代码所依赖的依赖项,而不是试图在图片的一半中找到bug(当它看起来不太可能存在时)。首先按照上面提到的方法进行调试,然后我们将讨论这个建议的优点。是的,我做了,插入到使用函数类别100%有效的类别中,并显示调试消息,插入到使用函数问题不起作用的常见问题中没有结果只是空白page@MarcoDonJuan:那么,回答“是/否”-您是否:1)使用了上述代码,2)看到了浏览器中显示的SQL语句,3)在phpMyAdmin或类似程序中执行了这些语句?除此之外,在phpMyAdmin中执行的语句是成功的,还是您看到了错误?
$gender      = mysql_real_escape_string($_POST['gender']);