0

以下のコードを使用して、確認済みのユーザー (確認済みは 1、それ以外は 0) のみがログインできるようにしていますが、このコードは何があっても謝罪メッセージを表示します。どうすればこれを修正できますか? ありがとう!

// make sure the user is confirmed
    $confirmstatus = query("SELECT * FROM users WHERE username = ?", $_POST["username"]);
    if ($confirmstatus["confirmed"] == 0)
    {
        apologize("Please first confirm your account.");
    }

これがクエリ機能です

    /**
 * Executes SQL statement, possibly with parameters, returning
 * an array of all rows in result set or false on (non-fatal) error.
 */
function query(/* $sql [, ... ] */)
{
    // SQL statement
    $sql = func_get_arg(0);

    // parameters, if any
    $parameters = array_slice(func_get_args(), 1);

    // try to connect to database
    static $handle;
    if (!isset($handle))
    {
        try
        {
            // connect to database
            $handle = new PDO("mysql:dbname=" . DATABASE . ";host=" . SERVER, USERNAME, PASSWORD);

            // ensure that PDO::prepare returns false when passed invalid SQL
            $handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
        }
        catch (Exception $e)
        {
            // trigger (big, orange) error
            trigger_error($e->getMessage(), E_USER_ERROR);
            exit;
        }
    }

    // prepare SQL statement
    $statement = $handle->prepare($sql);
    if ($statement === false)
    {
        // trigger (big, orange) error
        trigger_error($handle->errorInfo()[2], E_USER_ERROR);
        exit;
    }

    // execute SQL statement
    $results = $statement->execute($parameters);

    // return result set's rows, if any
    if ($results !== false)
    {
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }
    else
    {
        return false;
    }
}

そして、これが謝罪機能です

   /**
 * Apologizes to user with message.
 */
function apologize($message)
{
    render("apology.php", ["message" => $message]);
    exit;
}

そしてレンダリング機能。

    /**
 * Renders template, passing in values.
 */
function render($template, $values = [])
{
    // if template exists, render it
    if (file_exists("../templates/$template"))
    {
        // extract variables into local scope
        extract($values);

        // render header
        require("../templates/header.php");

        // render template
        require("../templates/$template");

        // render footer
        require("../templates/footer.php");
    }

    // else err
    else
    {
        trigger_error("Invalid template: $template", E_USER_ERROR);
    }
}
4

2 に答える 2

1

実行してみてください:

$confirmstatus = query("SELECT * FROM users WHERE username = ?", $_POST["username"]);
print_r($confirmstatus);

関数が実際に配列を返すことを再確認してください。

これもクエリとして試してください:

    $Checkusername = $_POST['username'];
   $confirmstatus = query("SELECT * FROM users WHERE username = '$Checkusername'");

また。君の

function query(/* $sql [, ... ] */)
{ }

関数に渡される変数はコメントアウトされています。これがあなたのコードとまったく同じである場合..次に、次の改訂をお勧めします。

function query ($sql)
{ .... }

編集

 if ($confirmstatus["0"]['confirmed'] == 0)
    {
        apologize("Please first confirm your account.");
    }

私は何かを見落としました。多次元配列が返されているようです。最初の配列 (この場合は 0) を調べてから、必要なフィールドを探す必要があります。

于 2012-12-07T04:07:44.327 に答える