如何修复由if语句引起的奇怪的PHP / MySQL问题?

时间:2011-04-13 18:42:24

标签: php html mysql if-statement html-table

我是PHP / mySql的初学者。我正在编写一个CMS,但仍处于早期阶段。 我编写了一个代码,用于从mySql表中获取信息,但它是一个HTML表。问题是,在应用某个IF语句之前,会显示mySql表中的整个数据,这就是我想要的......但在应用该IF语句之后,我的数据部分就会消失! (第一个原始的具体)..所以这是我的代码,你将有效地诊断我的问题..如果你需要额外的部分,请告诉我。

首先,在应用IF语句之前,这是我的HTML表格:

before

这是后来的事:

after

这是我的代码WITHOUT IF声明:

<?php
function make_table() {
    $myResult = get_ind_info_fam();
    $ind_field_count = mysql_num_fields($myResult) -1;

            // Table to show ALL individuals info.
            echo "<table>" ;

            // Table Headers:
            for ($i = 2 ; $i <= $ind_field_count ; $i++) {
                    $field_name = mysql_field_name($myResult, $i);
                    $field_name = ucwords($field_name);
                    if ($i ==2) {
                        $field_name = "Individual Name";
                    }
                    echo "<th>{$field_name}</th>";
                }

            // Table Data :
                while ($myData = mysql_fetch_array($myResult)){
                    echo "<tr>";
                    for ($i = 2 ; $i <= $ind_field_count ; $i++) {
                        echo "<td>{$myData[$i]}</td>";
                    }
                    echo "</tr>";
                }
            echo "</table>" ;
  }
 ?>

以及IF声明的代码:

<?php
function make_table() {   
     $myResult = get_ind_info_fam(); 
// Checking if a correct $_GET["fam"] is entered
//  (not out of range) so an empty table won't be shown :

    if (isset($myResult)) {

        if($myData = mysql_fetch_array($myResult)) {
            $ind_field_count = mysql_num_fields($myResult) -1;

            // Table to show ALL individuals info.
            echo "<table>" ;

            // Table Headers:
            for ($i = 2 ; $i <= $ind_field_count ; $i++) {
                    $field_name = mysql_field_name($myResult, $i);
                    $field_name = ucwords($field_name);
                    if ($i ==2) {
                        $field_name = "Individual Name";
                    }
                    echo "<th>{$field_name}</th>";
                }

            // Table Data :
                while ($myData = mysql_fetch_array($myResult)){
                    echo "<tr>";
                    for ($i = 2 ; $i <= $ind_field_count ; $i++) {
                        echo "<td>{$myData[$i]}</td>";
                    }
                    echo "</tr>";
                }
            echo "</table>" ;
        }
    }
   }
?>

这是我的get_ind_info_fam()功能:

function get_ind_info_fam()
{
   //****Family name is clicked*****

    //This function gets Family ID from addresse bar
    //and extract individual info according to that ID by $_GET variable
    //
    //NOTE : this function is used in the article to show content of
    //       selected family name.

        if(is_numeric($_GET["fam"])) {
            $query ="SELECT * FROM individual
                        WHERE g_id={$_GET["fam"]}";
            $result = mysql_query($query);
             return $result ;
        }
}

我真的不知道到底要告诉你什么才能全面了解,但如果有任何不太清楚的事情让我知道。

3 个答案:

答案 0 :(得分:4)

您使用if()版本在两个位置获取数据行:

if($myData = mysql_fetch_array($myResult)) {

while ($myData = mysql_fetch_array($myResult)){

第一行被丢弃,因为您只输出表头行,而不是每次都输出行数据。

同样,您的初始isset()支票将无法执行您想要的操作。无论查询如何执行,mysql_query()都将返回SOMETHING。如果失败,则得到布尔值FALSE,否则得到结果集句柄。这意味着isset()将永远成功,因为该值(总是惊喜)始终设置。你想要的是:

$myResult = get_ind_info_fam(); 

if ($myResult === FALSE) {
   die(mysql_error());
}
if (mysql_num_rows($myResult) == 0) {
    echo "nothing found";
} else {
    .... print out the results ...
}

答案 1 :(得分:2)

在没有IF的情况下你没有这个:

if($myData = mysql_fetch_array($myResult)) {

作为参考,请在您的If语句后立即查看。

答案 2 :(得分:2)

这是您的第二个if语句:您正在获取结果集的第一行,之后您不再对其执行任何操作,因此当您输入时消失 while循环并获取第二行。

就是这一行:

if($myData = mysql_fetch_array($myResult)) {