我对PHP非常陌生,而且我遇到了一个无法解决的问题。我正在尝试创建一个向数据库添加新行的页面。我一直收到一个错误,说我无法重新声明currentSessionData.php中定义的checkIfAdminExists函数(可能会重命名)
我怀疑这个问题与我将标题位置设置为当前页面(create_admin.php)以通过POST处理表单数据这一事实有关,然后当页面加载它时#39 ; s试图重新声明该功能。我已经尝试将文件包含在
中if(!function_exists(' checkIfAdminExists')),
但我仍然得到同样的错误。我究竟做错了什么?有没有更好的方法来处理使用函数处理表单数据?
create_admin.php
<?php
require_once('currentSessionData.php');
if (isset($_POST['newUsername']) && isset($_POST['newPassword'])) {
if (checkIfAdminExists($_POST['username'], $_POST['password'])) {
// admin account already exists
echo '<script language="javascript">';
echo 'alert("This admin account already exists");';
echo '</script>';
header('Location: create_admin.php');
}
else {
//create new admin account in database
$username = $_POST['newUsername'];
$password = $_POST['newPassword'];
$username = mysql_real_escape_string($username);
$username = mysql_real_escape_string($password);
$sqlQuery = "INSERT INTO table_test (username, password)
VALUES ('$username', '$password')";
}
}
?>
currentSessionData.php
<?php
function checkIfAdminExists($username, $password) {
require_once("db_connection.php");
$sql = "SELECT personid, username, password FROM table_test";
$result = $dbcon->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if ($row["username"] == $username && $row["password"] ==
$password) {
return true;
}
}
}
else {
return false;
}
$dbcon->close();
}
?>
答案 0 :(得分:0)
根据您的评论,您将function_exists
支票放在错误的位置,将代码更改为以下内容:
if (!function_exists('checkIfAdminExists'))
{
function checkIfAdminExists($username, $password) {
require_once("db_connection.php");
$sql = "SELECT personid, username, password FROM table_test";
$result = $dbcon->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if ($row["username"] == $username && $row["password"] == $password) {
return true;
}
}
} else {
return false;
}
$dbcon->close();
}
}
现在,使用上面的代码,只有在函数不存在的情况下才会定义该函数。
注意:请停止使用mysql_*
,因为它已在PHP 7中正式弃用并删除。最好开始学习mysqli_*
或PDO并使用prepared statements。
更新#1
您正在设置两次用户名变量:
$username = mysql_real_escape_string($username);
$username = mysql_real_escape_string($password);
应该是:
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
更新#2
根据mysql_real_escape_string
的文档,它需要一个可选的第二个参数:
MySQL连接。如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成E_WARNING级别错误。
考虑到上述情况,这意味着您的连接尚未建立。因此,下一个合乎逻辑的问题是:您的联系在create_admin.php
?