![](/img/trans.png)
[英]How do I get my external send mail php file to check if the captcha is correct
[英]How do I check if entered captcha code is valid in php?
我有一张带有验证码的注册表我想知道如何检查输入的验证码是否有效。
如果有效则完成注册过程如果不显示错误信息。
我做了一个例子,但我得到了如下图所示的错误:
注册.php
<?php
require_once "db.php";
session_start();
if (isset($_SESSION["user_id"])) {
header("location: acceuil.php");
}
$error = false;
if (isset($_POST["register_user"])) {
$name = mysqli_real_escape_string($con, $_POST["name"]);
$email = mysqli_real_escape_string($con, $_POST["email"]);
$password = mysqli_real_escape_string($con, $_POST["password"]);
$confirm_password = mysqli_real_escape_string($con, $_POST["confirm_password"]);
if (!preg_match("/^[a-zA-Z ]+$/", $name)) {
$error = true;
$uname_error = "Le nom ne doit contenir que des alphabets et des espaces !";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = true;
$email_error = "Veuillez saisir une adresse e-mail valide !";
}
if (strlen($password) < 6) {
$error = true;
$password_error = "Le mot de passe doit comporter au moins 6 caractères !";
}
if ($password != $confirm_password) {
$error = true;
$cpassword_error = "Le mot de passe et la confirmation du mot de passe ne correspondent pas !";
}
if(sha1($_POST['verif_code']) == $_SESSION['verif_code']) {
$captcha = $_POST['verif_code'];
} else {
$error = true;
$error_message = "The captcha code you entered does not match. Please try again.";
}
// Check the database to make sure
// a user does not already exist with the same name and/or email
$query = "SELECT * FROM users WHERE name='$name' OR email='$email' LIMIT 1";
$result = mysqli_query($con, $query);
$user = mysqli_fetch_assoc($result);
if ($user) {
if ($user["name"] === $name) {
$error_message = "Ce nom est déjà utilisé !";
}
if ($user["email"] === $email) {
$error_message = "Cet e-mail est déjà utilisé !";
}
} else {
// Finally, register user if there are no errors in the form
if (mysqli_query($con, "INSERT INTO users(name, email, password) VALUES('" . $name . "', '" . $email . "', '" . md5($password) . "')")) {
$success_message = "Votre compte a été créé avec succès.";
// header("Refresh:2 ; URL=auth.php");
} else {
$error_message = "Oups! quelque chose ne va pas lors de l'inscription! Veuillez réessayer plus tard!";
}
}
}
?>
<!DOCTYPE html>
<!--[if lt IE 7]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="en">
<!--<![endif]-->
<head>
<!-- Required meta tags -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="Project Description" />
<meta name="author" content="Project Author" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Inscription</title>
<!-- CSS Libraries -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" />
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" />
<style>
body {
font-family: "Poppins", sans-serif;
}
</style>
</head>
<body class="bg-light">
<div class="container col-md-6 mt-5">
<?php
if (isset($success_message)) {
echo "<div class='alert alert-success'><i class='fas fa-check-circle me-1'></i> " . $success_message . "</div>";
}
if (isset($error_message)) {
echo "<div class='alert alert-danger'><i class='fas fa-exclamation-triangle me-1'></i> " . $error_message . "</div>";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" autocomplete="off">
<fieldset>
<legend class="h2 mb-4">Connectez-vous et profitez de nos meilleur produits</legend>
<div class="row mb-3">
<label for="name" class="col-sm-4 col-form-label"><i class="fas fa-user-circle me-1"></i> Name <sup class="fw-bold text-danger">*</sup></label>
<div class="col-sm-8">
<input type="text" id="name" class="form-control" name="name" value="<?php if($error) echo $name; ?>" autofocus required />
<?php if (isset($uname_error)) echo "<div class='text-danger mt-3'><i class='fas fa-exclamation-triangle me-1'></i> ". $uname_error ."</div>"; ?>
</div>
</div>
<div class="row mb-3">
<label for="email" class="col-sm-4 col-form-label"><i class="fas fa-at me-1"></i> E-mail <sup class="fw-bold text-danger">*</sup></label>
<div class="col-sm-8">
<input type="email" id="email" class="form-control" name="email" value="<?php if($error) echo $email; ?>" required />
<?php if (isset($email_error)) echo "<div class='text-danger mt-3'><i class='fas fa-exclamation-triangle me-1'></i> ". $email_error ."</div>"; ?>
</div>
</div>
<div class="row mb-3">
<label for="password" class="col-sm-4 col-form-label"><i class="fas fa-key me-1"></i> Mot de passe <sup class="fw-bold text-danger">*</sup></label>
<div class="col-sm-8">
<input type="password" id="password" class="form-control" name="password" value="" required />
<?php if (isset($password_error)) echo "<div class='text-danger mt-3'><i class='fas fa-exclamation-triangle me-1'></i> ". $password_error ."</div>"; ?>
</div>
</div>
<div class="row mb-3">
<label for="confirm_password" class="col-sm-4 col-form-label"><i class="fas fa-key me-1"></i> Retapez votre MdP <sup class="fw-bold text-danger">*</sup></label>
<div class="col-sm-8">
<input type="password" id="confirm_password" class="form-control" name="confirm_password" value="" required />
<?php if (isset($cpassword_error)) echo "<div class='text-danger mt-3'><i class='fas fa-exclamation-triangle me-1'></i> ". $cpassword_error ."</div>"; ?>
</div>
</div>
<div class="row mb-3">
<img src="captcha/verif_code_gen.php" class="col-sm-4 col-form-label" alt="code de vérification" />
<div class="col-sm-8">
<input type="text" class="form-control" name="verif_code" value="" required />
<?php if (isset($captcha_error)) echo "<div class='text-danger mt-3'><i class='fas fa-exclamation-triangle me-1'></i> ". $captcha_error ."</div>"; ?>
</div>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary" name="register_user">S'inscrire<i class="fas fa-arrow-alt-circle-right ms-1"></i></button>
</div>
</fieldset>
</form>
<p>
Already a member? <a href="auth.php">Sign in</a>
</p>
</div>
<!-- JS Libraries -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
验证码/verif_code_gen.php
<?php
session_start();
header("Content-type: image/png");
$_img = imagecreatefrompng("fond_verif_img.png");
$avant_plan = imagecolorallocate($_img, 255, 255, 255);
$nombre = mt_rand(100000, 999999);
$_SESSION["alert_nbr"] = $nombre;
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
?>
验证码.php
<?php
session_start();
$code=rand(1000,9999);
$_SESSION["code"]=$code;
$image = imagecreatetruecolor(50, 24);
$background = imagecolorallocate($image, 245, 73, 73);
$forground = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $background);
imagestring($image, 5, 5, 5, $code, $forground);
header("Cache-Control: no-cache, must-revalidate");
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
我该如何解决这个问题?
许多事情,许多东西。
您在每个脚本中使用了不同的变量名称。
其次,你为什么要创建一个随机数两次? 让我们做一些清理和简化:
在寄存器 php中:
在 error = false 之后插入这个
$error = false;
$_SESSION["captcha_code"] = mt_rand(100000, 999999);
将以下行更改为:
if ( $_POST[ 'verif_code' ] ) != $_SESSION[ 'captcha_code' ] ) {
$error = true;
$error_message = "The captcha code you entered does not match. Please try again.";
} else {
// Check the database to make sure
// a user does not already exist with the same name and/or email
$query = "SELECT * FROM users WHERE name='$name' OR email='$email' LIMIT 1";
$result = mysqli_query( $con, $query );
$user = mysqli_fetch_assoc( $result );
if ( $user ) {
if ( $user[ "name" ] === $name ) {
$error_message = "Ce nom est déjà utilisé !";
}
if ( $user[ "email" ] === $email ) {
$error_message = "Cet e-mail est déjà utilisé !";
}
} else {
// Finally, register user if there are no errors in the form
if ( mysqli_query( $con, "INSERT INTO users(name, email, password) VALUES('" . $name . "', '" . $email . "', '" . md5( $password ) . "')" ) ) {
$success_message = "Votre compte a été créé avec succès.";
// header("Refresh:2 ; URL=auth.php");
} else {
$error_message = "Oups! quelque chose ne va pas lors de l'inscription! Veuillez réessayer plus tard!";
}
}
}
那么captcha/verif_code_gen.php应该是:
session_start();
header("Content-type: image/png");
$_img = imagecreatefrompng("fond_verif_img.png");
$avant_plan = imagecolorallocate($_img, 255, 255, 255);
$nombre = $_SESSION["captcha_code"];
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
现在你不需要captcha.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.