2012-03-23 9 views
2

databasemysqlの個々のレコードを表示

ここに私のデータベースのスクリーンショットがあります!私は正常に挿入と削除操作を完了しました しかし、私は個々のレコードを表示する際に問題があります 私はid#45のビューをクリックすると、すべての詳細が2番目の行を含む表示されます!ここでの結果あなたは第二行の詳細が表示された結果で見ることができるよう

result

のスクリーンショットです!私はクリックした行の詳細だけを表示したい! 私はここにあなたからの専門家

を支援を求めるだろう、私のview.phpコードは、PHPコードは$クエリによって返されるすべての行をループさ

<?php 
require 'database.php'; 

$query = "SELECT id, date, po FROM sales"; 
$result = $mysqli->query($query) or die(mysqli_error($mysqli)); 

if ($result) { 
    echo "<table cellspacing='0' cellpadding='15' border='0'> 
    <th >Date</th><th >PONumber</th>"; 
    while ($row = $result->fetch_object()) { 
    $po  = $row->po; 
    $date  = $row->date;    
    $id  = $row->id; 
    echo "<tr> 
    <td>$date</td> <td >$po</td></tr>"; 
    }  
} 
?> 
+0

最初のテーブルのHTMLはどのように見えますか?具体的には、リンクは何をしていますか? –

答えて

1

です。あなたの$queryコマンドがあまりにも一般的である

$id = $_GET["id"]; 
$query = "SELECT id, date, po FROM sales where id = $id"; 
+1

これは言うまでもないが、これはSQLインジェクションに対して非常に脆弱である。このようなコードを作成する前に、その意味を理解しておいてください。あなたは、そのクエリを実行する前に、$ idにある種のサニタイズ機能を使用していることを確認してください。 –

+0

うわー、それは完璧に動作します!ありがとうAndrew Edvalson!私は次の編集作業が必要です!本当にありがとうAndrew – darwinboy

1

:あなたのクエリは、おそらくあなたの編集に悪いwhere句

編集されています。今、「販売テーブルからフィールドid、日付、およびpoを選択してください」と言っています。あなたがしたいことは、 "id =前のページで選択されたIDを持つエントリーに対してのみ、salesテーブルのフィールドid、date、およびpoを選択する"と言うことです。これは

の$ id値が適切にエスケープ入力されたIDである

$query = "SELECT id, date, po FROM sales WHERE id = ".$id

ようなものになるだろう。あなたはおそらくGET経由でこのIDを送信しているので、$ _GET ['id']のようになりますが、これはMichaelが言ったように、最初のテーブルのHTMLがどのように見えるかによって決まります。

これは重要です.GETから受け取ったデータを適切にエスケープしないと、これを上に示したように使用したくない場合は、$を使用してSQLを送信してテーブル全体を消去できます。 _GET ['id']。この方法を調べてください: http://www.electrictoolbox.com/escape-variables-php-pear-db-bound-placeholders/

これは、データを正しくエスケープするのに役立ちます。あなたの質問に対する答えは、そのWHERE句を追加する必要があるということです。

関連する問題