0

PHPとMYSQLに問題があります。送信すると次のPHPスクリプトを実行するHTMLフォームがあります。問題は、次のPHPコードがデータベースにデータを2回挿入していることです。データベースではなく、次のPHPと関係があると思います。

<?php

$first_name = $_POST['firstname'];
$last_name = $_POST['lastname'];
$display_name = $_POST['displayname'];
$email = $_POST['email'];
$password = $_POST['password'];
$add_line1 = $_POST['addline1'];
$add_line2 = $_POST['addline2'];
$city = $_POST['city'];
$county = $_POST['county'];
$postcode = $_POST['postcode'];

$sql = "INSERT INTO members (memberID, 
memberPassword, 
memberFirstName, 
memberLastName,
memberAddressLine1, 
memberAddressLine2, 
memberCity,
memberCounty, 
memberPostcode, 
memberDisplayName) 
VALUES ('$email', 
'$password', '$first_name', '$last_name',
 '$add_line1', '$add_line2','$city',
 '$county', '$postcode', '$display_name')";

if (!mysqli_query($conn,$sql))
{
     die('Error: ' . mysqli_error($conn));
}
mysqli_query($conn,$sql);
echo 'Guest Added';
mysqli_close($conn);

?>
4

2 に答える 2

7
if (!mysqli_query($conn,$sql))
{
     die('Error: ' . mysqli_error($conn));
}
mysqli_query($conn,$sql);

mysqli_query($conn,$sql);コードに2回あります。if()に1回、外部に1回。これらはそれぞれデータベースに挿入されます。

ここで注意すべき点はmysqli_query、ifの内部が評価されることです。つまり、ifが実行され、関数呼び出しの結果に対してifステートメントが実行されます。したがって、再度呼び出す必要はありません。

于 2013-03-18T22:28:29.730 に答える
2

Tusharは2つのmysqliクエリを指摘しましたが、彼は正しいです。それに加えて、現在のコードではSQLインジェクションが可能になるため、セキュリティ上の問題が発生します...

次のようにコードを変更してください。

 $first_name   = mysqli_escape_string($conn, $_POST['firstname']);
 $last_name    = mysqli_escape_string($conn, $_POST['lastname']);
 $display_name = mysqli_escape_string($conn, $_POST['displayname']);
 $email        = mysqli_escape_string($conn, $_POST['email']);
 $password     = mysqli_escape_string($conn, $_POST['password']);
 $add_line1    = mysqli_escape_string($conn, $_POST['addline1']);
 $add_line2    = mysqli_escape_string($conn, $_POST['addline2']);
 $city         = mysqli_escape_string($conn, $_POST['city']);
 $county       = mysqli_escape_string($conn, $_POST['county']);
 $postcode     = mysqli_escape_string($conn, $_POST['postcode']);
于 2013-03-18T22:38:09.690 に答える