【问题标题】:form Submit AJAX + PHP表单提交 AJAX + PHP
【发布时间】:2015-01-23 17:14:23
【问题描述】:

周日,我编写了一个工作脚本,将表单数据发送到我的数据库并使用 Mandrill 发送电子邮件。

从星期三开始,我的脚本就不再工作了。我正在尝试查找错误,但没有任何修复。

我认为我的 PHP 脚本中有一个错误,但我不知道在哪里以及发生了什么。 我的 AJAX 的控制台日志返回正确的数据,但 PHP 没有做任何事情。它不接收数据。

有我的HTML

<form method="POST" id="formContact" action"#">
                <input type="text" placeholder="Prénom" name="name" id="formName">
                <input type="email" placeholder="Email" name="email" id="formEmail">
                <input type="text" placeholder="Sujet" name="subject" id="formSubject">
                <textarea cols="30" rows="10" placeholder="Ton message" name="message" id="formMessage"></textarea>
                <button type="submit" id="formSubmit">Envoyer</button>
            </form>

JavaScript

$(document).ready(function() {
$('#formContact').submit(function(event) {
    var formData = {
        'name' : $('#formName').val(),
        'email' : $("#formEmail").val(),
        'subject' : $("#formSubject").val(),
        'message' : $("#formMessage").val()
    };
    $.ajax({
        url: "commons/test.php",
        type: "POST",
        data: formData,
        dataType: 'json',
        encode: true
    })
    .done(function(data){
        console.log(formData);
        console.log(data);

        if( ! data.success){
            alert('Error');
        }else{
            alert('Success');
        }
    });
    event.preventDefault();
  });
});

PHP

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('../adm/dbconnect.php'); <- this work well
    $data = array();
    if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['message']))
    {
        // var_dump($_POST['name']);
        // var_dump($_POST['email']);
        // var_dump($_POST['subject']);
        // var_dump($_POST['message']);

        $to = 'contact@sheguey.land';
        $content = ''.$_POST['message'].'';
        $subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
        $from = ''.$_POST['email'].'';

        $uri = 'https://mandrillapp.com/api/1.0/messages/send.json';
        $api_key = 'my mandrill api key';
        $content_text = strip_tags($content);

        $postString = '{
            "key": "' . $api_key . '",
            "message": {
            "html": "' . $content . '",
            "text": "' . $content_text . '",
            "subject": "' . $subject . '",
            "from_email": "' . $from . '",
            "from_name": "' . $from . '",
            "to": [
            {
                "email": "' . $to . '",
                "name": "' . $to . '"
            }
            ],
            "track_opens": true,
            "track_clicks": true,
            "auto_text": true,
            "url_strip_qs": true,
            "preserve_recipients": true
            },
            "async": false
        }';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uri);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
        $result = curl_exec($ch);



        $req = $bdd->prepare('INSERT INTO contactform (name, email, subject, message) VALUES( :name,  :email,  :subject,  :message)');
        $req->execute(array(
                'name' => $_POST['name'],
                'email' => $_POST['email'],
                'subject' => $_POST['subject'],
                'message' => $_POST['message']
            ));
        $data['success'] = true;

    }else{
        $data['success'] = false;
    }
    echo json_encode($data);

经过两天的研究(更改 PHP 脚本、AJAX 脚本等),我不明白为什么这不再起作用了。

【问题讨论】:

  • 是的,我有,检测到 0 个错误。
  • 脚本走了多远?不超过包含,还是停在某条线上?尝试使用var_dump()/echos 来解决。
  • 它转到“if”行,说所有 $_POST[''] 可能都是空的并回显“$data = false”

标签: javascript php jquery ajax forms


【解决方案1】:

您可能需要在 formData '"' + $('#formName').val() + '"' 中使用引号

【讨论】:

    【解决方案2】:

    双单引号是什么原因?

    $content = ''.$_POST['message'].'';
    $subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
    $from = ''.$_POST['email'].'';
    

    我会这样做:

    $content = (string)$_POST['message'];
    $subject = "Nouveau message de ".$_POST['email']." - Sheguey Land";
    $from    = (string)$_POST['email'];
    

    如果取消注释,它是否会在 if 语句之后 var_dump $_POST 值?

    var_dump($_POST); //as a whole
    

    您可能需要设置 error_reporting(E_ALL);到错误报告(E_ALL & E_STRICT);有时会为您提供更多信息。

    【讨论】:

      【解决方案3】:

      我已经找到问题并解决了。

      .htaccess 文件与 PHP 文件在同一个文件夹中,我不知道它为什么在那里。脚本工作。

      无论如何感谢您的帮助;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 2014-02-14
        • 2011-10-03
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多