[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 メーリングリストの案内