2016-10-26 35 views
0

SQLクエリのフィルタとしてURLのパラメータを使用しているページがあります。そして、URLパラメータが設定されているか否かに応じて、条件付きクエリを設定PHP MYSQLテーブルには1行の結果しか表示されません

$station = htmlspecialchars($_GET["station"]); 

if(isset($_GET['station'])) { 
    $query = "SELECT * FROM song_of_the_day WHERE station = '$station'"; 
} 
else { 
    $query = "SELECT * FROM song_of_the_day WHERE end_date >= CURDATE()"; 
} 
    $result = mysql_query($query) or die(mysql_error()); 
    $num_rows = mysql_fetch_row($result); 

は、その後、私はテーブルに結果を表示 は私がURLパラメータから変数を作成しました:

echo "<table width='758' border='0' cellpadding='10' cellspacing='0' class='myTable'>"; 
while($row = mysql_fetch_array($result)) { 
echo '<tr>'; 
echo '<td align="left" width="48">' . $row['station'] . '</td>'; 
echo '<td align="left">' . date('M j, Y',strtotime($row['end_date'])) . '</td>'; 
echo '<td width="24" align="left"><a href="edit.php?id=' . $row['id'] . '"><img src="http://yourligas.yourli.com/ad-inventory/edit.png" border="0"></a></td>'; 
echo '<td width="24" align="left"><a href="delete.php?id=' . $row['id'] . '" data-confirm="Are you sure you want to delete this entry?" ><img src="http://yourligas.yourli.com/ad-inventory/remove.png" border="0"></a></td>'; 
echo "</tr>"; 
echo '</tbody>'; 
    } 
echo "</table>"; 

作品はELSEコマンドは、私は私のSQLでパラメータに頼らないよクエリを使用したときに見つけたクエリが、問題は、私は見ていたときにURLのparamete r ISSETは、実際のデータベースの条件に一致する行が複数ある場合、クエリから1行だけが表示されます。誰がなぜこれが起こっているのか知っていますか?

はあなたにこのラインで

+0

MySQLを使用するべきではありません。 PDOを見てください、お願いします! – Shiv

+0

*** [mysql_ *関数の使用をやめる](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)*** [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)がPHP 7で削除されました。[prepared](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。 )[PDO](http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared- statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

答えて

0

をありがとう、あなたが見つかりました行数を取得しようとしたときにデータの最初の行を消費するように表示されます。

$num_rows = mysql_fetch_row($result); 

これはあなたの結果のカーソルから最初の行を削除します。

代わりに、あなたはおそらく、次の操作を行うためのもの:

$num_rows = mysql_num_rows($result); 
+0

うわー、それは完璧に働いた....私は十分にあなたに感謝できない! –

関連する問題