PHP无法重新声明以前定义的函数?

时间:2018-06-05 03:30:52

标签: php sql web

我对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();
}

?>

1 个答案:

答案 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

中建立的位置