我有一个名为User.class.php的类文件,在这个类中我有这段代码:
<?php
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/mysite/generic.php');
?>
我有另一个名为signup.php的文件,我需要使用三个类,所以我的代码看起来像这样:
<?php
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/mysite/classes/dbhandler.class.php');
require_once(__ROOT__.'/mysite/classes/User.class.php');
require_once(__ROOT__.'/mysite/includes/password_hash.php');
?>
每次运行signup.php时都会收到此错误:
Constant __ROOT__ already defined in signup.php
我尝试过类似的东西,但这也会产生同样的错误:
<?php
if(!defined('__ROOT__')) {
define('__ROOT__', dirname(dirname(__FILE__)));
}
?>
signup.php会产生错误,但会执行SQL插入查询。我有另一个名为sign_2.php的文件,它必须执行SQL UPDATE查询,当我执行它时也会产生相同的错误,但它不会执行UPDATE查询。它运行代码(不抛出PDOException),但查询不会影响单行(并且查询在PhpMyAdmin SQL控制台中可以正常工作)。
我不明白问题出在哪里。由于常量错误,signup_2.php中的UPDATE查询是否不起作用,还是其他?执行signup.php时也会出现相同的错误,并且该代码确实完美地执行了INSERT查询。
这是signup_2.php中的UPDATE查询:
$username = $_POST['username'];
$user_ip = $user->get_ip();
$activation_token = $_GET['token'];
// Date time to be used instead of SQL's NOW() function for security purposes
$datetime = date("Y-m-d H:i:s");
try {
$sql = "UPDATE user
SET username=:username,
activation_token=:activation_token,
activation_date_time=:activation_date_time,
activation_status=:activation_status
WHERE activation_token=:current_activation_token";
$stmt = $dbh->get_instance()->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':activation_token', $empty_activation_token, PDO::PARAM_STR);
$stmt->bindParam(':activation_date_time', $datetime, PDO::PARAM_STR);
$stmt->bindParam(':activation_status', $active_status, PDO::PARAM_STR);
$stmt->bindParam(':current_activation_token', $activation_token, PDO::PARAM_STR);
$stmt->execute();
echo 'Username: ' . $username . '<br />';
echo 'Activation token: ' . $empty_activation_token . '<br />';
echo 'Activation date time: ' . $datetime . '<br />';
echo 'Activation status: ' . $active_status . '<br />';
echo 'Current activation token: ' . $activation_token . '<br />';
}
catch(PDOException $e) {
echo $e;
}
try块中的所有echo都被执行,并且没有抛出异常,但查询似乎没有做任何事情。我已经仔细检查了所有的值,并且在PhpMyAdmin中执行时它可以正常工作。
那么这里发生了什么?我无法找到执行简单UPDATE查询的问题。
在signup.php和signup_2.php中删除常量会产生以下错误:
Use of undefined constant __ROOT__ - assumed '__ROOT__' in signup.php...
我已经尝试了所有我知道的事情。
答案 0 :(得分:4)
您的User.class.php类已经有
define('__ROOT__', dirname(dirname(__FILE__)));
从signup.php中删除它,因为您正在导入User.class.php并且define是一种常量值,一旦设置就无法更改。
其他修复 创建新文件调用Constants.php
define('__ROOT__', dirname(dirname(__FILE__)));
现在是每个文件的顶部
include_once 'Constants.php';
答案 1 :(得分:1)
从User.class.php中删除define('__ROOT__')
,在您需要User类之前执行此操作,并且该类再次定义它以便您已经定义了错误