mysqli_connect致命错误:要求()(mysqli_connect Fatal Error

2019-10-18 13:04发布

开发用户更改他们的帐户密码非常简单的更新查询页面,但与建立和mysqli连接(或因此它似乎)碰上有点砖墙。 我是新来的这条线的编程,这是我第一次来执行动态查询的尝试,所以希望它的东西,你可以很容易地发现和足够你会这么好心提供一些急需的明智的建议。

这里是有问题的网页: http://www.parochialathleticleague.org/accounts.html

在执行表单的PHP脚本,我是第一次接收只是一个空白屏幕。 我通过我的代码冲刷和所做的一切我能想到的诊断问题。 之后最终加入“还是死亡”的功能将需要的命令,我现在迎接此消息:

警告:需要(1)[function.require]:未能打开流:没有这样的文件或目录>在/home/pal/public_html/accounts.php第10行

致命错误:需要()[function.require]:所需的失败开口 '1'(包含路径= ':在/ usr /本地/ php52 /梨')在/home/pal/public_html/accounts.php第10行

我很为难。 下面是脚本代码:

<?php

// Show errors:
ini_set('display_errors', 1);

// Adjust error reporting:
error_reporting(E_ALL);

// Connect to the database:
require ('../mysqli_connect.php') OR die('Error : ' . mysql_error());

// Validate the school:
if (empty($_POST['school'])) {
    echo "You forgot to enter your school.<br>";
    $validate = 'false';
} else {
    $school = mysqli_real_escape_string($db, trim($_POST['school']));
    $validate = 'true';
}

// Validate the existing password:
if (empty($_POST['pass'])) {
    echo "You forgot to enter your existing password.<br>";
    $validate = 'false';
} else {
    $pass = mysqli_real_escape_string($db, trim($_POST['pass']));
    $validate = 'true';
}

// Validate the new password:
if (empty($_POST['new_pass'])) {
    echo "You forgot to enter your new password.<br>";
    $validate = 'false';
} elseif (empty($_POST['confirm_pass'])) {
    echo "You forgot to confirm your new password.<br>";
    $validate = 'false';
} elseif ($_POST['new_pass'] != $_POST['confirm_pass']) {
    echo "Sorry, your new password was typed incorrectly.<br>";
    $validate = 'false';
} else {
    $new_pass = mysqli_real_escape_string($db, trim($_POST['new_pass']));
    $validate = 'true';
}

// If all conditions are met, process the form:
if ($validate != 'false') {

    // Validate the school/password combination from the database:
    $q = "SELECT school_id FROM user_schools WHERE (school_name='$school' AND pass=SHA1('$pass') )";
    $r = @mysqli_query($db, $q);
    $num = @mysqli_num_rows($r);
    if ($num == 1) {

        // Get the school_id:
        $row = mysqli_fetch_array($r, MYSQLI_NUM);

        // Perform an UPDATE query to modify the password:
        $q = "UPDATE user_schools SET pass=SHA1('$new_pass') WHERE school_id=$row[0]";
        $r = @mysqli_query($db, $q);

        if (mysqli_affected_rows($db) == 1) {
            header("Location: confirm_accounts.html");
        } else {
            echo "Your password could not be changed due to a system error. Apologies for the inconvenience. If this problem continues, please contact us directly.";
        }

    }

}

mysqli_close($db);
exit();

?>

最后,这里是从它的需要(省略帐户值,当然)连接脚本的代码:

<?php

// Set the database access information as constants:
DEFINE ('DB_USER', '***');
DEFINE ('DB_PASSWORD', '***');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', '***');

// Make the connection:
$db = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) OR die ('Could not connect to MySQL: ' .mysqli_connect_error() );

// Set the encoding:
mysqli_set_charset($db, 'utf8');

我一直试图在过去的几个小时,我自己解决这个问题。 谷歌没能解决它。 通过档案看这里没能解决它。

这是我所知道的肯定:

  • ,它的要求脚本,mysqli_connect.php,并在自己的工作。 我测试过它广泛,以确保所有的登录信息是正确的。
  • 该脚本也绝对在我要求它从父目录。 我试着将它移动到公共目录中,并从那里调用它。 同样的错误信息。 试着键入整个文件路径。 同样的信息。
  • 此外,大多数脚本自身工作正常。 当我省略了所有的MySQL线和刚刚离开的基本验证码,其运行没有任何问题,按要求送我到确认页面。 它肯定似乎是使连接有问题。

不知道在哪里何去何从。 任何援助将不胜感激! 提前谢谢了。

编辑:@YourCommonSense - 下面是修改后的脚本,按您的建议。 仍然得到空白屏幕。 我在下面你的建议不正确?

<?php

// Show errors:
ini_set('display_errors', 1);

// Adjust error reporting:
error_reporting(E_ALL);

// Connect to the database:
require ('../mysqli_connect.php');

// Validate the school:
if (empty($_POST['school'])) {
    echo "You forgot to enter your school.<br>";
    $validate = 'false';
} else {
    $school = mysqli_real_escape_string($db, trim($_POST['school']));
    $validate = 'true';
}

// Validate the existing password:
if (empty($_POST['pass'])) {
    echo "You forgot to enter your existing password.<br>";
    $validate = 'false';
} else {
    $pass = mysqli_real_escape_string($db, trim($_POST['pass']));
    $validate = 'true';
}

// Validate the new password:
if (empty($_POST['new_pass'])) {
    echo "You forgot to enter your new password.<br>";
    $validate = 'false';
} elseif (empty($_POST['confirm_pass'])) {
    echo "You forgot to confirm your new password.<br>";
    $validate = 'false';
} elseif ($_POST['new_pass'] != $_POST['confirm_pass']) {
    echo "Sorry, your new password was typed incorrectly.<br>";
    $validate = 'false';
} else {
    $new_pass = mysqli_real_escape_string($db, trim($_POST['new_pass']));
    $validate = 'true';
}

// If all conditions are met, process the form:
if ($validate != 'false') {

    // Validate the school/password combination from the database:
    $q = "SELECT school_id FROM user_schools WHERE (school_name='$school' AND pass=SHA1('$pass') )";
    $r = mysqli_query($db, $q);
    if (!$r) {
    throw new Exception($mysqli->error." [$query]");
    }
    $num = mysqli_num_rows($r);
    if ($num == 1) {

        // Get the school_id:
        $row = mysqli_fetch_array($r, MYSQLI_NUM);

        // Perform an UPDATE query to modify the password:
        $q = "UPDATE user_schools SET pass=SHA1('$new_pass') WHERE school_id=$row[0]";
        $r = mysqli_query($db, $q);
        if (!$r) {
        throw new Exception($mysqli->error." [$query]");
        }

        if (mysqli_affected_rows($db) == 1) {
            header("Location: confirm_accounts.html");
        } else {
            echo "Your password could not be changed due to a system error. Apologies for the inconvenience. If this problem continues, please contact us directly.";
        }

    }

}

mysqli_close($db);
exit();

?>

Answer 1:

两个最大的问题与您的代码和您的“解决方案”:

  1. 你有@运营商所有的地方。 您已-1票你的问题。 @运算符邪恶本身。 IT负责你看到空白页。
  2. 然而,补救您选择所做的事情变得更糟。 这种“还是死亡”的事情是不是魔术呗解决任何错误报告的问题。 而使用不当就会造成像一个你有错误 。 您拥有1错误消息。

首先,你包括都是正确的,所以,不要管它。

虽然摆脱mysqli的错误,请按照以下说明:

相反,加入“或死”的随机,你需要更强大的和有用的错误报告的解决方案。

如果您正在使用mysqli_query()在整个应用程序代码,而封装成一些辅助类, trigger_error()是提高PHP错误的好方法,因为它会告诉你同样的文件,并在发生错误的行号

$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");

在所有的脚本
从那以后,您将会收到通知的原因,为什么不创建对象。 (如果你很好奇这个or语法, 我在这里解释它 -这也解释了为什么你有(1)错误消息)

不过 ,如果你是封装查询到某个类,文件和行从触发错误将是相当无用的,因为他们将指向调用本身,而不是造成了一定的问题,在应用程序代码。 因此,在运行的mysqli命令时封装,另一种方式,必须使用:

$result = $mysqli->query($sql);
if (!$result) {
    throw new Exception($mysqli->error." [$query]");
}

作为例外将为您提供一个堆栈跟踪 ,这将导致你从一个错误的查询被称为的地方。

需要注意的是,你必须能够看到一般的PHP错误。 您所窥视错误日志直播网站,所以,设置必须是

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

而本地开发服务器上它,使屏幕上的错误,所有的权利:

error_reporting(E_ALL);
ini_set('display_errors',1);

当然,你永远也不会使用错误抑制操作符(@)在你的语句前面。



文章来源: mysqli_connect Fatal Error: require()