2012-03-19 13 views
0

これは私のウェブページの一部です。別のテーブルからの検索PHP

enter image description here

私は、そのページに生徒の名前を学生手数料の詳細を表示しています。学生名をキーワードにした検索セクションがあります。詳細は手数料表から取り出され、学生名は手数料表にIDとして保存されます。生徒の名前は、tbl_studentsという別のテーブルに保持されます。私は次のクエリを使って検索しました。

$search = $_REQUEST['Submit']; 
    $keyword = $_REQUEST['keyword']; 


    if($keyword != '' ) 
    $fn = " and varStudentName LIKE '%$keyword%' "; 

$mainarr['query'] = "SELECT * FROM `tbl_students` where 1=1 ".$fn." order by intstudentId DESC"; 

検索はうまくいきます。検索された生徒の名前が表示されますが、理由と金額などのその他の詳細は表示されません。彼らは料金表にあるからだと思う。

私は学生名を使用して検索するときにすべての詳細を表示する必要があります。どうやってやるの?

+0

学生と料金表に参加し、その参加者から選択する必要があります。 –

+0

"1 = 1"ここで1は1と等しくありませんか? –

+0

@dagonはちょうどそこにあるように見えるので、$ fnはWHERE節に他の用語がすでにあるかどうかをチェックすることなく、最初に "and"を付けることができます。現時点では1つしかありませんが、このコードは複数の条件で重なっているより詳細なスクリプトからコピーされているようです。 – octern

答えて

0

あなたの質問は、あなたが表示しようとしているデータとは異なるテーブルにあるといえます。ここで行うべき最も良いことはおそらくSQL Joinステートメントでしょう。ここの文書http://www.w3schools.com/sql/sql_join.aspは、学生と料金の代わりに顧客と注文の文脈で行っているのとまったく同じ結合ステートメントを説明しています。

0

サニタイズすることを確認し、そうでない場合はPLEASEに参加する誰もが適切な左を提案するためにあなたが他のテーブルについての十分な情報を提供しなかったSTUDENT_ID

$keyword= mysql_real_escape_string($_post['keyword']) 
select * from student st 
inner join fees f on st.studentId =f.studentId 
where st.studentname like '%keyword%' 
order by studentId desc ; 
0

を使用して、学生や手数料テーブルに参加しますが、あなたのクエリ。

これは悪いです:

http://yourwebpage/?keyword=%';+drop+table+tbl_students

をそうすることによって、彼らはすべてのデータを削除することができます:誰かが彼らのブラウザでこれを入力する可能性があるため、それは悪いですなぜ$keyword = $_REQUEST['keyword'];

理由があります。

ご覧のとおり、これはリモートの訪問者があなたのMySQLサーバー上で完全にアクセスできるように見えるため、おそらくオープンな脆弱性です。安全上の理由から、入力を害さないようにする必要があります。

$keyword = mysql_real_escape_string($_REQUEST['keyword']);

または

$keyword = mysql_escape_string($_REQUEST['keyword'];)

(あなたのmysql_queryを発行する前のことを行います):このような、例えば。マジッククォートの設定がオンであっても、誰かがこのコードを別のサーバーに移行すると、そのセーフティネットはそこには存在しません。

関連する問題