return of several errors via ajax

0

I have a problem with the error return via ajax, follow the link:

Index.php

        <h4>Cadastro de Nome</h4>
                <form id="cadUsuario" method="post">
                    <label>Nome:</label><input required type="text" name="nome" id="nome" />
                    <br/><br/>
                    <input type="submit" value="Salvar" id="salvar" />
                </form>
<script type="text/javascript">
$(function () {    
$("#cadUsuario").submit(function (e) {
e.preventDefault();
var form_data = $(this).serialize(); 
$.ajax({
  type: "POST", 
  url: "salvar.php",
  dataType: "json", // Add datatype
  data: form_data
}).done(function (data) {
 var mensagem = '';

 if (!data.insert){
    mensagem = 'Falha no cadastro';
 }

 if(!data.email){
    mensagem += 'Falha no envio do email';
 }

 if(data.insert && data.email){
    mensagem = 'Operação realizda com sucesso';
 }

 alert(mensagem);
}, "json");
}); 
});

Save.php

    <?php
include "config.php";
if((isset($_POST['nome'])&&$_POST['nome']!="")){ 
$nome = $_POST['nome'];
$sql = "INSERT INTO 'nomes' ('idnomes','nomes') VALUES (NULL,'$nome')";

require('mail_config.php');

$resultado = array('insert' => false, 'email' => false); 

$resultado['insert'] = mysql_query($sql);
$resultado['email'] = sendMail("Testando o Mailer","Mensagem de teste do Mailer com Ajax".$nome."","[email protected]","Jefferson Androcles");

echo json_encode($resultado);
}

mail_config.php

<?php function sendMail($assunto,$msg,$destino,$nomeDestino) {
require_once('Mailer/class.phpmailer.php');
$mail             = new PHPMailer();
$mail->IsSMTP(); 
$mail->SMTPAuth   = true;                 
$mail->Host       = 'host';     
$mail->Port       = '587';                   
$mail->Username   = '[email protected]'; 
$mail->Password   = 'Senha';         
$mail->From = '[email protected]';
$mail->FromName = 'AndroclesMail';
$mail->IsHTML(true);
$mail->Subject    = utf8_decode($assunto);
$mail->Body    = utf8_decode($msg);
$mail->AddAddress($destino,utf8_decode($nomeDestino) );
if(!$mail->Send()){
echo '<span>Erro ao enviar, favor entre em contato pelo e-mail [email protected]!</span>';
}else{
}
}
?>

So far everything is working, except error 2 (exists => 2), I make the error purposely but it does not return anything, the other two, ie, 1 and 3 works normal, can help me ? and wanted to know if you have any jquery errors if it is a gambiarra or not kkkk, Thanks!

    
asked by anonymous 01.12.2016 / 14:00

1 answer

2

The if is comparing different things (insert performed or not and sending emails) and uses only a 'bucket' (return array) to play the result.

if($query === false){
    echo json_encode(array('existe' => 1));
} elseif ($MailEnv === false) {
    echo json_encode(array('existe' => 2));
}elseif ($query === true){
    echo json_encode(array('existe' => 3));
}

My suggestion to solve this is to create an array that has the result of both operations and then passed it to javascript via json_encode() . I left the point that sendMail() returns a boolean.

require('mail_config.php');

$resultado = array('insert' => false, 'email' => false); 

$resultado['insert'] = mysql_query($sql);
$resultado['email'] = sendMail("Testando o Mailer","Mensagem de teste do Mailer com Ajax".$nome."","[email protected]","Jefferson Androcles");

echo json_encode($resultado);

The responsibility of checking whether everything is right or not is now done by javascript.

.done(function (data) {
    var mensagem = '';

     if (!data.insert){
        mensagem = 'Falha no cadastro';
     }

     if(!data.email){
        mensagem += 'Falha no envio do email';
     }

     if(data.insert && data.email){
        mensagem = 'Operação realizda com sucesso';
     }

     alert(mensagem);
}   
    
01.12.2016 / 14:13