2012-12-05 67 views
0

我在PHP中有一個「註冊」頁面,我希望腳本在單擊HTML按鈕時運行。PHP/MySQL - 更新數據庫/在按鈕上運行PHP腳本點擊

PHP主要檢查是否所有字段都已填充,檢查密碼和電子郵件確認是否相同並保存到數據庫。

這是代碼:

<?php 
$Name = isset($_POST['Name']); 
$Surname = isset($_POST['Surname']); 

$Username = isset($_POST['Username']); 

$Email = isset($_POST['Email']); 
$C_Email = isset($_POST['C_Email']); 

$Password = isset($_POST['password']); 
$C_Password = isset($_POST['c_password']); 

$SecQ = isset($_POST['SecQ']); 
$SecA = isset($_POST['SecA']); 


$con = mysql_connect('localhost', 'admin', 'storefile1234'); 
mysql_select_db ("storefile"); 

$check_username = mysql_query("SELECT FROM users WHERE username = '$Username'"); 
$check_email = mysql_query("SELECT FROM users WHERE Email = '$Email'"); 


if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

if ($Name == null || $Surname== null || $Username == null || $Password == null || $C_Password == null || $Email == null || $C_Email == null || $SecQ == null || $SecA == null) { 

    echo "Missing details. Please enter all fields."; 


} else { 

    if(mysql_num_rows($check_username) != 0 && mysql_num_rows($check_email) != 0) 
      { 
      echo "Username/Email already exists"; 
      } 
      if ($Email == $C_Email && $Password == $C_Password) { 

       $query = "INSERT INTO users (Username, Name,Surname, Password, Email, SecQ, SecA) VALUES ('NULL', ".$Username."', ".$Name."', ".$Surname."', ".$Password."', ".$SecQ."', ".$SecA."', ".$Email.')"'; 

       mysql_query($query) or die ('Error registering.'); 

       echo "Greetings, ".$Name.", you have been registered. "; 

    } else { 

     echo "Error registering your account. Please try again."; 
      } 

} 


?> 

而且,它建議?

每當我跑這頁Missing details. Please enter all fields.顯示,沒有輸入任何細節。

你是如何做到這一點的?

+3

offtopic:不要使用'mysql_ *'函數。 Beter用**'PDO' **看準備好的陳述。 – Stranger

回答

0

爲。在第一次加載頁面時打印該消息的問題,請使用array_key_exists函數進行測試如果用戶在檢查任何字段是否爲空之前已經提交了某些內容。事情是這樣的:

if (array_key_exists('Name', $_POST) || array_key_exists('Surname', $_POST) || ...) 
    if ($Name == null || $Surname== null || ...) 
     echo "Missing details. Please enter all fields."; 

觀察:你不能使用isset功能,因爲相同的目的,根據PHP文件,它「判斷一個變量設置,而不是NULL

+0

,似乎工作,但是,XAMPP是以某種方式禁止我訪問數據庫,givinig我這個錯誤'訪問禁止!您無權訪問請求的對象。它是讀取保護的或服務器不可讀的。錯誤403'主數據庫,用戶名和密碼對於thr數據庫是正確的。 – Brian

2

您追平由isset($_POST['Username']);和這樣的函數來獲得值...
documentation說:Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

所以檢查true,螺母null。之後逃脫你的POST數據。

你可以這樣做:

$Name = isset($_POST['Name']) ? mysql_real_escape_string($_POST['Name']) : null; 


附:請再說一遍。不要使用mysql_*功能。他們是DEPRECATED
旁觀PDO(或mysqli_*)

+0

這個檢查並不能解決他的問題,因爲他正在重用他在sql語句中指定返回'isset'的變量。 –

+0

@Stranger所以基本上我需要修復'isset()'函數,它會在點擊按鈕時工作? – Brian

+0

@Brian是的。你可以檢查它們是否存在(true | false),但你沒有得到它們的價值。本傑明的答案不夠好,但唯一的問題。 – Stranger

0

您濫用isset

嘗試是這樣的:

$Name = null; 
if (isset($_POST['Name'])) { 
    $Name = $_POST['Name']; 
} 

isset只是爲了檢查是否值被設置

+0

所以你需要爲每個變量使用該函數? – Brian

+0

@布萊恩正確。 – Stranger

+0

並且不要忘記** ESCAPE **發佈數據! – Stranger