2014-09-05 127 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),您將獲得數據