2011-02-07 3 views
0

私は以下のコードをウェブサイト上に掲載しています。私はそれが(会社)で入力された情報を取っていることを理解し、エントリが空であればusers.phpページに移動します。それが空でないなら、それはエントリーを取り、テーブルでそれを調べます。PHP/SQLステートメント - 私はプロセスを理解しますが、個々のコード行は理解できません。

私が本当に理解していないビットは、他の人の後です。$セクション、特に%、私はあなたがコメントをしたときだと思ったのですか?

希望のお手伝いができますか?

感謝:)

if ($_POST["Company"] == "") 
{ 
    header("Location: companies.php?page=1"); 
    $Orders = "<div id='ErrorMessage'>Please enter a company name or partial company name to search the Credit Report Shop.</div>\n"; 
} 
else 
{ 
    $WhereSection=""; 
    if ($_POST["Company"]) 
     $WhereSection .= "WHERE UPPER(Company) LIKE '%".strtoupper($_POST["Company"])."%'"; 

    $Statement = "SELECT * from jos_companies 
        $WhereSection 
        ORDER BY Company ASC, LastReport DESC"; 

    db_connect(); 
    $rid=mysql_query($Statement); 
    $rcount=0; 
} 
+0

これはまさにSQLインジェクションとPDOライブラリのひどい悪用の例です。そして、ああ、はい、%はmysqlの単なるワイルドカード文字です –

答えて

1

%は、SQL WHERE文のLIKE句で使用するワイルドカードです。 会社の値が 'ABC'の場合、LIKE '%ABC%'は、最初、中、または最後のいずれかに 'ABC'を含む値と一致します。 「ABCの%」LIKE「ABC」とLIKE「%ABC」で始まるすべての値と一致します「ABC」

で終わるすべての値と一致しますそして、あなたはSQL文

をでそれらを埋め込む前に、$ _POSTフィールドをエスケープする必要があります
+0

あなたは自動エスケープを信頼しませんか? – Mikhail

+0

@Mikhail - 自動エスケープとは何ですか? –

+0

自動エスケープとは何ですか?マジッククォート?いいえ、ひどいです(そして、PHPの著者:http://php.net/manual/en/security.magicquotes.php)。それをオフにして適切に行う。 (これは、通常、PDOがプレースホルダ値を持つ文を準備したことを意味します)。 – Quentin

0

%は、LIKE検索のワイルドカード文字です。

ので、入力された場合、たとえば、「ドン」、そしてLIKE '%don%'等、「マクドナルド」と「Donlen」、のような名前と一致します

0
$WhereSection .= "WHERE UPPER(Company) LIKE '%".strtoupper($_POST["Company"])."%'"; 

$_POST['Company']の情報がある場合は、私たちがしたいですクエリをフィルタリングして会社名と一致するようにします。 LIKE '%text%'は、テキストが入っているものと一致します。 %は何でも一致するワイルドカードです。

UPPER()は大文字と小文字を区別しません。

幸運

関連する問題