【问题标题】:Form Submit to PHP表单提交到 PHP
【发布时间】:2014-09-05 14:58:34
【问题描述】:

我正在尝试将 HTML 表单中的数据提交到 PHP 以保存到 mysql 数据库中。我以前做过这个,但由于某种原因它不能工作,我一定是遗漏了一些东西。

这是注册页面

<form action="reg.php" method="POST">
        <table >
            <tr>
                <td>Email :</td>
                <td><input name="Email" type="text" /></td>
            </tr>
            <tr>
                <td>Password :</td>
                <td><input name="Password" type="password" /></td>
            </tr>
            <tr>
                <td> </td>
                <td><input type="submit" name="submit" value="Submit"> </td>
            </tr>


        </table>
    </form>

这是 reg.php

<?php

include_once("db.php");

$SQL = "INSERT INTO  users  (Email, Password  ) VALUES ('".$_GET["Email"]."','". $_GET['Password'] ."' )";     

mysql_query($SQL);
error_reporting(E_ALL);
?>

这是 db.php

<?php

$MyUsername = "root";   
$MyPassword = "";   
$MyHostname = "localhost";      

$dbh = mysql_pconnect($MyHostname , $MyUsername, $MyPassword);
$selected = mysql_select_db("dbName",$dbh);
?>

如果我跑了

localhost/reg.php?Email=email@gmail.com&Password=123456

它确实有效,并且这些值显示在数据库中,我一定是在注册页面中遗漏了一些东西。

作为 PHP 新手,这可能是一个愚蠢的错误。

提前致谢

【问题讨论】:

  • 试试INSERT INTO users (`Email`, `Password` )
  • PLEASE停止使用mysql_*,它是不安全、陈旧、有缺陷、未维护且(因此)弃用延期。学习改用mysqli_*PDO。并使用准备好的语句。这段代码和它得到的一样危险(谷歌注入攻击)。另外:不要使用mysql_pconnect。持久的连接会(如果你还在学习)会咬你
  • 无论如何你需要做一个发布请求,转义值比如`VALUES ('".mysql_real_escape_string($_POST["Email"])."','"`
  • 您正在使用 POST 方法和 $_GET["Email"] 等 = 不匹配。另外,您对 SQL 注入非常开放,而且方式不止一种。我希望这不是一个实时站点,因为不幸的是,您将被黑客入侵。这只是时间问题,真的
  • @Kris.Mitchell 不,你不知道。键由输入元素的名称值生成

标签: php mysql forms


【解决方案1】:

您需要使用 $_POST 而不是 $_GET

.$_GET["Email"]."','". $_GET['Password'] ."' )";     

应该是

.$_POST["Email"]."','". $_POST['Password'] ."' )";

当您输入 URL 时,这是一个 GET 请求,这就是它起作用的原因。您应该真正发布一个表单,因为 GET 将在查询字符串中传输变量,并且是可见的。密码字段在传输时仍然是纯文本。

此外,如前所述,您正在使用已弃用的方法与数据库进行通信,并且您很容易受到 SQL 注入的影响。看看PDOhttp://php.net/manual/en/book.pdo.php


Use mysqli with prepared statements,或PDO with prepared statements

还可以考虑使用CRYPT_BLOWFISH 或PHP 5.5 的password_hash() 函数来存储密码。

对于 PHP password_hash() compatibility pack

以纯文本形式存储看似完成的操作并不安全。

【讨论】:

  • 我选择你的作为答案,因为你指导我使用一种更安全的方法 PDO,我现在已经使用了。前面代码的问题是我有一个打开的表单标签,我复制并粘贴它以从另一个页面获取模板的一部分。 :/ 现在我应该使用准备好的语句。
【解决方案2】:

你的form方法搞错了,改一下

<form action="reg.php" method="POST">

<form action="reg.php" method="GET">

如果您想继续使用 POST 方法,请使用

$SQL = "INSERT INTO  users  (Email, Password  ) VALUES ('".$_POST["Email"]."','". $_POST['Password'] ."' )";

【讨论】:

  • 虽然您在技术上是正确的,但如果 OP 使用 POST 而不是 GET,它实际上会 bit 更安全,考虑到传递一个通过已经不安全的表单/方法输入密码。
  • 不客气。将其作为编辑来概述 OP 的错误。
【解决方案3】:

调试您的代码并检查您将在 reg.php 的 $_POST 中获取数据的错误。 print_r($_POST) 在您的 reg.php 文件上,您将获得数据

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2016-02-04
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多