Как я могу исправить эту странную проблему PHP / MySQL, вызванную оператором if? - PullRequest
0 голосов
/ 13 апреля 2011

Я новичок в PHP / mySql.Я пишу CMS и все еще на ранней стадии.Я написал код, чтобы взять информацию из таблицы mySql и поместить ее в таблицу HTML.Проблема в том, что перед применением определенного оператора IF отображаются все данные в таблице mySql, чего я и хочу ... Но после применения этого оператора IF часть моих данных просто исчезает!(первый необработанный, чтобы быть конкретным). Итак, вот мой код, который будет эффективен для диагностики моей проблемы. Если вам нужны дополнительные элементы, просто скажите мне.

Прежде всего, вот моя таблица HTML ДОприменяя оператор IF:

before

А вот ПОСЛЕ:

after

Вот мой код без оператора 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 ]

4 голосов
/ 13 апреля 2011

Вы извлекаете строки данных в двух местах с версией if():

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

и

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

Первая строка отбрасывается, так как вы просто выводите строку заголовка таблицы без каждого вывода данных строки.

Кроме того, ваша первоначальная проверка isset() не будет делать то, что вы хотите. mysql_query() вернет НЕЧТО, независимо от того, как выполняется запрос. Если это не удается, вы получите логическое значение 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 ...
}
2 голосов
/ 13 апреля 2011

Это ваш второй оператор if: вы выбираете первую строку набора результатов и впоследствии ничего с ним не делаете, поэтому исчезает при вводе while цикл и получить второй ряд.

Вот эта строка:

if($myData = mysql_fetch_array($myResult)) {
2 голосов
/ 13 апреля 2011

У вас этого нет без IF:

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

Для справки, проверьте сразу после вашего заявления If.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...