2013-06-29 55 views
0

我轉而使用PDO,這個開發網站已經有數十頁的成功,而且這個應該是一個「快速」的形式 - 應該只需要大約十分鐘。但是我正在開始第二個週末,試圖弄清楚爲什麼它不起作用。我知道以下幾點是不安全的 - 我已經將它剝離了骨頭,試圖找出爲什麼它不會處理。以下內容只是重新加載帶有空白字段的表單頁面。我沒有收到任何錯誤,錯誤日誌沒有顯示任何內容,也從來沒有到達處理表單的地步 - 例如,輸入兩個不同的密碼不會顯示爲錯誤,回顯變量不顯示。看來它甚至沒有獲得到「如果(isset」點 - 我想不通爲什麼爲什麼這不會形成過程?

<?php 
try { 
    $con = new PDO('mysql:host=localhost;dbname=database', $user, $pass); 
} catch (PDOException $e) { 
    echo "Connection failed: " . $e -> getMessage(); 
} 
if (isset($_POST['submit'])) { 
    $email = $_POST['email']; 
    $username = $_POST['username']; 
    $pass1 = $_POST['pass1']; 
    $pass2 = $_POST['pass2']; 

    if ($pass1 != $pass2) { 
     die ("ERROR: Hey! The passwords don't match!"); 
    } 

    $stmt = $con -> prepare (" 
     INSERT INTO proj_users 
      (email, username, password) 
     VALUES 
      (?, ?, ?) 
    "); 
    $stmt -> bindParam(1,$email); 
    $stmt -> bindParam(2,$username); 
    $stmt -> bindParam(3,$pass1); 
    $stmt -> execute(); 

    header('Location: /index.php'); 
} else { 
?> 
<form action='<?php echo $_SERVER['SCRIPT_NAME']; ?>' method='post'> 
    <table> 
     <tr> 
      <td class='label'>Email: </td> 
      <td><input type='text' name='email' /></td> 
     </tr> 
     <tr> 
      <td class='label'>Username: </td> 
      <td><input type='text' name='username' maxlength='30' /></td> 
     </tr> 
     <tr> 
      <td class='label'>Password: </td> 
      <td><input type='password' name='pass1' /></td> 
     </tr> 
     <tr> 
      <td class='label'>Password Again: </td> 
      <td><input type='password' name='pass2' /></td> 
     </tr> 
     <tr> 
      <td class='label alignright' colspan='2'><input type='submit' value='Register' /></td> 
     </tr> 
    </table> 
</form> 
<?php 
} 
?> 

更新:當我經過和更新更多的我的形式,我碰上同樣的問題 - 沒有「名稱」屬性,但他們一直在努力,然後纔開始搞亂他們。沒有花太多時間去弄清楚,這是因爲我正在重寫表格,並且在這個過程中將它們從「!isset」 到 「isset」 - 等等,當然,沒有 「的名字,」 他們從來都是

+0

如果您打算將此代碼用於練習以外的其他任何*請*不要以純文本格式在數據庫中存儲密碼。至少他們應該使用php的'crypt()'函數進行哈希處理。 –

+1

謝謝你,壞狼 - 我把它拿出來,直到我可以讓表格工作。現在,我正在把它放回去。:-) – Ellsinore

回答

3
<input type='submit' value='Register' /> 

應該是

<input name='submit' type='submit' value='Register' /> 

您忘記爲您的提交按鈕設置name

+0

明確的「唔」時刻 - 但它仍然不起作用。 :-( – Ellsinore

+0

OK,step by step。if(isset($ _ POST ['submit'])){die('im here!');'它是否在表單提交後顯示'im here' –

+0

smhnaji - YES!「im here」正在顯示!YAY!:-D – Ellsinore

3

你必須設置一個name屬性提交按鈕,我認爲

變化

<input type='submit' value='Register' /> 

<input type='submit' name='submit' value='Register' /> 
1

你錯過了名字:

<input type='submit' name='submit' value='Register' /> 
0

你是調用$ _POST ['submit'],這個h不在您的查詢字符串中。 按答案將姓名添加到提交按鈕。

<input type='submit' name='submit' value='Register' />