我试图通过使用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" />
答案 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()
示例:
$username = mysql_real_escape_string($_POST['UserName']);
您也可能希望将strip_tags()
与转义结合使用。