使用PHP插入MySQL数据库时的空白数据

时间:2013-01-23 09:41:55

标签: php mysql

我制作了一个表单来插入和修改项目中的类别。 当我点击“提交”时,我会将提交的记录提交到数据库中,但它显示为空! 如果我去数据库字段并自己编写文本,它在MySQL中会显得很好而且“????”在浏览器中!

这是我写的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>

 <?php
$con = mysql_connect("localhost","user","pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('$_POST[name]','$_POST[parent_id]','$_POST[description]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

<form action="ins.php" method="post">
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>

<input type="submit" />
</form>

</body>
</html>

11 个答案:

答案 0 :(得分:2)

你必须在SQL请求中引用(使用“)索引名称,因为$ _POST是一个数组:

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('".$_POST["name"]."','".$_POST["parent_id"]."','".$_POST["description"]."')";

但一般来说,请不要直接信任用户发布到您脚本的内容以避免SQL注入。您可以使用更好更安全的mysqli :: query:

Mysqli

答案 1 :(得分:1)

首先清理您的用户输入。

如果您之后想要使用数组中的值而没有所有连接,则其他人提到在数组访问器周围使用{}。

$sql="INSERT INTO categories (name, parent_id, description)
VALUES
('{$_POST['name']}','{$_POST['parent_id']}','{$_POST['description']}')";

要清理例如$ _POST做这样的事情是一个好的开始。这是我的旧代码。正如其他人写的那样使用mysqli而不是

function clean_array($t_array)
{
    foreach($t_array as $key=>$value)
        $array[$key] = mysql_real_escape_string( trim($value) );

    return $t_array;
}

答案 2 :(得分:0)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>

 <?php
 if ($_POST['action']=="doformpost") {
    //only do DB insert if form is actually posted

    $con = mysql_connect("localhost","user","pass");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("mydb", $con);

    $sql="INSERT INTO categories (name, parent_id,description)
    VALUES
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";


    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    echo "1 record added";

    mysql_close($con)
}
?>

<form action="ins.php" method="post">
<input type="hidden" name="action" id="action" value="doformpost" />
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>

<input type="submit" />
</form>

</body>
</html>

答案 3 :(得分:0)

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
("'.$_POST['name'].'","'.$_POST['parent_id'].'","'.$_POST['description'].'")";

在数据库中插入值时请提供引号

答案 4 :(得分:0)

尝试在语句中使用双引号:

$ sql =“INSERT INTO类别(name,parent_id,description) VALUES ( “ '$ _ POST [ '名称']'。”, “ '[PARENT_ID ']。' $ _ POST'。”,“ '[原文 ']。' $ _ POST'。 ”)“;

答案 5 :(得分:0)

这里有很多问题。

  • $_POST[name]应为$_POST['name']
  • 即使表单未提交,您的查询也会运行。
  • 您正在使用已弃用的mysql_*函数。使用 PDO mysqli
  • 您的代码容易受到 sql注入
  • 的攻击

有了这一切,这就是你需要做的事情。

只是为了验证表单已提交,请使用

if( !empty($_POST['name']) && 
!empty($_POST['parent_id']) && 
!empty($_POST['description']) )

(如果允许空值,请使用isset。)

然后运行查询。


在PDO中,代码将如下所示 - &gt;

<?php
// configuration
$dbtype     = "mysql";
$dbhost             = "localhost";
$dbname     = "mydb";
$dbuser     = "user";
$dbpass     = "pass";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// query
$sql = "INSERT INTO categories (name, parent_id,description)
        VALUES
       (?,?,?)";
$q = $conn->prepare($sql);
$q->execute(array($_POST[name],$_POST[parent_id],$_POST[description]));


?>

这只是一个开始。您可以使用trycatch块来捕获异常。

在运行查询之前,请检查表单是否由!empty()isset()提交,如上所述。

答案 6 :(得分:-1)

将此语句用于您的代码

if( isset($_POST['name']) && isset($_POST['parent_id']) && isset($_POST['description']) )

//your insert query

答案 7 :(得分:-1)

不要忘记安全!

$sql="INSERT INTO categories (name, parent_id,description)
VALUES
('".mysql_real_escape_string($_POST['name'])."','".intval($_POST['parent_id'])."','".mysql_real_escape_string($_POST['description'])."')";

我认为编码存在问题。

在插入数据之前启动查询:

$sql = 'set names `utf-8`'; (for example)

答案 8 :(得分:-1)

使用下面的插入查询来插入数据,我相信它肯定会帮助你。

$sql="INSERT INTO categories (name,parent_id,description)
VALUES
('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";

答案 9 :(得分:-1)

  

试试这个

<?php
if(isset($_POST['submit'])) {
    $con = mysql_connect("localhost","user","pass");
    if (!$con){
      die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("mydb", $con);

    $sql="INSERT INTO categories (name, parent_id,description) VALUES
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')";

    if (!mysql_query($sql,$con)) {
      die('Error: ' . mysql_error());
    } else {
        echo "1 record added";
    }
    mysql_close($con);
}
?>
<html>
<body>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
category: <input type="text" name="name" /><br><br>
parent: <input type="text" name="parent_id" /><br><br>
description: <input type="text" name="description" /><br><br>
<input type="submit"name="submit" value="Submit" />
</form>
</body>
</html>

答案 10 :(得分:-1)

我也遇到了同样的问题。

继续这样的插入查询,这对我有帮助。

$email_id = $_POST['email_id'];
$device_id = $_POST['device_id'];
***For My Sqli***
if(!empty($email_id ))
    {
        $result_insert = mysqli_query($db_conn,"INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') ");

        if(mysqli_affected_rows($db_conn)>0)
        {
            $response["success"] = 1;
            $response["message"] = "Successfully Inserted";
        }
        else
        {
            $response["success"] = 0;
            $response["message"] = "Problem in Inserting";
        }
    }
    else
    {

        $response["success"] = 4;
        $response["message"] = "Email id cannot be Blank";
    }
}
///////////////////////////////////////////////////////////////////////////////
 **For My Sql**
if(!empty($email_id ))
    {
        $result_insert = mysql_query("INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') ");

        if(mysql_affected_rows()>0)
        {
            $response["success"] = 1;
            $response["message"] = "Successfully Inserted";
        }
        else
        {
            $response["success"] = 0;
            $response["message"] = "Problem in Inserting";
        }
    }
    else
    {

        $response["success"] = 4;
        $response["message"] = "Email id cannot be Blank";
    }
}

注意:这里我只检查了电子邮件。