将表单输入保存到php变量?

时间:2015-09-29 11:40:20

标签: php sql forms variables

我正在编写一个PHP脚本来获取变量的内容并将其插入到我的MYSQL数据库中,当我定义值时它很有效,但是使用变量只会产生错误,可以任何人告诉我将表单输入保存到变量的正确方法。 (表单与sql脚本在同一个文件中,不包括登录,因此使用$_POST不起作用)

mysqli_query($connect,"INSERT INTO news (news)
VALUES ('$email')");
if(mysqli_affected_rows($connect) > 0){
echo $good;
else
echo $bad
 }

形式:

  <div class="row">
   <form class="col s12">
  <div class="row">
    <div class="input-field col s6">
      <input placeholder="Placeholder" id="email" type="text"      
      <label for="news">news</label>
    </div>

2 个答案:

答案 0 :(得分:0)

为您的输入命名

<input placeholder="Placeholder" id="email" name="email" type="text">

并使用

获取php中的值
$email = $_REQUEST['email']; //to get both GET and POST methods.

然后在查询中使用$ email

答案 1 :(得分:0)

您要求该脚本存在很多问题。让我们来看看所有这些:

1)设置表单属性
告诉浏览器如何将表单数据发送到您的服务器非常重要。否则你最终将不得不依赖超级全球$_REQUEST。正如官方PHP网站引用的那样:

  

$ _REQUEST中的变量通过GET提供给脚本,   POST和COOKIE输入机制因此可以修改   远程用户和不可信任

因此,您应该将method属性添加到表单中。您可能还想添加字符编码,以确保当有人使用非utf-8字符时您的脚本不会混淆:

<form method="POST" action="" accept-charset="utf-8">

2)访问POST数据的方法
为了能够实际使用POST数据,您需要一种方法来访问它。这是name属性发挥作用的地方:

<input placeholder="Placeholder" id="email" type="text" name="email" />

超级全球$_POST现在可以使用name属性值作为关键字来访问该输入字段的值:$_POST['email']。这仅在表单发送后才有效。

3)提交表单
您不能神奇地希望您的服务器能够让您的网站访问者填写所有表单数据。您需要先提交:

<input type="submit" value="Register email" />

这将成为包含您在value属性中设置的文字的按钮。当访问者点击它时,您的表单数据将提交给您的服务器。

所以你的整个表格应该是这样的:

<form method="POST" action="" accept-charset="utf-8">
    <input placeholder="Placeholder" id="email" type="text" name="email" />
    <input type="submit" value="Register email" />
</form>

4)设置PHP
在我们开始使用POST数据之前,我们需要确保用户向我们提供数据:

if(isset($_POST['email']) && !empty($_POST['email'])){
    //...
}

这将验证$_POST['email']是否存在,并确保它不为空。

5)安全处理用户数据:准备好的陈述
作为开发人员学习的第一件事就是永远不会信任用户数据。将数据输入到用户提交的数据库中而不进行验证,这就要求很多麻烦。特别是SQL Injection

使用MySQLi Prepared Statements,您可以保护自己免受此攻击:

//$link will be the connection to your database
//For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name");
if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) {
    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "s", $_POST['email']);

    /* execute query */
    mysqli_stmt_execute($stmt);

    /* close statement */
    mysqli_stmt_close($stmt);

    /* print success message */
    echo "Email successfull registered!";
} else {
    /* print errors */
    printf("MySQL Error: %s\n", mysqli_error($link));
}

将所有内容整合在一起:

<?php

if(isset($_POST['email']) && !empty($_POST['email'])){
    //$link will be the connection to your database
    //For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name");
    if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) {
        /* bind parameters for markers */
        mysqli_stmt_bind_param($stmt, "s", $_POST['email']);

        /* execute query */
        mysqli_stmt_execute($stmt);

        /* close statement */
        mysqli_stmt_close($stmt);

        /* print success message */
        echo "Email successfull registered!";
    } else {
        /* print errors */
        printf("MySQL Error: %s\n", mysqli_error($link));
    }
}

?>

<!-- Your HTML here -->
<div class="row">
    <form class="col s12" method="POST" action="" accept-charset="utf-8">
        <div class="row">
            <div class="input-field col s6">
                <input placeholder="Placeholder" id="email" type="text" name="email" />
                <input type="submit" value="Register email" />
            </div>
        </div>
    </form>
</div>
<!-- Your HTML here -->