2012-05-12 7 views
1

私は、呼び出されたときにデータベースを照会し、データをフォーマットし結果を返す関数loadContent()を持っています。これは非常に基本的なCMSを構築するために使用されており、この関数はデータベースから記事を読み込むために使用されます。PHP関数が結果を返さない

$articles = mysql_query("SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`='$pageID'"); 
      if(!$articles){ 
       die('Error!: ' . mysql_error()); 
      } 
      while($arts = mysql_fetch_assoc($articles)){ 
       $content .= '<div class="article" id="art-' . $arts['id'] . '">'; 
       $content .= '<h1>' . $arts['name'] . '</h1>'; 
       $content .= $arts['content']; 
       $content .= '</div>'; 
      } 
     return $content; 
    }else{ 

私の問題は何も返されませんされていることである。

ここで関数が質問されています。 SQLは検証され、2行が返されます。私はループ内のすべてをコメントアウトして、$content .= 'test';行を追加し、return文をecho $content;に変更し、関数が "test"を2回エコーしました。それで私がやったことに何が間違っていますか?

私を助けてくれてありがとう、私はかなりPHPに新しいです。

UPDATE:

ポストは今、すべての有効な変化を表しています。

私はvar_dumpでどこかにいました。 returnの直前に私は$contentを投棄しました。データベース内のすべての記事(2件)はstring(2445) ""の中に表示されました。これは、クエリに問題がないことを確認します。私は今、それがreturn文と関係があると考えています。

+0

それはすべきですか? –

+1

ループの最初の行で '$ content ='を '$ content。='に変更してみてください。 – Cyclonecode

+0

ああ...いいえ、心配しないで、私はそれがどのように動作するのか理解しています。 –

答えて

1

はこれにあなたのコードを更新してみてください。

function loadContent(){ 
    $content = ''; 
    $pageID = 1; 
    // 
    $articles = mysql_query("SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` 
          FROM `tb_articles` 
          WHERE `page_id`='$pageID'"); 

     // you only need the associative array 
     while($arts = mysql_fetch_array($articles, MYSQL_ASSOC)){ 
      // close your tag properly and use the concat operator 
      $content .= '<div class="article" id="art-' . $arts['id'] . '">'; 
      $content .= '<h1>' . $arts['name'] . '</h1>'; 
      $content .= $arts['content']; 
      $content .= '</div>'; 
     } 

    return $content; 

} 

また、あなたが何かがうまくいかないかどうかを確認するためにmysql_query()へお電話の後mysql_error()を実行してみてください可能性があります。

もう1つのことは、データベースにpage_idが1の行が実際に存在することです。また、列名が正しいことを確認する必要があります。

+0

残念ながら、これは何も変わりませんでした。 – lampwins

+0

@JohnAは - そして、あなたは試してみましたに 'エコーmysql_error();' 'あなたの後mysql_query()'を呼び出しますか?私は自分の答えを更新しましたが、それが助けになるとは思っていませんでしたが、あなたのクエリで '{'と '}'文字を削除しようとしました。 – Cyclonecode

+0

私はこのことを推測しました:if(!$ articles){ \t \t \t \t \t die( 'Error !:'。mysql_error());非常に重要なMYSQL_ASSOC部分の \t \t \t \t} – lampwins

3

これが関連しているかどうかは不明ですが、最初のdivタグを閉じるようなことはありません。あなたはidアトリビュートクォートを閉じないでください(アポストロフィで開き、あなたは引用を連結します)。

具体的に

... id='art-" . $arts['id'] . "'></div>"; 
+0

あなたはこれについて正しいですが、私はこれらの問題を修正しましたが、残念ながら問題を解決しませんでした。しかし、ありがとう。 – lampwins

0

は、それが動作するかどうか、この

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

function loadContent(){ 
    $content = ''; 
    $pageID = 1; 
    $myQuery = "SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`='{$pageID}'"; 
    echo $myQuery; 
    $myQuery = "SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`=" . $pageID; 
    echo $myQuery; 
    $articles = mysql_query($myQuery) or die("Error found with the Query" . mysql_error()); 

     while($arts = mysql_fetch_assoc($articles)){ 
       $content .= "<div class='article' id='art-" . $arts['id'] . '"'; 
      $content .= '<h1>' . $arts['name'] . '</h1>'; 
      $content .= $arts['content']; 
      $content .= '</div>'; 
     } 

    return $content; 

} 

は、試してみて、私に教えて、と私は説明を更新しますしてみてください。

UPDATE

コードだけでは、それぞれ1を実行して確認し、2つのクエリは、今がある、更新されています。

+0

残念ながら、これは何にも影響しませんでした。 – lampwins

+0

OK、あなたのページ のerror_reporting(E_ALL)の最初にこれを置きます。ini_set( "display_errors"、1); は – sikas

+0

が答えを更新しました(ブラウザのキャッシュをクリアした後に、より良い)を再度スクリプトを実行してください。私を確認して更新してください。 – sikas

1
$content .= "<div class='article' id='art-" . $arts['id'] . '"'; 

と私は$芸術は$記事のために短いであると仮定して、実際のコードでこれらの2変数名のいずれかを一貫して使用されている

$content .= "<div class='article' id='art-" . $arts['id'] . "'"; 
関連する問題