0

if および else ブロックを含む php スクリプトがあります。どちらにも echo ステートメントのみが含まれています。if ブロックは完全に実行されますが、else ブロックが何も実行されない場合、画面にまったく出力されません (ブロックの外側の echo ステートメントでさえありません)。ELSEステートメントを大文字にする、すべての中かっこがあることを確認する、構文を二重および三重にチェックするなど、多くのことを試しましたが役に立ちませんでした。助けてください。

<?php

// Inialize session
session_start();

// Include database connection settings
include('config.inc');

$usr = mysql_real_escape_string($_POST['****ID']);

// Retrieve email address and message from database according to user's input
$query = "SELECT * FROM users WHERE username = '$usr'";

$result = mysql_query($query) or die(mysql_error());

// Put the id numbers in array $row

$row = mysql_fetch_array($result) or die(mysql_error());

// Test for ID match

if (mysql_num_rows($result) == 1)
{
echo 'The email address of ';
echo $usr;
echo ' is: ';
echo $row['email'];
echo '<p>Message: ';
echo $row['firstname'];
}
else
{
echo 'Sorry it appears that ';
echo '$usr';
echo ' has not registered yet. Why dont you tell him about ****Jacker?'; 
}
// Executing outside  if..else blocks for testing
echo 'Sorry, it appears that ';
echo '$usr';
echo ' has not registered yet. Why dont you tell him about ****Jacker?'; 

?>
4

1 に答える 1

5

エラーが発生します

$row = mysql_fetch_array($result) or die(mysql_error());

結果の数がゼロであるため、スクリプトは警告を出力します。構成によっては、警告の代わりに白いページが表示される可能性があります。

or die(..) の部分に注意してください。

最初の部分が失敗したため (空の結果を取得)、スクリプトは終了して停止します。この行より下のコードは実行されないため、ログも if もありません...

最善の解決策は、fetch_array を if (mysql_num_rows(..) == 1 ステートメント内に配置することです。これにより、フェッチするユーザーが少なくとも 1 人存在することが確実になります。

于 2012-10-01T11:20:47.870 に答える