2014-09-05 90 views
0

我想提交数据从HTML表单到PHP被保存到MySQL数据库。我以前做过这个,出于某种原因它不能工作,我一定会错过一些东西。表单提交到PHP

这是注册

<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/[email protected] &密码= 123456

它的工作和这些值在数据库中显示,我必须失去在注册页面的东西。

这可能是一个愚蠢的错误,因为我是新来的PHP。

在此先感谢

+0

尝试'INSERT INTO users(\'Email \',\'Password \')' – Sunand 2014-09-05 14:59:53

+4

请***请停止使用' mysql_ *'是一个不安全,旧的,有缺陷的,无法维护的(因此)_deprecated_扩展。学习使用'mysqli_ *'或'PDO'代替。并使用_prepared语句_。此代码与其获得的(Google注入攻击)一样危险。另外:不要使用'mysql_pconnect'。永久连接可以(如果你还在学习)会咬你 – 2014-09-05 14:59:59

+0

无论如何,你需要做一个post请求,像'VALUES('。“.mysql_real_escape_string($ _ POST [”Email“])。”'','“ ' – Sunand 2014-09-05 15:02:14

回答

2

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

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

应该

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

当您键入的URL,这是一个GET请求这就是它工作的原因。你应该真的发布一个表单,因为GET会传输查询字符串中的变量,并且可见。密码字段在传输时仍然是纯文本。另外,如前所述,您正在使用不建议使用的方法来与数据库进行交谈,并且您很容易发生SQL注入。看看PDO http://php.net/manual/en/book.pdo.php


Use mysqli with prepared statements,或者PDO with prepared statements

还要考虑使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能密码存储。对于PHP < 5.5使用password_hash() compatibility pack

存储似乎在纯文本中完成的操作并不安全。

+0

我选择你作为答案,因为你指导我采用更安全的方法PDO,即我现在已经使用了。前面的代码的问题是我有一个打开的表单标记,我复制并粘贴来从另一个页面获取模板的一部分。 :/现在我应该用准备好的陈述来做。 – drinu16 2014-09-05 15:38:40

1

你让与形式方法的错误,改变

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

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

如果你想继续使用POST方法使用

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

尽管你的技术*正确,但如果OP使用POST而不是GET,考虑到已经通过已经不安全的表单/方法传递密码,它实际上会更安全。 – 2014-09-05 15:16:09

+1

是啊!谢谢,我会编辑它 – 2014-09-05 15:17:33

+0

不客气。把它作为一个编辑来概述OP的错误。 – 2014-09-05 15:18:05

0

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