[PHP-users 21753]Re: PHP+MySQLのand検索、or検索について
YOSHIMURA Keitaro
ramsy @ ramix.jp
2004年 5月 21日 (金) 11:39:47 JST
らむじぃです。
> はじめて投稿します。php初心者です。
「初心者です」と免罪符のように最初に掲げるのは好ましい行為ではありません。
必要以上に叩かれる要因ですので控えましょう。
> 過去のML、書籍などから何とかphpができたと思ったのですが
> フォーム上でand、orを選んでもand検索しかしません。
> 何処が悪いのかを色々調べてはみたのですが、解決には至らない状態です。
厳しいことを言うようですが悪いところだらけです。
まず SQLインジェクション可能です。外部からの入力情報をサニタライズ(洗浄)
もせず、SQL文に組み込んではいけません。
Cross Site Scripting/SQL injectionに対する知識が不足している様に思えます。
> if ((isset($key) and strlen($key) > 0)) {
> $key = trim($key);
> $key = mb_convert_kana($key, "s");
> $key = str_replace(" "," ",$key);
スペースが三つ以上つながっていたときの処理は?全角スペースの処理は?
tabは?
> if(!strrchr($key," ")){
> $arykey = explode(",", $key);
> $tmpkey = "or";
> }else{
> $arykey = explode(" ", $key);
> $tmpkey = "and";
> }
>
> $where = " WHERE (( sisya Like '%$arykey[0]%' or nendo Like '%$arykey[0]%' or koban Like '%$arykey[0]%' or key Like '%$arykey[0]%' )";
>
> for($i = 1; $i < sizeof($arykey); $i++) {
> $where .= " " . $tmpkey;
> $where .= " ( bsisya Like '%".$arykey[$i]."%' ";
> $where .= "OR bnendo Like '%".$arykey[$i]."%' ";
> $where .= "OR bkoban Like '%".$arykey[$i]."%' ";
> $where .= "OR bkey Like '%".$arykey[$i]."%') ";
> }
> $where .= ")";
> }
何故0番目の要素を全部先に調べているのでしょう。
sisyaの 0, 1, 2 - $i を$tmpkeyで調べないと、siyaに0、nendoに1、kobanに要
素1が含まれている場合でもhitしますし、そもそもSQL文がオカシイです。
<|> らむじぃ!吉村圭太郎@D&D System, JLA
<|> ramsy @ linux.or.jp http://jla.linux.or.jp/
<|> ramsy @ ramix.jp http://ramix.jp/~ramsy/
PHP-users メーリングリストの案内