2014-05-25 56 views
0

保持在同一頁面上,此時我的表單鏈接到一個新頁面,其中包含我的所有php代碼。我希望所有代碼能夠在本教程中在同一頁面上執行:http://www.w3schools.com/php/php_form_url_email.aspHTML FORM + PHP:表單操作與登錄

我很難理解本教程如何管理它。我想也許有可能將我的add.php代碼存儲在一個函數中,然後用表單動作調用它。這可能嗎?如果不是,最好的辦法是什麼呢?

這裏是我的表單代碼:

<form action="add.php" method="post"> 

    <p> 
      Username: <input type="text" name="Username"><br> 
      Email: <input type="text" name="Email"><br> 
      Password: <input type="password" name="Password"><br> 
      Confirm Password: <input type="password" name="ConfirmPass"> 
    </p> 

    <p> 
      <input type="submit"> 
    </p> 

</form> 

,這裏是我的add.php頁面:

<?php 

$Username = $_POST['Username']; 
$Password = $_POST['Password']; 
$Email = $_POST['Email']; 
$ConfirmPass = $_POST['ConfirmPass']; 
$safeUsername = SQLite3::escapeString($Username); 
$safePassword = SQLite3::escapeString($Password); 
$safeEmail = SQLite3::escapeString($Email); 
$safeConfirmPass = SQLite3::escapeString($ConfirmPass); 
$hostName = explode('@', $Email); 


$database = new PDO('sqlite:maindb.db'); 

$sql = "SELECT * FROM users WHERE Username = ?"; 
$result = $database->prepare($sql); 
$result->bindParam(1, $safeUsername); 
$result->execute(); 



    if($result->fetch()) { 
      echo "Username " . $safeUsername . " already exists"; 
    } 
    else { 
       if (filter_var($safeEmail, FILTER_VALIDATE_EMAIL) && checkdnsrr($hostName[1]) && !empty($safeEmail)) { 
        if (preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$safeEmail)) { 
         if (!empty($safeUsername) && (preg_match("/^[a-zA-Z ]*$/",$safeUsername)) && !empty($safeUsername)) { 

          if ($safePassword == $safeConfirmPass && !empty($safePassword)) { 
           echo $Username . " was successfully added to the database."; 
           $stm = "INSERT INTO users(Username, Password, Email) VALUES(?,?,?)"; 
           $stmt = $database->prepare($stm); 
           $stmt->bindParam(1, $safeUsername); 
           $stmt->bindParam(2, $safePassword); 
           $stmt->bindParam(3, $safeEmail); 
           $stmt->execute(); 

           $database = null; 
          } 
          else {echo "Passwords do not match"; } 

         } 
         else {echo "Invalid Username.";} 
        } 
        else {echo "Invalid e-mail address.";} 
       } 
       else {echo "Invalid e-mail address.";} 
     } 



?> 

感謝您的幫助!我很感激。

+1

請停止使用w3schools.com,它有危險的壞建議 –

+0

http://www.w3fools.com – Terry

回答

0

在教程中,您鏈接他們使用

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    //your stuff here 
    //save your form values etc. 
} 

,以檢查是否出現了一個帖子到你的頁面(這可以是任何頁面,這樣也同樣頁)。基本上這將檢查POST請求是否已發送到此頁面。如果你使用一個後處理方法,這將會是什麼。

作爲一個額外的測試,他們也把這樣的東西

if (empty($_POST["name"])) { 
    //name is empty print error! 
} 

檢查,如果一個字段爲空。 你現在要做的就是將你的動作改爲同一頁面。

+0

真棒這工作,謝謝。另外,當用戶刷新頁面時,您有可能知道如何重置錯誤消息變量或所有變量? – user3671613

+0

哪個錯誤消息變量你在說什麼?你能舉個例子嗎? –

+0

與上面相同的代碼,但我更改{echo「Invalid blablabla」} else else $ $ message =「無效的電子郵件地址」;} – user3671613