php注册系统错误

时间:2012-07-17 11:19:11

标签: phpmyadmin xampp registration php

我试图通过使用xampp在php中创建一个注册页面,但我有一个问题。当我运行我的php文件时,它会出现以下错误:

  

注意:未定义索引:C:\ xampp \ htdocs \ register.php中的UserName   第3行

     

注意:未定义索引:C:\ xampp \ htdocs \ register.php中的UserSurname   第4行

     

注意:未定义索引:C:\ xampp \ htdocs \ register.php中的UserMail   第5行

     

注意:未定义的索引:C:\ xampp \ htdocs \ register.php中的UserPassword   在第6行

     

注意:未定义的索引:C:\ xampp \ htdocs \ register.php中的UserTel   第7行

     

警告:require(class.phpmailer.php)[function.require]:失败   open stream:C:\ xampp \ htdocs \ register.php中没有这样的文件或目录   第24行

     

致命错误:require()[function.require]:需要打开失败   'class.phpmailer.php'(include_path ='。; C:\ xampp \ php \ PEAR')in   第24行的C:\ xampp \ htdocs \ register.php

我的php文件,register.php:

  <?php
$username=$_POST['UserName'];
$usersurname=$_POST['UserSurname'];
$usermail=$_POST['UserMail'];
$userpass=$_POST['UserPassword'];
$usertelephone=$_POST['UserTel']; 
    $con = mysql_connect("localhost","root","rockenpeace");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("dbe", $con);

mysql_query("INSERT INTO user (UserName,UserSurname,UserMail, UserPassword, UserTel) 
        VALUES('$username','$usersurname','$usermail','$userpass','$usertelephone')");

mysql_close($con);

try
{
    require("class.phpmailer.php");
    $mail = new PHPMailer();   
    $mail->IsSMTP();
    $mail->Mailer = "smtp";
    $mail->Host = "ssl://smtp.gmail.com";
    $mail->Port = 465;
    $mail->SMTPAuth = true;
    $mail->CharSet="utf-8";
    $mail->Username = "user@gmail.com";
    $mail->Password = "password";
    $mail->From     = "user@gmail.com";
    $mail->FromName="DBE Yazılım";
    $mail->AddAddress($_POST['usermail']); 
    $mail->Subject  = "Registration Information";
    $mail->Body     = "Hello your password is " . $userpass;
    //$mail->AddAttachment($path);
    $mail->Send();
    echo 'Message has been sent.';  
}
catch(Exception $e)
{
    echo 'hata'.$e->getMessage();
}
header("location:confirmation.php"); ?>

并在我的html页面中:

<input type="text" name="UserMail" id="UserMail" size="30" />   
<input type="text" name="UserName" id="UserName" size="30" />   
<input type="text" name="UserSurname" id="UserSurname" size="30" /> 
<input type="text" name="UserTel" id="UserTel" size="30" /> 
<input type="password" name="UserPassword" id="UserPassword" size="30" />

4 个答案:

答案 0 :(得分:0)

好吧,好像是

a)您的$_POST超级全球空(或者至少不包含您认为它的内容)。在这种情况下,这是首先要怀疑的事情。运行print_r($_POST)以查看其中的内容。

假设 POST / GET vars正在进入是绝对不安全的。通过isset()检查这一点,并检查它们是否包含您认为应该的内容。简而言之,我们正在谈论验证。

b)听起来你的包含的路径是错误的。同样,这很容易检查。运行echo file_exists('path/to/include') - 如果您没有看到1,则路径错误

答案 1 :(得分:0)

使用isset验证$ _POST数组中是否存在密钥。

对于您的失败包含,这意味着该文件不在get_include_path中,因此您可以使用set_include_path进行设置(注意这可能会影响您的其他相对包含),或者您可以使用absolute path

最后,在输入变量上使用mysql_real_escape_string,否则您很容易受到SQL injection的攻击。

<强>示例

if (!isset($_POST['userName'], $_POST['key2'], .....)) {
   // handle this error, you don't have the correct inputs
} else {

   // Validate inputs

   // Escape inputs prior to inserting into database
   $username = mysql_real_escape_string($_POST['userName']);
   ...
   ...

   // Your queries
}

答案 2 :(得分:0)

如果

,请在页面中检查其表单操作是否为此页面

该页面中输入标签的name属性与您在此处检索的内容相同。

像                       

    <input type='submit' name='submit' value='register' />
</form> 

在register.php中

if(isset($_POST['submit']))
{
   // value in quotes should be same as name attribute in input tag
    $username=$_POST["username"] 
    ..
}

- 更新

<form method ='post' action='register.php' >
    <input type="text" name="UserMail" id="UserMail" size="30" />   
    <input type="text" name="fname" id="UserName" size="30" />  
    <input type="text" name="lname" id="UserSurname" size="30" />   
    <input type="text" name="telephone" id="UserTel" size="30" />   
    <input type="password" name="userPassword" id="UserPassword" size="30" />
     </form

并在注册页面

if(isset($_POST['UserMail']))
{
   $mail =mysql_real_escape_strings($_POST['UserMail']);
 }
if(isset($_POST['fname']))
{
   $mail =mysql_real_escape_strings($_POST['fname']);
 }
 if(isset($_POST['lname']))
 {
   $mail =mysql_real_escape_strings($_POST['lname']);
 }

答案 3 :(得分:0)

在:

<input type="text" name="fname" id="UserName" size="30" /> 

name="fname"更改为name="UserName" 对其他领域也这样做。

$_POST使用name attribude,而不是ID


您必须使用isset()empty()检查是否设置了$_POST个变量。

isset() 的示例:

if(isset($_POST['UserName'])) $username = $_POST['UserName'];
else die("Username variable is not set.");

empty() 的示例:

if(!empty($_POST['UserName'])) $username = $_POST['UserName'];
else die("Username variable is empty.");

您应该想到的另一件事是,您应该在使用mysql_real_escape_string()

在SQL查询中使用它之前转义字符串

示例:

$username = mysql_real_escape_string($_POST['UserName']);

您也可能希望将strip_tags()与转义结合使用。