2012-10-01 77 views
0

我有一個PHP腳本,與if和else塊。兩者都只包含回聲。 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?'; 

?> 
+0

在'if()'前面加上'var_dump(mysql_num_rows($ result))',看看這個值是什麼,也許'mysql_num_rows($ result)'的結果'你的想法是什麼? – Jelmer

+0

聽起來像是一個解析器錯誤,你可以運行相同的腳本,其前綴爲'error_reporting(-1)'前綴爲 – raina77ow

+0

,否則你可以執行'if(false)'到確保它進入else語句,看看它是什麼... – Mathlight

回答

5

您將在

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

一個錯誤,因爲結果的數量是零,你的腳本將打印一個警告。根據您的配置,您可能會看到白頁而不是警告。

請注意 或死(..) 部分。

由於第一部分失敗(獲取空結果),腳本將死亡並停止。沒有代碼低於這一行將被執行,所以沒有日誌,沒有,如果,...

最好的解決辦法是把fetch_array放在if(mysql_num_rows(..)== 1聲明中,所以我們確定那裏至少有1位用戶可以獲取

+0

謝謝。是的,我確實看到一個白頁。什麼是錯誤? – Kevmeister

+0

@Kevmeister設置'error_reporting(1)',你可能會看到它。 –

+0

你不能獲取空的結果?把這條線放在if裏面,當你確定至少有一個結果 –