1
<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];

function random_string($length) {
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));

    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }

    return $key;
}

if($email)
{

$connect = mysql_connect(" HOST ", " USERNAME ", " PASSWORD") or die("Couldn't Connect");

mysql_select_db("CiniCraftData") or die ("Couldn't Find Database"); 

            $query = "INSERT INTO customers (fname, lname, email, alphanum) VALUES ('$fname', '$lname', '$email', 'random_string(10)')";
            $result = mysql_query($query) or die("Some kind of error occured.");

            echo ("Welcome " + $username + ", you are now in my database!");

}
else die("You did not fill out the fields correctly, please try again.");

?>

$ query = "INSER ...'random_string(10)')"で始まる中央の行についてサポートが必要です。

「customers」というテーブルにランダムな英数字の文字列を挿入する必要がありますが、関数「ran​​dom_string()」を呼び出す代わりに、「random_string(10)」をテーブルに挿入します。これにより、6つのフィールドを持つテーブルに次のようになります。

5   John    Smith   Jogsz@CiniCraft.com random_string(10)   0

これを修正するにはどうすればよいですか?

4

3 に答える 3

3
$query = "INSERT INTO customers (fname, lname, email, alphanum) VALUES ('$fname', '$lname', '$email', '" . random_string(10) . "')";

これはうまくいくはずです!二重引用符は変数を解析しますが、関数は解析しないと思います。

于 2012-12-31T00:42:34.333 に答える
2

関数と文字列を連結し、

$query = "INSERT INTO customers (fname, lname, email, alphanum) VALUES ('$fname', '$lname', '$email', '" . random_string(10) ."')";

SQL Injection補足として、変数の値が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。PreparedStatementsを使用すると、値を一重引用符で囲む必要がなくなります。

于 2012-12-31T00:43:43.440 に答える
0

それについて2つのステートメントを作成します。最初のステートメントで関数を呼び出して値を変数に割り当て、次にINSERT...ステートメントで変数を使用します

于 2012-12-31T00:43:58.417 に答える