php - (PHP) 卡住提交表单反垃圾邮件
问题描述
所以我几乎完成了这个反垃圾邮件谷歌recaptcha v3表单的创建。我失败到最后。你能看出什么问题吗?我不使用它来将数据发送到数据库,而是发送到我的电子邮件。让我知道这是否是问题所在,但我认为不是。我快完成了,这是我到目前为止所做的:仍然无法保存数据错误
<?php
if(isset($_POST['submit'])){
// print_r($_POST);
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = [
'secret' => "censord",
'response' => $_POST['token'],
'remoteip' => $_SERVER['REMOTE_ADDR']
];
$options = array(
'http' => array(
'header' => "Content-type: application/
x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$res = json_decode($response, true);
if($res['success'] == true) {
//save data to database
echo '<div class="alert alert-success">
<strong>Success!</strong> Data is saved.
</div>';
} else {
echo '<div class="alert alert-warning">
<strong>warning!</strong> Failed to save data.
</div>';
}
}
?>
---------------------和形式
<?php
if(isset($_POST['submit'])){
$name = htmlspecialchars(stripslashes(trim($_POST['username'])));
$email = htmlspecialchars(stripslashes(trim($_POST['email'])));
$text = htmlspecialchars(stripslashes(trim($_POST['textt'])));
if(!preg_match("/^[A-Za-z .'-]+$/", $name)){
$name_error = 'Invalid name';
}
if(!preg_match("/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/", $email)){
$email_error = 'Invalid email';
}
if(strlen($text) === 0){
$message_error = 'Your message should not be empty';
}
if(preg_match('/http|www/i',$comments)) {
$error_message .= "We do not allow a url in the comment.<br />";
}
}
?>
<div id="container">
<div class="form-wrap">
<h1>Report bug</h1>
<p>It's free and you help us make the programming wikipedia better!</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<div class="form-group">
<label for="username">Name:</label>
<input type="text" name="username">
<p><?php if(isset($name_error)) echo $name_error; ?></p>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" name="email">
<p><?php if(isset($email_error)) echo $email_error; ?></p>
</div>
<div class="form-group">
<label for="textx">Message:</label>
<textarea type="text" name="textt" rows="22" cols="42"></textarea>
<p><?php if(isset($message_error)) echo $message_error; ?></p>
<button type="submit" name="submit" value="Submit" class="btn">Report us</button>
<?php
if(isset($_POST['submit']) && !isset($name_error) && !isset($subject_error) && !isset($email_error) && !isset($message_error)){
$to = 'censord'; // edit here
$body = " Name: $name\n E-mail: $email\n Message:\n $message";
if(mail($to, $subject, $body)){
echo '<p style="color: green">Message sent</p>';
}else{
echo '<p>Error occurred, please try again later</p>';
}
}
?>
<input type="hidden" id="token" name="token">
</form>
</div>
</div>
</body>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('censord', {action: 'homepage'}).then(function(token) {
console.log(token);
document.getElementById("token").value = token;
});
});
</script>
</html>
解决方案
推荐阅读
- excel - VBA - VBA 中用于检查格式的通配符
- python - 我在 pygame 上显示图像时遇到问题,看起来有点滞后。而且我也有声音延迟问题(我尝试减少缓冲区)
- sql - 一个查询中的多个 SELECT 使用相同的 WITH
- vb.net - 将小的双精度值转换为字符串时如何避免科学记数法?
- java - JPA 查询结果为空
- sql - 执行计划中是否考虑了功能?
- flutter - 试图在颤振中做颜色选择器
- python - 如何通过 API 从 DataDog 工具中获取与其服务关联的操作名称和端点?
- javascript - 使用 JavaScript 生成具有大量数组的随机密码
- r - 在 R 中:如何告诉 R 在应用两个条件时应将值插入分类列