0
$sql = "INSERT INTO $table_name VALUES
('$_POST[firstname]', '$_POST[lastname]', '$_POST[username]', password('$_POST[password]'), 'Users', '', '', '$pchange', 
'$_POST[email]', '$default_url', '$verify', '', 0, '', 0)";

$result = @mysql_query($sql,$connection) or die(mysql_error());

$sql、$connection、および $table_name はすべて有効であり、以前にスクリプトとデータベースで使用されていました。これが私のデータベースの外観です。

firstname   varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
lastname    varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
username    varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
password    varchar(50) latin1_swedish_ci       Yes NULL          Change      Drop   More 
group1      varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
group2      varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
group3      varchar(20) latin1_swedish_ci       Yes NULL          Change      Drop   More 
pchange     varchar(1)  latin1_swedish_ci       Yes NULL          Change      Drop   More 
email       varchar(100)latin1_swedish_ci       Yes NULL          Change      Drop   More 
redirect    varchar(100)latin1_swedish_ci       Yes NULL          Change      Drop   More 
verified    varchar(1)  latin1_swedish_ci       Yes NULL          Change      Drop   More 
last_login  date                                Yes NULL          Change      Drop   More 
balance     double      UNSIGNED                Yes 0             Change      Drop   More 
address     varchar(60) latin1_swedish_ci       Yes NULL          Change      Drop   More 
lostbalance double                              Yes 0             Change      Drop   More 

前もって感謝します。

4

3 に答える 3

4

@ のためエラーなし:

@mysql_query($sql,$connection) or die(mysql_error());

@ は mysql_query() 関数からのエラーを抑制します。

あなたのステートメントに複数のエラーが表示されます。

  1. '$_POST[firstname]'- であると想定されます$_POST['firstname']。値を変数に格納するか、連結を使用します。"'.$_POST['firstname'].'"

  2. 使用するmysql_query($sql) or die(mysql_error());

  3. データベースに保存しているすべてのデータをエスケープします。

于 2012-05-10T13:38:04.910 に答える
1

まず第一に、ユーザー入力をフィルタリングせずにそのままにしておくことは、良いセキュリティ プラクティスではありません。すぐに SQL インジェクションや XSS 攻撃の犠牲者になるからです。この方法でユーザー入力をフィルタリングする必要があります。

$var = filter_var($_POST['var']), FILTER_SANITIZE_STRING);

次に、 ie$varを直接使用する代わりに、SQL クエリでこれを使用する必要があります。$_POST['var'].

$sql = "INSERT INTO $table_name VALUES
('$firstname', '$lastname', '$username', password('$password'), 'Users', '', '', '$pchange', 
'$email', '$default_url', '$verify', '', 0, '', 0)";
于 2012-05-10T13:40:30.837 に答える
-2

「VALUES」の前にテーブルの列に名前を付ける必要があります

INSERT INTO $table_name (field_1, field2, ...) VALUES ($_POST_1, ...)
于 2012-05-10T13:37:01.833 に答える