为什么在插入查询中使用$ _POST之前的引号和点?

时间:2014-12-13 12:20:57

标签: php

例如,我有一个如下所示的html文件:

<html>
  <form action="insert.php" method="post">
    Name:<input type="text" name="txtname" />
    <input type="submit" name="but" value="Submit" />
  </form>
</html>

和下面的php文件:

<?php
  if(isset($_POST['but']))
  {
    mysqli_query($con,"insert into student(Name) values(".$_POST["txtname"].")");
  }
?>

我的问题是,如果我可以写$name=$post['txtname']并在值部分使用$name,那么点 没有使用,但如果我直接写在值的部分,然后使用点,为什么使用这个点?

2 个答案:

答案 0 :(得分:0)

你有两种可能做到这一点......

首先:

mysqli_query($con,"insert into student(Name) values(" . $_POST['txtname'] . ")");
// using single quotes instead of double quotes

第二

mysqli_query($con,"insert into student(Name) values({$_POST['txtname']})");
//dont use any dots but single quotes and simply add it to the string

另外你应该关心内容的一些单引号......

"... values('{$_POST['txtname']}')"

所以它应该是

mysqli_query($con,"insert into student(Name) values('{$_POST['txtname']}')");

正如在评论中指出的那样......你有注射问题并考虑解决这个问题。

你的PHP

<?php 
    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'foobar');

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $stmt = $mysqli->prepare("INSERT INTO students ( Name ) VALUES ( ? )");
    $stmt->bind_param('s', $_POST['txtname']);

    /* execute prepared statement */
    $stmt->execute();

    printf("%d Row inserted.\n", $stmt->affected_rows);

    /* close statement and connection */
    $stmt->close();

    /* close connection */
    $mysqli->close();

?>

答案 1 :(得分:0)

您可以使用带有和不带点的$name,但$ _POST ['something']在索引引用的方式上有所不同。它会破坏你的查询。

$_POST

相关的arrays无关

您也可以像

一样编写它
mysqli_query($con,"insert into student(Name) values('{$_POST['txtname']}')");

另一方面,您不应将表单输入直接插入数据库。 先做一些验证。

相关问题