2012-12-05 55 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