0

だから私は、ユーザーが入力した投稿を保存するテーブルをサーバー上に持っています。それらを表示できるこの最後のページでは、全員の結果を表示するか、特定の天気だけを選択して表示するかを選択できます。特定の天気部分の選択は機能していますが、「すべて」オプションを選択すると何も表示されません。理由はありますか?

View Posts 
<br>
<form method="get" action="view_forum.php">
    <label>Select Weather to Filter </label><br />
    <select name="weather">
        <option value="all">all</option>
        <option value="cloudy">Cloudy</option>
        <option value="sunny">Sunny</option>
        <option value="windy">Windy</option>
        <option value="snowy">Snowy</option>
        <option value="mixy">Wintery Mix</option>
        <option value="rainy">Rainy</option>
    </select>
    <input type="submit" value="view" />
</form>

<div id="view">
    <center><img src="images/forum.png" width="589" height="97"></center>
</div>  

<div id="white">
    <div id="blue">
        <div id="grey">
            <div id="container">        
<?php

    $dbc = mysql_connect('html','user','password','database');
    mysql_select_db('database',$dbc);

    $weather = sanitize( $_GET["weather"] ); // keep your input clean

    if ( $weather == "all" ) {
        $sql = "SELECT * FROM stories ORDER BY id DESC";
    } else {
        $sql = "SELECT * FROM stories WHERE weather = '$weather' ORDER BY id DESC";
    }

    while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
        echo "<div class=\"names\"> {$row['name']}<br /></div>";
        echo "<div class=\"weathers\">{$row['weather']}<br /></div>";
        echo "<div class=\"stories\">{$row['story']}<br /></div>";
        echo "<img src=\"images/line.png\" width='800' height='3'>";
        echo "<br />";  
    }
?>
            </div>
        </div>
    </div>
</div>
4

2 に答える 2

1

WHERE「すべて」を選択した場合は、条項を完全に削除する必要があります。

$weather = mysql_real_escape_string( $_GET["weather"] ); // keep your input clean

if ( $weather == "all" ) {
  $sql = "SELECT * FROM stories ORDER BY id DESC";
} else {
  $sql = "SELECT * FROM stories WHERE weather = '$weather' ORDER BY id DESC";
}

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

while ( $row = mysql_fetch_assoc( $result ) ) {
  /* Echo results */
}
于 2012-05-03T03:46:10.827 に答える
0

SQL インジェクションには十分に注意し 、可能であれば mysqli_prepare、またはPDO で準備された クエリに移行する必要があります。

しかし、あなたの主な問題は、all天気が呼び出されていない限り、クエリを実行してもall見つからないことです。

解決策は、オプションを確認し、allそれに応じてクエリを変更することです。

また、$_GET['weather']設定されていない場合はデフォルトが必要です。エラー報告がオフになっていて、Notice:Undefined エラーがスローされていないと思われます。

<?php 
if(isset($_GET['weather'])){
    $_GET['weather']=mysql_real_escape_string($_GET['weather']);
    //All
    if($_GET['weather'] == 'all'){
        $sql = "SELECT * from stories ORDER BY id DESC";
    }else{
        //Specific
        $sql = "SELECT * from stories WHERE weather='{$_GET['weather']}' ORDER BY id DESC";
    }
}else{
    //Default
    $sql = "SELECT * from stories ORDER BY id DESC";
}
?>

更新 (完全なコード、修正あり):

<?php 
$dbc=mysql_connect('html','user','password','database') or die(mysql_error());
mysql_select_db('database',$dbc) or die(mysql_error());
?>

View Posts <br>
<form method="get" action="view_forum.php">
  <label>Select Weather to Filter </label><br />
  <select name="weather">
    <option value="all">all</option>
    <option value="cloudy">Cloudy</option>
    <option value="sunny">Sunny</option>
    <option value="windy">Windy</option>
    <option value="snowy">Snowy</option>
    <option value="mixy">Wintery Mix</option>
    <option value="rainy">Rainy</option>
  </select>
  <input type="submit" value="view" />
</form>

<div id="view">
 <center><img src="images/forum.png" width="589" height="97"></center>
</div>  
  <div id="white">
    <div id="blue">
      <div id="grey">
       <div id="container">
<?php
if(isset($_GET['weather'])){
$_GET['weather']=mysql_real_escape_string($_GET['weather']);
    //All
    if($_GET['weather'] == 'all'){
        $sql = "SELECT `name`,`weather`,`story`
                FROM stories 
                ORDER BY id DESC";
    }else{
        //Specific
        $sql = "SELECT `name`,`weather`,`story`
                FROM stories 
                WHERE weather='{$_GET['weather']}' 
                ORDER BY id DESC";
    }
}else{
    //Default
    $sql = "SELECT `name`,`weather`,`story`
            FROM stories 
            ORDER BY id DESC";
}

$result = mysql_query($sql);

if(mysql_num_rows($result)>0){
    while($row=mysql_fetch_assoc($result)){
        echo "<div class=\"names\"> {$row['name']}<br /></div>";
        echo "<div class=\"weathers\">{$row['weather']}<br /></div>";
        echo "<div class=\"stories\">{$row['story']}<br /></div>";
        echo "<img src=\"images/line.png\" width='800' height='3'>";
        echo "<br />";
    }
}else{
    echo 'No results';
}
?>
</div>
</div>
</div>
</div>
于 2012-05-03T03:47:56.703 に答える