2017-03-24 24 views
0

我在同一頁面上有一個登錄和註冊表單,我使用jQuery隱藏,因此一次只有一個表單處於活動狀態。當我註冊表單處於活動狀態時,請填寫電子郵件字段,其中包含與我的PHP if-statement不匹配的電子郵件,然後按提交,頁面將刷新並激活登錄表單。無法讓Ajax以我想要的方式使用PHP

我想讓頁面執行的是運行PHP腳本,當PHP if語句失敗時,它將阻止刷新頁面,然後打印位於PHP else語句中的消息。

的代碼看起來是這樣的:

PHP:

if(isset($_POST['register'])) { 
    $email = strip_tags($_POST['email']); 
    $password = strip_tags($_POST['password']); 
    $request = $_POST['request']; 

    $email = $DBcon->real_escape_string($email); 
    $password = $DBcon->real_escape_string($password); 

    $email = $_POST['email']; 
    $password = $_POST['password']; 

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); 
    $check_email = $DBcon->query("SELECT email FROM members WHERE email='$email'"); 
    $count = $check_email->num_rows; 

    if ($count==0) { 
     if (preg_match('/^[a-z]{6}+[0-9]{2}[email protected]+$/i', $email)) { 
      $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')"; 
      $result = $DBcon->query($query); 
      header("Location: home.php"); 
      die(); 
     } else { 
      echo "You must provide a valid student email!"; 
     } 
    } else{ 
     echo "Email already taken!"; 
    } 
} 
$DBcon->close(); 

的jQuery:

$(document).ready(function() { 

var request = $(this).serialize(); 
$("#registerform").on('submit', function (event) { 
    event.preventDefault(); 

    $.ajax({ 
    type: 'POST', 
    url: 'registration.php', 
    data: request, 
    success: function(){ 
     $(this).submit(); 
     console.log("test"); 
    }, 
    error: function() { 
     event.preventDefault(); 
    alert("fail"); 
    } 
    }); 

    }); 
}); 
+4

將'var request = $(this).serialize();'放入提交函數中。 – DrKey

+0

我試過這個,但是我得到這個錯誤:「未定義的索引:request in ....」引用我的「$ request = $ _POST ['request'];」在我的PHP。當我運行「print_r($ _ POST);」請求的值實際上正在打印.. – Kristoffer

回答

0

林假設你的代碼運行正常,並且您在JavaScript中正常地接收到的數據通過後,然後只有這些改變才能完成。

if ($count==0) { 
     if (preg_match('/^[a-z]{6}+[0-9]{2}[email protected]+$/i', $email)) { 
      $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')"; 
      $result = $DBcon->query($query); 

    if ($result){ 
     header("Location: home.php"); 
     } 
    else{ 
      die("Some error"); 
    } 
      die(); 
     } else { 
      die("You must provide a valid student email!"); 
     } 
    } else{ 
     die("Email already taken!"); 
    } 
+0

現在我不斷收到「未定義的索引:請求....」引用我的「$ request = $ _POST ['request'];」在我的PHP。當我運行「print_r($ _ POST);」請求的值實際上正在打印。 – Kristoffer

+0

檢查您是否已將表單中的關鍵字名稱用作'請求'。只有當您沒有$ _POST [variable]的值時纔會顯示此錯誤;所以檢查可變部分。另外檢查它是否正確傳遞給php。 –

+0

當我將要被序列化的對象從「this」更改爲實際的表單ID「#registerform」時,它部分起作用,它不會從PHP中的else語句(「您必須提供有效的學生電子郵件」)打印出來。但是,然後,在Ajax的錯誤部分,我得到警報可以工作,但不是防止默認設置。任何提示? – Kristoffer

相關問題