私は完全に送信されたメールでユーザーを確認しようとしていますが、リンクをクリックすると「挿入されていません」と表示されます。これは明らかに私が挿入領域に何か間違って書いたからですが、私はそれが何である可能性はよく分かりません。ここに私のスクリプトは次のとおりです。検証が機能しない
<?php
session_start();
require 'connect.inc.php';
$Username = $_GET['usr'];
$Code = $_GET['verify'];
$One = '1';
$sql = "SELECT Username, `VerficationCode`, `Verified` FROM user WHERE `Username`='$Username'";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$ActualCode = $row['VerficationCode'];
if ($Code == $ActualCode) {
$confirm = "INSERT INTO user (VerficationCode) VALUES ('$One') WHERE `Username` = '$Username'";
if(!mysqli_query($con,$confirm)){
$_SESSION['failed'] = 'Oops! Something went wrong. Please try again.';
echo 'not inserting.';
} else {
header ('Location: home.php');
$_SESSION['verified'] = 'Successfully verified.';
}
} else {
$_SESSION['verified'] = 'Unsuccessfully verified.';
header ('Location: index.php');
echo 'unsuccessful';
}
}
} else {
$_SESSION['failed'] = 'Oops! Something went wrong. Please try again.';
header ('failed.php');
}
?>
そして、ここでは私のconnect.inc.phpスクリプトです:
<?php
$con = mysqli_connect("localhost", "root", "", "users");
?>
編集:http://********.com/home.php?verify=friendov59c806e6bfc57TimerHotel20001&usr=TimerHotel
WHERE Username = '$ Username''では、挿入の際に 'where'を使うことはできません。これはSQLインジェクションにもオープンで、パラメータ化されています。 – chris85
insert文で 'where'を使用していますが、動作しません。既存の行を更新しようとしているのか、新しい行を挿入しようとしていますか? – coderodour
あなたのコードはSQLインジェクション攻撃に対して脆弱です。パラメーター化された照会とプリペアドステートメントを使用して、悪意のある入力値を使用して攻撃者がデータベースを侵害しないようにする必要があります。 http://bobby-tables.comでは、PHP/mysqliを使用して質問を安全に書く方法のいくつかの例と、リスクの説明を示します。 unsanitisedデータをSQLに直接挿入しないでください。 – ADyson