Для вашего второго вопроса, исправьте ajax:
if(r.error){
$('#email').val(r.error);
} else {
$('#email').val(r.msg);
$("#form").hide(); $("#code").fadeIn('slow');
}
и в скрипте php исправьте:
$msg = "Thank you! Subscription Code: " . $email_code;
if($ajax){
echo json_encode(array('msg' => $msg)); // add this
//throw new Exception($msg); // delete this
}
Вам нужно будет изменить в соответствии с вашими вариантами ...
Новые файлы:
https://colorchallenge.com/comingsoon/cs.txt (php)
https://colorchallenge.com/comingsoon/script.txt (javascript)
http://www.colorchallenge.com/comingsoon/coming-soon.php
http://www.colorchallenge.com/comingsoon/coming-soon.txt
и SQL: http://www.colorchallenge.com/comingsoon/table.sql
Новый альтернативный ответ с действительно случайным кодом:
Обновленная таблица SQL:
CREATE TABLE IF NOT EXISTS `coming_soon_emails` (
`email_id` int(11) NOT NULL auto_increment,
`email` varchar(64) collate utf8_unicode_ci NOT NULL,
`code` char(7) collate utf8_unicode_ci DEFAULT NULL,
`ts` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`email_id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `code` (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
в comming-soon.php:
Добавить после: "includes / connect.php";
function gen_code($codeLen = 7) {
$code = '';
for ($i=0; $i<$codeLen; $i++) {
$d=rand(1,30)%2;
$code .= $d ? chr(rand(65,90)) : chr(rand(48,57));
}
return $code;
}
function add_code($email_id) {
$code = gen_code(7);
$mysqli->query("UPDATE coming_soon_emails SET code='" . $code ."' WHERE email_id='" . $email_id . "'");
if($mysqli->affected_rows != 1) {
add_code($email_id);
} else return $code;
}
Затем измените:
if($mysqli->affected_rows != 1){
throw new Exception('This email already exists in the database.');
}
На:
if($mysqli->affected_rows != 1){
throw new Exception('This email already exists in the database.');
} else {
$email_code = add_code($mysqli->insert_id);
}
Наконец, обновите сообщение еще раз, включив в него код ... Изменение:
$msg = "Thank you!";
Быть:
$msg = "Thank you! Subscription Code: " . $email_code;
Также (без редактирования javascript), чтобы убедиться, что он предоставляет ответ, который вы можете изменить:
if($ajax){
die('{"status":1}');
}
$msg = "Thank you! Subscription Code: " . $email_code;
на:
$msg = "Thank you! Subscription Code: " . $email_code;
if($ajax){
throw new Exception($msg);
}
По сути, последнее изменение просто заставляет его всегда выдавать исключение .. которое затем обеспечивает отображение сообщения, если это ajax-запрос
---
Полная окончательная копия ближайшие-скоро. Php
<?php
require "includes/connect.php";
function gen_code($codeLen = 7) {
$code = '';
for ($i=0; $i<$codeLen; $i++) {
$d=rand(1,30)%2;
$code .= $d ? chr(rand(65,90)) : chr(rand(48,57)); }
return $code;
}
function add_code($email_id) {
global $mysqli;
$code = gen_code(7);
$mysqli->query("UPDATE coming_soon_emails SET code='" . $code ."' WHERE email_id='" . $email_id . "'");
if($mysqli->affected_rows != 1) {
add_code($email_id);
} else return $code; }
$msg = '';
if($_POST['email']){
// Requested with AJAX:
$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
try{
if(!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
throw new Exception('Invalid Email!');
}
$mysqli->query("INSERT INTO coming_soon_emails
SET email='".$mysqli->real_escape_string($_POST['email'])."'");
if($mysqli->affected_rows != 1){
throw new Exception('This email already exists in the database.');
} else {
$email_code = add_code($mysqli->insert_id);
}
$msg = "Thank you! Subscription Code: " . $email_code;
if($ajax){
throw new Exception($msg);
}
}
catch (Exception $e){
if($ajax){
die(json_encode(array('error'=>$e->getMessage())));
}
$msg = $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX-ed Coming Soon Page with jQuery and PHP | Tutorialzine Demo</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" />
<link rel="stylesheet" type="text/css" href="css/nivo-slider.css" />
</head>
<body>
<div id="page">
<h1>Coming Soon</h1>
<div id="slideshowContainer">
<div id="slideshow">
<img src="img/slides/slide1.jpg" width="454" height="169" alt="Coming Soon: Our Awesome Web App">
<img src="img/slides/slide2.jpg" width="454" height="169" alt="Extensive Functionality">
<img src="img/slides/slide3.jpg" width="454" height="169" alt="Complete with an iPhone App">
</div>
</div>
<h2>Subscribe</h2>
<form method="post" action="">
<input type="text" id="email" name="email" value="<?php echo $msg?>" />
<input type="submit" value="Submit" id="submitButton" />
</form>
</div>
<!-- Feel free to remove this footer -->
<div id="footer">
<div class="tri"></div>
<h1>AJAX-ed Coming Soon Page</h1>
<a class="tzine" href="http://tutorialzine.com/2010/10/ajaxed-coming-soon-page/">Read & Download on</a>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="js/jquery.nivo.slider.pack.js"></script>
<script src="js/script.js"></script>
</body>
</html>