2016-11-08 9 views
0

私は新しいプログラミングを学びたいと思っています。私はPHPを選び、第4版Oreillyで自分のやり方を研究しました。私は最初の主要なプログラムを理解しようとしています。私はそれがとてもシンプルだと確信していますが、私は1つの部分をかなり理解していません。私は、関連するビットにビットを簡略化し、プログラムの次の部分では:

$conn = new mysqli(parameters to connect to database) 

$stuff = get_post($conn, 'stuff') 

$query = "INSERT INTO table VALUES" . "('$stuff')" 

$result = $conn->query(query) 

Function get_post($conn, $var) 

Return $conn->real_escape_string($_POST[$var]) 

私はそれが悪意のあるユーザーの入力とハッキングを防止するための方法です理解しています。私が理解していない部分は、ユーザ入力のフォームを含む$_POSTがデータベースに入る前にデータベースのプロパティとして扱われる理由または理由です。 (最後の行で)私はものがデータベースに入る前に取り除かれると思った。私はここで非常に初歩的なものが欠けていると確信しています。

私は基本的に$_POST$connのプロパティになるのを見るのに苦労しています。誰も私の中を歩くことができますか?

ありがとうございます。

$conn = new mysqli(parameters to connect to database) 

をこの行では、MySQLデータベースと対話するオブジェクトを作成:

+2

[文字列をエスケープする]より良い方法があります(http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-エスケープ文字列)は安全ではありません! [それを信じていない?](http://stackoverflow.com/q/38297105/1011527)[MySQLi](http://www.wikipedia.org/wiki/Prepared_statement)の[prepared] ://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。 –

+0

私はあなたが何が起こっているかについていくつかの誤解を持っていると思う、クリス。 '$ conn'のプロパティとして' $ _POST'をどこで見ていますか? – CollinD

+0

こんにちは。はい、より良い方法は、次の章でカバーされていますが、私は進歩する前にこの単純な安全でない方法で何が起こっているのかを確認しようとするので、初心者の初心者です。$ conn - >($ _ POST [$ var])を返すように単純化すれば、私は$($ _ POST [$ var])の返信$ conn-> real_escape_stringから混乱していると思います。 – Chris

答えて

0

は、ステップバイステップで行くことができます。

$stuff = get_post($conn, 'stuff') 

この行は、 "stuff"というPOST変数から情報を取得し、$ stuff変数に割り当てます。 (表「表」に

$result = $conn->query(query) 

を変数$のものの値を挿入する。この1はトリッキーで、それは最初に、2つのことを行いますが、データベースに強制するクエリです

$query = "INSERT INTO table VALUES" . "('$stuff')" 

$ connオブジェクト($ conn-> query)のクエリ関数を使用し、その関数に変数$ queryを渡します。クエリがデータベースに実行され、その結果が$ resultに保存されます。

最後に、関数:

関数get_post($ conn、$ var){ $ conn-> real_escape_string($ _ POST [$ var]);を返します。 }

real_escape_stringに使用している関数は、mysqliオブジェクトに既にプログラムされている$ conn変数で渡された関数で、$を連結するとクエリを壊す可能性のある悪意のある文字列を消去しますクエリ= "INSERT INTOテーブルVALUES"。 "( '$ stuff')"

+0

ああ、私は今理解していると思う。それは私の脳を欺く最後の一歩です。 – Chris

+0

私はエスケープ文字列がmysqli(そしてconnオブジェクト)の一部であり、PHP全体ではないことを認識していませんでした。私はそれが正しいと思っていますが、それが当てはまる場合は意味があります – Chris