-2

我正在尝试使用 xampp 在 php 中创建一个注册页面,但我遇到了问题。当我运行我的 php 文件时,它给出了以下错误:

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

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

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

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

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

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

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

我的 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

4 回答 4

0

在:

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

更改name="fname"name="UserName"
对其他字段执行相同操作。

$_POST使用name属性,而不是ID.


您必须检查您的$_POST变量是否使用isset()or设置empty()

示例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.");

您应该想到的另一件事是,在 SQL 查询中使用字符串之前,您应该转义字符串,方法是使用mysql_real_escape_string()

例子:

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

您可能还想将strip_tags()与转义结合使用。

于 2012-07-17T12:03:01.897 回答
0

嗯,好像

a)您的$_POST超全局是空的(或者至少不包含您认为的内容)。这是在这种情况下首先要怀疑的事情。跑print_r($_POST)过去看看里面有什么。

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

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

于 2012-07-17T11:23:08.157 回答
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
}
于 2012-07-17T11:25:01.377 回答
0

签入表单操作是此页面的页面,如果

该页面中输入标签的名称属性与您在此处尝试检索的相同。

喜欢

    <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']);
 }
于 2012-07-17T11:41:32.663 回答