请有人解释我做错了什么,可能还有其他错误。 (首次尝试将PHP与教程结合使用)。本教程未指定表名。 错误是:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第1行'WHERE userName ='''附近
我的代码:
<?php
//MySQL Database Setup
define('DB_HOST', '***');
define('DB_NAME', '***');
$db_table = "emailUser";
define('DB_USER','***');
define('DB_PASSWORD','***');
//Connection
$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());
//Connection Checking
//if (mysqli_connect_errno($con)) {
// echo "Failed to connect to MySQL: " . mysqli_connect_error();
// }
//else {
// echo “Successfully connected to the AllColes webmail database…”;
// }
function webmailNewUser()
{
$userFullName = $_POST['webmailFullName'];
$userName = $_POST['webmailUserName'];
$userExEmail = $_POST['webmailExEmail'];
$userPhone = $_POST['webmailPhone'];
$userDOB = $_POST['userDOB'];
$query = "INSERT INTO $db_table_name (userFullName,userName,userExEmail,userPhone,userDOB) VALUES ('$userFullName','$userName','$userExEmail','$userPhone','$userDOB')";
$data = mysql_query ($query) or die(mysql_error());
if ($data)
{
echo "Your registration for ColesMail is compleated.";
}
else
{
echo "Registration for ColesMail has NOT compleated succesfully!";
}
}
function webmailSignUp()
{
if(!empty($_POST['webmailUserName']))
{
$query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST[user]'") or die(mysql_error()); //checking the same name in the field
if(!$row = mysql_fetch_array($query) or die(mysql_error()))
{
webmailNewUser();
}
else
{
echo "Sorry someone already has this username";
}
}
}
function webmailForgottenPW()
{
//Email Requirements
$webMaster = 'christophercoles@live.co.uk';
$emailSubject = 'Forgotten Password Reset!';
$headers = "From: $webMaster\r\n";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "X-Mailer: PHP/".phpversion();
//Forgotten Password Fields
$fpUserName = $_POST['webmailFPuserName'];
$fpContactMethod = $_POST['webmailFPcontactMethod'];
$fpDOB = $_POST ['webmailFPDOB'];
//Email Body
$body = "
<html>
<head>
<title>Password Reset for $fpUserName</title>
</head>
<body>
<h1>Password Reset</h1><hr>
Name: $fpUserName <br>
Request Password by: $fpContactMethod <br>
Date of Birth: $fpDOB
</body>
</html>";
//After Sending
mail($webMaster,$emailSubject,$body,$headers);
$theResults = "Sucess Email Sent!!!";
echo $theResults;
}
if(isset($_POST['webmailRegisterSubmit']))
{
webmailSignUp();
}
if(isset($_POST['webmailForgottenPWSubmit']))
{
webmailForgottenPassword();
}
?>
答案 0 :(得分:3)
您使用的是$db_table_name
,但您只有 全球 $db_table
变量。
尽管如此,使用所有函数意味着不可以访问该全局变量,将其作为参数传递给函数:
function webmailSignUp($db_table_name)
{//code here
}
然后,当你调用这些函数时:
webmailSignUp($db_table);
会解决这个问题。您可能还想检查是否设置了POST参数(isset($_POST['user'])
)
您还 必须查看注入漏洞,就像我说的那样,较新的教程,它们不使用已弃用的扩展。只需阅读链接到整个网络的问题的各种评论,一些链接处理mysql_*
被弃用,其他链接处理PHP中的变量范围。
您可以通过将错误报告级别设置为E_STRICT | E_ALL
来提前发现此错误(并且您可以获得更好的错误消息),这会触发E_NOTICE
未定义的变量警告。
将ini文件更改为
error_reporting = E_STRICT | E_ALL
display_errors = 1
或者在您的PHP代码中:
error_reporting(-1);
ini_set('display_errors',1);
注意:仅在开发时显示错误, 从不在生产代码中执行此操作 。
无论如何,你这样做的原因是:通知可以帮助你改进你的代码:如果有错误,修复它。如果有通知,付费通知
在这种情况下,你会被告知你的代码试图将一个不存在的变量连接成一个字符串,这是一个比任何 mysql错误消息更有用的消息
答案 1 :(得分:1)
请尝试调试:
echo $_POST['user'];
检查是否返回任何内容。我认为您正在使用空的WHERE语句查看数据库。
或者您可以尝试在数据库中测试您的查询。
echo $query;
答案 2 :(得分:0)
试试这个
mysql_query("SELECT * FROM $db_table_name WHERE userName = '".$_POST['user']."'")
答案 3 :(得分:0)
你有两个不同的$ table
您定义了$db_table = "emailUser";
并使用了$db_table_name
试试这个
$query = mysql_query("SELECT * FROM $db_table
WHERE userName = '".$_POST['user']."'") or die(mysql_error()); //checking the same name
答案 4 :(得分:-1)
第3行,将define('DB_HOST', '***);
更改为define('DB_HOST', '***');
(错过报价)。
我运行了代码(here,注释了连接)并且它不会产生任何错误。我能找到的唯一问题是:
if(!empty($_POST['webmailUserName']))
{
$query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST[user]'") or die(mysql_error()); //checking the same name in the field
您正在检查并在查询中使用其他变量。但是,这不会导致语法错误。
答案 5 :(得分:-2)
你的问题出现是因为你的查询错误只是把双引号“”而不是单个''像这样
$query = mysql_query("SELECT * FROM $db_table_name WHERE
userName = ".$_POST['user']."") or die(mysql_error());
答案 6 :(得分:-4)
你错过了post变量的单引号($ _POST ['user'])
$query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST['user']'") or die(mysql_error());