Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL赢得';是否按应有的方式插入和回显?_Php_Mysql_Validation - Fatal编程技术网

PHP/MySQL赢得';是否按应有的方式插入和回显?

PHP/MySQL赢得';是否按应有的方式插入和回显?,php,mysql,validation,Php,Mysql,Validation,以下脚本的作用(或应该做的): 连接到数据库 包括用于创建5位代码的功能 用户输入他们的电子邮件地址 检查它是否是有效的电子邮件 将电子邮件插入“电子邮件”列 检查电子邮件是否已经存在,如果已经存在,请让用户知道并中断脚本 运行创建5位代码的函数 检查“unique_code”列(如果已存在),如果已存在,则从5位代码创建函数循环 如果全部有效,则隐藏表单并显示(ajax来自单独的JS)thank you div 向用户显示唯一代码 所有操作都会运行,但是唯一的_代码不会插入数据库,并且在执

以下脚本的作用(或应该做的):

  • 连接到数据库
  • 包括用于创建5位代码的功能
  • 用户输入他们的电子邮件地址
  • 检查它是否是有效的电子邮件
  • 将电子邮件插入“电子邮件”列
  • 检查电子邮件是否已经存在,如果已经存在,请让用户知道并中断脚本
  • 运行创建5位代码的函数
  • 检查“unique_code”列(如果已存在),如果已存在,则从5位代码创建函数循环
  • 如果全部有效,则隐藏表单并显示(ajax来自单独的JS)thank you div
  • 向用户显示唯一代码
所有操作都会运行,但是唯一的_代码不会插入数据库,并且在执行“谢谢”时不会显示

我做错了什么,需要修改什么

谢谢大家!

代码

    <?php

    require "includes/connect.php";

    function generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

    $string = '';
    for ($i = 0; $i < $length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }

    return $string;

}


$msg = '';

if($_POST['email']){

    // Requested with AJAX:
    $ajax = ($_SERVER['HTTP_X_REQUESTED_WITH']  == 'XMLHttpRequest');

    try{
        //validate email
        if(!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
            throw new Exception('Invalid Email!');
        }

        //insert email
        $mysqli->query("INSERT INTO coming_soon_emails
                        SET email='".$mysqli->real_escape_string($_POST['email'])."'");

        //if already exists in email column
        if($mysqli->affected_rows != 1){
            throw new Exception('You are already on the notification list.');
        }

        if($ajax){
            die('{"status":1}');
        }

        //start creating unique 5 digit code
        $unique_code = "";
        $inserted = false;

        // Keep looping until we've inserted a record
        while(!$inserted) {

        // Generate a code
        $unique_code = generateCode();

        // Check if it exists
        if ($result = $mysqli->query("SELECT unique_code FROM coming_soon_emails WHERE unique_code = '$unique_code'")) {

        // Check no record exists
        if ($result->num_rows == 0) {

            // Create new record
            $mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('" . $mysqli->real_escape_string($_POST['email']) . "','$unique_code')");

            // Set inserted to true to ext loop
            $inserted = true;

            // Close the result object
            $result->close();

        }
        } else {

        // Quit if we can't check the database
        die('Something went wrong with select');
    }   
}

    }

    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>example</title>

<link rel="stylesheet" type="text/css" href="css/styles.css" />

</head>

<body>

<div id="container">

    <form id="form" method="post" action="">
        <input type="text" id="email" name="email" value="<?php echo $msg?>" />
        <input type="submit" value="Submit" id="submitButton" />
    </form>

    <div id="thankyou">
    Thank you! <?php echo $unique_code;?></p>
    </div>


</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>

实例

您似乎在类定义之外使用了
private
关键字,这是不允许的

在即将发布的电子邮件表中,您是否有“电子邮件”的主键?因为您已经为给定的电子邮件地址插入了一个条目,这将阻止您插入具有唯一值的第二个条目


确定唯一键后,为什么不进行更新而不是插入?

此代码段是类的一部分吗?还是你想在类之外使用private?@markbaker:这是我index.php的完整代码。在类中使用它的示例?@Mark Baker:更新的代码没有使用private,不能正常工作。@Pekka:你说得对!我已经测试过了,得到了同样的错误信息。@Pekka:在类之外?请举个例子。感谢you@jeremycollins我很难想出一个例子:)
private
仅用于类方法(请参阅PHP OOP手册)。您似乎没有在类上下文中使用它。你用它干什么?(编辑:如果你想在类中使用一个例子:
class classname{private$varname;}
@Pekka:我向某人寻求帮助,他们给了我使用private的函数。如果我从函数中删除private,除了将唯一的_代码插入数据库,然后在屏幕上显示给用户之外,一切都会正常工作“Thankyu”div.我不知道为什么。@Pekka:我已经更新了代码-它只是不想将唯一的代码插入数据库,然后将其显示给用户:/“email”是主要的:)我需要删除、修改什么?我建议将第二次插入更改为:UPDATE coming_soon_emails SET unique_code=“$unique_code”“其中email=$mysqli->real\u escape\u字符串($\u POST['email']))