【问题标题】:Why is my SQL Insert Duplicating为什么我的 SQL 插入重复
【发布时间】:2016-10-16 15:30:02
【问题描述】:

所以我在客户端页面上收到了一个 AJAX 调用,该页面正在到达服务器并正在执行。但是,对于每次提交,我都会收到 2 个插入语句。我一生都无法弄清楚第二个插入物是从哪里来的。也许一双新的眼睛可以对此有所启发。

表单(在 .blade.php 中):

{!! Form::open(array('action'=>'PhishingController@createNewProject')) !!}
{!! Form::label('projectNameText','Project Name: ') !!}
{!! Form::text('projectNameText',null,array('name'=>'projectNameText')) !!}
{!! Form::label('projectAssigneeText','Project Assignee') !!}
{!! Form::text('projectAssigneeText',null,array('name'=>'projectAssigneeText')) !!}
{!! Form::submit('Submit',array('id'=>'submitButton')) !!}
{!! Form::close() !!}

PHP 控制器:

$projectName = $request->input('projectNameText');
$projectAssignee = $request->input('projectAssigneeText');
$date = date("Y-m-d");
$db = $this->openDatabaseDefault();
$sql = "INSERT INTO database.table(PRJ_ProjectId,PRJ_ProjectName,PRJ_ProjectAssignee,PRJ_ProjectStart,
            PRJ_ProjectLastActive,PRJ_ProjectStatus,PRJ_ProjectTotalUsers,PRJ_EmailViews,PRJ_WebsiteViews,
            PRJ_ProjectTotalReports) VALUES (null,'$projectName','$projectAssignee','$date','$date','Inactive',0,0,0,0);";
if(!$projects = $db->query($sql)) {
        echo "Sorry, the website is experiencing technical difficulties.";
        echo "Error: Our query failed to execute and here is why: \n";
        echo "Query: " . $sql . "\n";
        echo "Errno: " . $db->errno . "\n";
        echo "Error: " . $db->error . "\n";
        exit;
}
$db->close();
return redirect()->to('http://localhost:8888/generateEmails');

AJAX:

$('document').ready(function() {
    $('#submitButton').click(function(e) {
        $.ajaxSetup({
            headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
        });
        console.log("clicked");
        var projectName = $('#projectNameText').val();
        var projectAssignee = $('#projectAssigneeText').val();
        $.ajax({
            method: "POST",
            //url: "http://localhost:8888/projects/create",
            data: {projectNameText: projectName, projectAssigneeText: projectAssignee}
        })
    });
});

此时任何事情都值得赞赏。

【问题讨论】:

  • 在 js 控制台中,您每次点击看到多少点击消息? 1 还是 2?
  • 只有一次点击通过。有一次,我什至在控制器上放了一条 Else 语句,以查看 If 语句是否重复执行。它只回响一次。
  • 你在ajax相关的php文件中调用return redirect()->to('http://localhost:8888/generateEmails');?对我来说那部分似乎很奇怪
  • 重定向的目标是一旦插入发生,我将其发送到另一个页面。这个过程背后的想法是用户正在创建一个发送电子邮件的“项目”。他们可以在形成新工作时选择一个项目或创建一个新项目。当他们选择创建一个新的时,他们会被重定向到这个论坛。在他们创建新项目后,我只是将他们送回上一页以继续从事新工作。本地主机只是因为它正在开发中。一旦上线,它将是一个完全合格的域。
  • 你明白ajax的意思吗?通常当您调用 ajax 时,您应该期待一些简单的响应,但在您的情况下,我猜您的 ajax 调用会返回完整的 html 页面?你用那个页面做什么?

标签: mysql ajax laravel-5 laravel-blade


【解决方案1】:

感谢 Alex 对概念性 ajax 的更改。原来 PHP 重定向导致我的方法在重定向之前再次触发。不知道为什么,但是通过将重定向推送到 AJAX 成功函数中,它修复了我的重复插入。

修改后的 AJAX:

$.ajax({
    method: "POST",
    data: {projectNameText: projectName, projectAssigneeText: projectAssignee},
    success: function() {
        window.location.replace("http://localhost:8888/generateEmails");
    },
    error: function(xhr,status,error) {
        alert('Unable to create new project.');
        console.log("xhr: " + xhr);
        console.log('status: ' + status);
        console.log('error: ' + error);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2017-01-20
    相关资源
    最近更新 更多