-1

いくつかの投稿変数をデータベースに挿入しようとしていますが、うまく動作しないようです。これが現時点での私のコードです。

 include('db_connect.php'); // = $connection

$name = $_POST['name'];
$email = $_POST['email'];

$result = mysqli_query($connection,"SELECT * FROM users WHERE email='$email'");
$row = mysqli_num_rows($result);

if($row==0)
{
echo("email was not found");
mysqli_query($connection,"INSERT INTO users (name, email, comfirmed) VALUES ('".$name."', '".$email."', 0)");

}
else
{
    echo("email was found");
}

インサートのバリエーションをいくつか試しましたが、うまくいきません。変数を静的な値に置き換えると、正常に機能し、データベースが更新されます。また、この時点でセキュリティに問題があることも認識していますが、挿入を機能させることに集中してから、戻ってそれらを修正したいと考えています。

4

1 に答える 1

0

あなたのコードには多くの欠陥があります。最も重要なものは

  • このコードにはエラー報告がありません
  • 変数を適切にフォーマットしません
  • それはmysqliを使用しています

少なくともそうでなければならない

ini_set('display_errors',1);
error_reporting(E_ALL);
include('db_connect.php'); // as shown in http://stackoverflow.com/tags/pdo/info

$sql = "SELECT 1 FROM users WHERE email=?";
$stm = $pdo->prepare($sql);
$stm->execute(array($_POST['email']));

if ($stm->fetchColumn()) {

    echo("email was not found");
    $sql = "INSERT INTO users (name, email, comfirmed) VALUES (?, ?, 0)");
    $stm = $pdo->prepare($sql);
    $stm->execute(array($_POST['name'],$_POST['email']));

} else {
    echo("email was found");
}

または、電子メールに一意のインデックスがある場合(そうでなければならない)、単一のクエリで作成できます

ini_set('display_errors',1);
error_reporting(E_ALL);
include('db_connect.php'); // as shown in http://stackoverflow.com/tags/pdo/info

$sql = "INSERT IGNORE INTO users (name, email, comfirmed) VALUES (?, ?, 0)");
$stm = $pdo->prepare($sql);
$stm->execute(array($_POST['name'],$_POST['email']));

if ($stm->rowCount()) {
    echo("email was not found");
} else {
    echo("email was found");
}
于 2013-06-11T05:57:04.777 に答える