[ad_1]
<?php $driver = new mysqli_driver(); $driver -> report_mode = MYSQLI_REPORT_OFF; if(isset($_SESSION['log'])) { header('Location: welcome.php'); exit(); } else { if($_SERVER["REQUEST_METHOD"] == "POST") { function validData($x) { $x = trim($x); $x = stripslashes($x); $x = htmlspecialchars($x); return $x; } $server = "localhost"; $user = "root"; $pass = ""; $db = "codescracker"; $conn = @new mysqli($server, $user, $pass, $db); if($conn->connect_errno) { echo "Database connection failed!<BR>"; echo "Reason: ", $conn->connect_error; exit(); } $fname = $lname = $uname = $email = $pass = ""; $unameE = $emailE = $passE = ""; $fname = validData($_POST["firstname"]); $lname = validData($_POST["lastname"]); $uname = validData($_POST["username"]); $email = validData($_POST["email"]); $pass = validData($_POST["password"]); if(empty($uname)) $unameE = "Username field was empty!<BR>"; if(empty($email)) $emailE = "Email Id field was empty!<BR>"; if(empty($pass)) $passE = "Password field was empty!<BR>"; if(strlen($uname)<6) $unameE .= "Username must be of 6 or more characters!<BR>"; if(strlen($pass)<6) $passE .= "Password must be of 6 or more characters!<BR>"; if(!filter_var($email, FILTER_VALIDATE_EMAIL)) $emailE .= "Enter a valid Email ID!<BR>"; if(!empty($unameE) || !empty($emailE) || !empty($passE)) $err = "Try again"; else { $sql = "INSERT INTO `users`(`FirstName`, `LastName`, `Username`, `Email`, `Password`) VALUES (?, ?, ?, ?, ?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("sssss", $fname, $lname, $uname, $email, $pass); if($stmt->execute()) { $_SESSION['log'] = $uname; header('Location: welcome.php'); exit(); } else $execE = "Something went wrong<BR>Please try again!"; } $conn->close(); } } ?> <HTML> <HEAD> <STYLE> .form{width: 400px; margin: auto; padding: 12px; border-left: 2px solid #ccc; border-radius: 18px;} h2{color: purple; text-align: center;} input{padding: 12px; width: 100%; margin-bottom: 12px; border: 0px; border-radius: 6px; background-color: #ccc;} button{margin: 20px 0px; width: 100%; background-color: #008080; color: white; padding: 12px; font-size: 1rem; border-radius: 6px;} p{text-align: center;} button:hover{cursor: pointer;} .red{color: red;} </STYLE> </HEAD> <BODY> <DIV class="form"> <H2>User Registration Form</H2> <FORM name="register" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> <LABEL>First Name</LABEL><BR> <INPUT type="text" name="firstname" placeholder="First Name"><BR> <LABEL>Last Name</LABEL><BR> <input type="text" name="lastname" placeholder="Last Name"><BR> <LABEL>Username <?php if(!empty($unameE)) echo "<SPAN class=\"red\">*</SPAN>"; else echo "*"; ?> </LABEL><BR> <INPUT type="text" name="username" placeholder="Create Username" required><BR> <LABEL>Email <?php if(!empty($emailE)) echo "<SPAN class=\"red\">*</SPAN>"; else echo "*"; ?> </LABEL><BR> <INPUT type="text" name="email" placeholder="Email ID" required><BR> <LABEL>Password <?php if(!empty($passE)) echo "<SPAN class=\"red\">*</SPAN>"; else echo "*"; ?> </LABEL><BR> <INPUT type="text" name="password" placeholder="Create Password" required><BR> <BUTTON type="submit">Register</BUTTON> </FORM> <?php if(isset($err)) { echo "<DIV class=\"red\">"; if(!empty($unameE)) echo $unameE; if(!empty($emailE)) echo $emailE; if(!empty($passE)) echo $passE; echo "</DIV>"; } elseif(isset($execE)) echo $execE; else { echo "<P>Direction: Username and Password must be of 6 or more characters.<BR>"; echo "Star (*) Fields must not be empty.<BR>"; echo "Special characters are not allowed.</P>"; } ?> <P>Already registered ? <a href="login.php">Login</a></P> </DIV> </BODY> </HTML> The output produced by above PHP MySQLi user registration form, is shown in the snapshot given below:
私が試したこと:
今のところ私は何も試していません
解決策 1
エラー メッセージを確認すると、多くの情報が得られます。 それが発生するファイルを示します。 login.php
、それが起こった行を示します。66
そして、何が間違っていたかを示します。 call to a member function bind_param() on bool
したがって、66 行目に進みます。
$stmt->bind_param("sssss", $fname, $lname, $uname, $email, $pass);
そしてそれは呼びます bind_param
の上 $stmt
それがどうして間違っているのでしょうか? 上の行を見て、どこにあるかを確認してください。 $stmt
値がロードされました:
$stmt = $conn->prepare($sql); $stmt->bind_param("sssss", $fname, $lname, $uname, $email, $pass); if($stmt->execute())
次に、ドキュメントを見てください。 prepare
メソッドを実行して、その戻りコードを確認します。 PHP:mysqli::prepare – マニュアル[^]
引用:mysqli_prepare() はステートメント オブジェクトを返すか、エラーが発生した場合は false を返します。
ああ! エラーはこう言いました bool
関与していたので、 prepare
戻ってきています false
。
つまり、何らかの理由で失敗したということです。
SQL は非常に合理的であるように見えます。
INSERT INTO `users`(`FirstName`, `LastName`, `Username`, `Email`, `Password`) VALUES (?, ?, ?, ?, ?)
したがって、接続が原因である可能性がありますが、システムにアクセスできないためテストできません。
ですから、そこから始めて、何が間違っているのかを探してください。
コーディング中には、おそらく 1 日に何度もエラーが発生することを覚悟しておく必要があります。どれだけ経験があるかに関係なく、誰もがエラーを経験します。 場合によっては、変数やキーワードのスペルを間違えることがあります。 文字列やコード ブロックを閉じるのを忘れることがあります。 猫がキーボードの上を歩いて、非常に奇妙な文字を入力することがあります。 メソッド呼び出しに必要なパラメーターの数を忘れてしまうことがあります。
我々はすべての間違いを犯します。
そして、私たち全員が構文エラーを修正する必要があるため、構文エラーを修正する必要があります。そして、他の人が修正してくれるのを待つよりも、自分で修正する方法を学んで修正する方がずっと早いのです。 したがって、エラー メッセージの読み方と、コンパイラーが間違っていると伝えている内容に照らして書かれたコードを解釈する方法を学ぶのに少し時間を投資してください。それは本当に役に立ちます。
それで、これを読んでください: 問題を解決するコードの書き方、初心者ガイド パート 2: 構文エラー[^] – 次回エラーが発生したときに役立つはずです。
そして…それよりもさらに深い問題を修正する必要があります。パスワードをクリア テキストで保存しないでください。これは重大なセキュリティ リスクです。 その方法については、ここにいくつかの情報があります。 パスワードの保管: その方法。[^]
また、これが Web ベースであり、欧州連合ユーザーがいる場合は、GDPR が適用されるため、パスワードを機密データとして扱い、安全な方法で保存する必要があることを意味します。 テキストはそのどちらでもないので、罰金は …. うーん … 未払いになる可能性があります。 2018年12月、ドイツの企業はそれだけの理由で2万ユーロという比較的低額の罰金を科せられた。
解決策 2
prepare(‘INSERT INTO “ユーザー” (ユーザー名、電子メール、名、姓、パスワード) VALUES (:ユーザー名、:電子メール、:名、:姓、:パスワード)’);
$stmt->bindParam(‘:ユーザー名’, $ユーザー名);
$stmt->bindParam(‘:email’, $email);
$stmt->bindParam(‘:firstname’, $firstname);
$stmt->bindParam(‘:lastname’, $lastname);
$stmt->bindParam(‘:password’, $hashedPassword);
if ($stmt->execute()) {
echo ‘サインアップが成功しました!’;
} それ以外 {
echo ‘エラー: サインアップできません。’;
}
}
}
?>
[ad_2]
コメント