2012-02-24 8 views
0

誰かがPHP/mySQLフォームの提出中に変数を割り当てるより洗練された方法を提案できるのだろうかと思います。これはぎこちないようです

 

    //include("connect.php"); 
     mysql_connect("localhost","root","root"); 
     mysql_select_db("noirTEST"); 
     // assign out vars from the POST vars to get ready for SQL insertion 
     $thumb_image_location = $_POST['thumb_image_location']; 
     $large_image_location = $_POST['large_image_location']; 
     $password = sanitizeString($_POST['password1']); 
     $firstName = sanitizeString($_POST['firstName']); 
     $lastName = sanitizeString($_POST['lastName']); 
     $desc_short = sanitizeString($_POST['desc_short']); 
     $nationality = sanitizeString($_POST['nationality']); 
     $speakEnglish = sanitizeString($_POST['speakEnglish']); 
     $speakGerman = sanitizeString($_POST['speakGerman']); 
     $mainInst = sanitizeString($_POST['mainInst']); 
     $inspiration1 = sanitizeString($_POST['inspiration1']); 
     $inspiration2 = sanitizeString($_POST['inspiration2']); 
     $inspiration3 = sanitizeString($_POST['inspiration3']); 
     $inspiration4 = sanitizeString($_POST['inspiration4']); 
     $inspiration5 = sanitizeString($_POST['inspiration5']); 
     $desc_long = sanitizeString($_POST['desc_long']); 
     $link1name = sanitizeString($_POST['link1name']); 
     $link1url = sanitizeString($_POST['link1url']); 
     $link2name = sanitizeString($_POST['link2name']); 
     $link2url = sanitizeString($_POST['link2url']); 
     $link3name = sanitizeString($_POST['link3name']); 
     $link3url = sanitizeString($_POST['link3url']); 
     $email = sanitizeString($_POST['email']); 
     $proExperience = sanitizeString($_POST['proExperience']); 
     $haveStudio = sanitizeString($_POST['haveStudio']); 
     $musicTheory = sanitizeString($_POST['musicTheory']); 
     $composer = sanitizeString($_POST['composer']); 
     $teacher = sanitizeString($_POST['teacher']); 

     $query = "INSERT INTO NOIRusers (thumb_image_location, large_image_location, password, firstName, lastName, desc_short, nationality, speakEnglish, speakGerman, mainInst, inspiration1, inspiration2, inspiration3, inspiration4, inspiration5, desc_long, link1name, link1url, link2name, link2url, link3name, link3url, email, proExperience, haveStudio, musicTheory, composer, teacher) VALUES ('$thumb_image_location', '$large_image_location', '$password', '$firstName', '$lastName', '$desc_short', '$nationality', '$speakEnglish', '$speakGerman','$mainInst', '$inspiration1', '$inspiration2', '$inspiration3', '$inspiration4', '$inspiration5', '$desc_long', '$link1name', '$link1url', '$link2name', '$link2url', '$link3name', '$link3url', '$email', '$proExperience', '$haveStudio', '$musicTheory', '$composer', '$teacher')"; 

    function sanitizeString($string) 
     { 
      $string=trim($string); 
      $string=strip_tags($string); 
      $string=htmlentities($string); 
      $string=stripslashes($string); 
      return $string; 
     }; 

この最初の部分はこのようなものでしょうか?それは私が見ていますすべての例のように思える

foreach($_POST as $key => $value){ 
    ${$key} = $value; 
    sanitizeString($key); 
} 

は...長い道のりまたはそれのようなものを使用していますので、私は短い道を/使用すべきではないことができない理由があると確信しています。しかし、誰も私にそれを説明することはできますか?

+0

キーごとに名前が付けられた各配列値の変数が必要な場合は、短い方法で問題ありません。 sanitizeString()はパスワードで使用するので、何をしますか? – Cez

+0

私はあなたが以下に挙げたforeachを行うだけでなく、個々の変数に保存する代わりに、キーが使用されている$ _POSTキーと同じである変数の配列を作成します。 –

+0

@cez - おっとパスワードにsanitizeStringを使用するのは意味がないと思います。キーごとに名前が付けられた変数については、これは必ずしも望ましいとは限りませんが、私にとっては論理的なようです。 –

答えて

2

sanitizeStringの機能の中には、mysql_real_escape_stringも使用する必要があります。

さらに、文字列をエスケープするPDOを使用してください。

+0

['mysql_real_escape_string()'](http://php.net/manual/en/function.mysql-real-escape-string.php)を意味していますか? –

+0

@LinusKleen:はい私は、ありがとう –

+0

ヒントのための1つのポイントとはい..私はPDOがこれを行うためのよりよい方法であることを認識していますが、これはこれで私の最初の裁判ですから、私はmysql 、1つはmysqliで、もう1つはPDOで、私は差分のための感触を得ることができました。 「whoops」にはescape_stringが付いています。私はそれを知っていた。どうも! –

1

あなたの代わりにはちょうど非常に悪い考えであることが可能にregister_globals、と同じことをしない(あなたが本当には、あなただけのarray_mapと一緒extractを使用することができ、ことをやってみたかった場合 - 。しかしません)。

$ _POSTの値をループして消毒することをお勧めします(新しい配列では好きなので、どの値がフィルタリングされていないかを制御できます)。あなたのクエリ(あなたはおそらく準備されたクエリを使用して見てみたいです)。また、予想され、設定されたフォームの値のリストを作成し、そのリストをループし、値を確認してフィルタリングすることもできます。これにより、値が実際に設定されているかどうか、またリクエストに期待した内容が含まれているかどうかを確認できます。

magic_quotesが有効になっていない限り、stripslashes()を使用しないでください。そうでないと、あなたのフィールドに<が含まれているとstrip_tagsが多すぎるコンテンツを削除して、sanitize関数で-sを無効にします。 HTMLエスケープ出力を(HTMLへ)入力​​しないで、やりたい

+0

良い情報上の人は結果を配列に入れることをお勧めします。だから私はあなたが配列()を初期化し、ループ内でarray_pushを使用すると思いますか? これはあなたが言ったように行いますか?予想されるフォーム値のリストを作成するために、私はそれを見てきました。しかし、フロントでjQueryを使用する場合(必須フィールドがあることを確認してください)、この段階で確実に確認したいのは、悪意のあるコードが入らないということですか?私はあなたのアドバイスでどのような検証をしたいのですか? –

関連する問題