Ajax - error messages with echo
Solved
lina-24
Posted messages
65
Status
Membre
-
lina-24 Posted messages 65 Status Membre -
lina-24 Posted messages 65 Status Membre -
Hello everyone,
I have a small problem with Ajax, I have a form that sends data to my database DDB via Ajax
But the issue is that I can no longer display error messages with echo "..."; since the page no longer refreshes.
When a user inserts a duplicate email address,
I would like to know how to display error messages; I was told to make an Ajax request but I don't have a clue how to do that, thanks in advance.
Configuration: Windows / Chrome 86.0.4240.183
I have a small problem with Ajax, I have a form that sends data to my database DDB via Ajax
But the issue is that I can no longer display error messages with echo "..."; since the page no longer refreshes.
When a user inserts a duplicate email address,
I would like to know how to display error messages; I was told to make an Ajax request but I don't have a clue how to do that, thanks in advance.
<?php
if($_POST) {
// database connection
$server = '127.0.0.1';
$username = 'root';
$password = '';
$dbname = 'base';
$conn = new mysqli($server, $username, $password, $dbname);
// check db connection error message DOES NOT WORK :( I don't know why?
if($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
}
else {
// echo "Successfully Connected";
}
$valid = array('success' => false, 'messages' => array());
$name = $_POST['fullName'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$type = explode('.', $_FILES['userImage']['name']);
$type = $type[count($type) - 1];
$url = '/uploads/files/' . uniqid(rand()) . '.' . $type;
if(in_array($type, array('gif', 'jpg', 'jpeg', 'png'))) {
if(is_uploaded_file($_FILES['userImage']['tmp_name'])) {
if(move_uploaded_file($_FILES['userImage']['tmp_name'], $url)) {
//******************************************************************
// Check for duplicate email before form validation
$sql = "SELECT * FROM visitor WHERE email = '$email' ";
$result = $conn->query($sql);
$row = $result -> fetch_array(MYSQLI_ASSOC);
if (empty($row)){
// In this case, the query returned nothing..
}else{
echo "The email already exists!";
}
// In this case, AJAX ALERT .. DOES NOT WORK :( I don't know why?
// ******************************************************
// Insert into database
$sql = "INSERT INTO visitor (Name, email, Image) VALUES ('$name','$email','$url')";
if($conn->query($sql) === TRUE) {
$valid['success'] = true;
$valid['messages'] = "Successfully Uploaded";
// In this case, AJAX ALERT .. WORKS :)
// ******************************************************
}
else {
$valid['success'] = false;
$valid['messages'] = "Error during upload";
}
// In this case, AJAX ALERT .. DOES NOT WORK :( I don't know why?
// ******************************************************
$conn->close();
}
else {
$valid['success'] = false;
$valid['messages'] = "Error while uploading";
}
}
}
echo json_encode($valid);
// upload the file
}
Configuration: Windows / Chrome 86.0.4240.183
8 réponses
You need to replace the ECHO (and the DIE)
with the use of variables
Your Ajax script in JS must certainly have the parameter datatype:"json"
So... you absolutely need to return JSON ...
You should have seen it..... if, in your Ajax call, you had managed the error or the fail in your JSON
PS: In the future, please specify the language in the code tags.
Complete explanations available here: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.
--
Best regards,
Jordane
with the use of variables
$valid['success'] = false; $valid['messages'] = "The email already exists!";
Your Ajax script in JS must certainly have the parameter datatype:"json"
So... you absolutely need to return JSON ...
You should have seen it..... if, in your Ajax call, you had managed the error or the fail in your JSON
PS: In the future, please specify the language in the code tags.
Complete explanations available here: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.
--
Best regards,
Jordane
Code Java Script
Code HTML
Code PHP
<script type="text/javascript"> var btnCust = '<button type="button" class="btn btn-default" title="Ajouter des balises de photo" ' + 'onclick="alert(\'Click on the Photo to upload.\')">' + '<i class="glyphicon glyphicon-tag"></i>' + '</button>'; $("#avatar-2").fileinput({ overwriteInitial: true, maxFileSize: 1500, showClose: false, showCaption: false, showBrowse: false, browseOnZoneClick: true, removeLabel: '', removeIcon: '<i class="glyphicon glyphicon-remove"></i>', removeTitle: 'Annuler ou réinitialiser les changements', elErrorContainer: '#kv-avatar-errors-2', msgErrorClass: 'alert alert-block alert-danger', defaultPreviewContent: '<img src="uploads/default-avatar.jpg" alt="Votre Avatar" style="width:160px"><h6 class="text-muted">Cliquez pour sélectionner</h6>', layoutTemplates: {main2: '{preview} ' + btnCust + ' {remove} {browse}'}, allowedFileExtensions: ["jpg", "png", "gif"] }); $(document).ready(function(){ $("#uploadImageForm").unbind('submit').bind('submit', function(){ var form = $(this); var formData = new FormData($(this)[0]); $.ajax({ url: form.attr('action'), type: form.attr('method'), data: formData, dataType: 'json', cache: false, contentType: false, processData: false, async: false, success:function(response) { if(response.success == true) { $("#messages").html('<div class="alert alert-success alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ response.messages + '</div>'); $('input[type="text"]').val(''); $(".fileinput-remove-button").click(); } else { $("#messages").html('<div class="alert alert-warning alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ response.messages + '</div>'); } } }); return false; }); }); </script> Code HTML
<div class="form-group"> <label for="email">email</label> <input name="email" type="text" required="required" class="form-control" id="email" placeholder="email"> </div> <div class="form-group"> <label for="exampleInputPassword1">Photo</label> <div id="kv-avatar-errors-2" class="center-block" style="width:800px;display:none"></div> <div class="kv-avatar center-block" style="width:200px"> <input id="avatar-2" name="userImage" type="file" class="file-loading"> </div> </div> <button type="submit" class="btn btn-default">Soumettre</button> </form> </div>
Code PHP
<?php if($_POST) { // connexion à la base de données $server = '127.0.0.1'; $username = 'root'; $password = ''; $dbname = 'base'; $conn = new mysqli($server, $username, $password, $dbname); // vérifier le message d'erreur de connexion à la base de données NE MARCHE PAS :( je ne sais pas pourquoi? if($conn->connect_error) { die("Connection Failed : " . $conn->connect_error); } else { // echo "Successfully Connected"; } $valid = array('success' => false, 'messages' => array()); $name = $_POST['fullName']; $lastname = $_POST['lastname']; $email = $_POST['email']; $type = explode('.', $_FILES['userImage']['name']); $type = $type[count($type) - 1]; $url = '/uploads/files/' . uniqid(rand()) . '.' . $type; if(in_array($type, array('gif', 'jpg', 'jpeg', 'png'))) { if(is_uploaded_file($_FILES['userImage']['tmp_name'])) { if(move_uploaded_file($_FILES['userImage']['tmp_name'], $url)) { //****************************************************************** // Vérification doublon email avant validation du formulaire $sql = "SELECT * FROM visitor WHERE email = '$email' "; $result = $conn->query($sql); $row = $result -> fetch_array(MYSQLI_ASSOC); if (empty($row)){ // dans ce cas, la requete n'a rien retourné.. }else{ $valid['success'] = false; $valid['messages'] = "L'email existe déjà !"; } // dans ce cas, ALERTE AJAX .. NE MARCHE PAS :( je ne sais pas pourquoi? // ****************************************************** // Insérer dans la base de données $sql = "INSERT INTO visitor (Name, email, Image) VALUES ('$name','$email','$url')"; if($conn->query($sql) === TRUE) { $valid['success'] = true; $valid['messages'] = "Téléchargement réussi"; // dans ce cas, ALERTE AJAX .. MARCHE :) // ****************************************************** } else { $valid['success'] = false; $valid['messages'] = "Erreur lors du telechargement"; } // dans ce cas, ALERTE AJAX .. NE MARCHE PAS :( je ne sais pas pourquoi? // ****************************************************** $conn->close(); } else { $valid['success'] = false; $valid['messages'] = "Erreur lors du téléversement"; } } } echo json_encode($valid); // téléverser le fichier }
Commence par modifier ton appel ajax comme ceci
et côté PHP, je pense que tu peux remplacer ton code par :
Puis vide le cache de ton navigateur et refait un essai.
Et si ça ne marche toujours pas, fais une capture de la CONSOLE de ton navigateur et montre la nous.
PS: Je te rappelle que pour débuguer de l'ajax, je te recommande fortement d'utiliser le navigateur firefox ... et surtout.. n'oublie pas d'activer le debugage XHR
--
Cordialement,
Jordane
$.ajax({ url: form.attr('action'), type: form.attr('method'), data: formData, dataType: 'json', cache: false, contentType: false, processData: false, async: false, success:function(response) { console.log("Reponse ajax",response); var success = typeof(response)!='undefined' && typeof(response.success)!='undefined' ? response.success : null; var msg = typeof(response)!='undefined' && typeof(response.messages)!='undefined' ? response.messages : ""; if(success == true) { $("#messages").html('<div class="alert alert-success alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ msg + '</div>'); $('input[type="text"]').val(''); $(".fileinput-remove-button").click(); } else { $("#messages").html('<div class="alert alert-warning alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ msg + '</div>'); } }, error: function(xhr, ajaxOptions, error){ console.log('ERREUR AJAX',xhr, ajaxOptions, error); var errorMessage = xhr.status + ': ' + xhr.statusText alert('Error - ' + errorMessage); } }); et côté PHP, je pense que tu peux remplacer ton code par :
<?php // database connection $server = '127.0.0.1'; $username = 'root'; $password = ''; $dbname = 'base'; $conn = new mysqli($server, $username, $password, $dbname); // check db connection error message NE MARCHE PAS :( je ne sais pas pourquoi? if($conn->connect_error) { $valid['success'] = false; $valid['messages'] = "Connection Failed : " . $conn->connect_error; echo json_encode($valid); exit; } //recupération PROPRE des variables AVANT de les utiliser $name = !empty($_POST['fullName']) ? $_POST['fullName']: NULL; $lastname = !empty($_POST['lastname']) ? $_POST['lastname']: NULL; $email = !empty($_POST['email']) ? $_POST['email']: NULL; $valid = array('success' => false, 'messages' => array()); $userImage = !empty($_FILES['userImage']) ? $_FILES['userImage'] : NULL; if(!$userImage ){ $valid['success'] = false; $valid['messages'] = "Aucun fichier à uploader !"; echo json_encode($valid); exit; } $ext = end(explode('.', $fileName)); $url = '/uploads/files/' . uniqid(rand()) . '.' . $ext; if(in_array($ext, array('gif', 'jpg', 'jpeg', 'png'))) { if(is_uploaded_file($userImage['tmp_name'])) { if(move_uploaded_file($userImage['tmp_name'], $url)) { //****************************************************************** // Vérification doublon email avant validation du formulaire $sql = "SELECT * FROM visitor WHERE email = '$email' "; $result = $conn->query($sql); $row = $result->fetch_array(MYSQLI_ASSOC); if (empty($row)){ // dans ce cas, la requete n'a rien retourné.. // Insert into database $sql = "INSERT INTO visitor (Name, email, Image) VALUES ('$name','$email','$url')"; if($conn->query($sql) === TRUE) { $valid['success'] = true; $valid['messages'] = "Successfully Uploaded"; // dans ce cas, ALERTE AJAX .. MARCHE :) // ****************************************************** } else { $valid['success'] = false; $valid['messages'] = "Erreur lors du l'insertion en bdd"; } } else { $valid['success'] = false; $valid['messages'] = "L'email existe déjà !"; } } else { $valid['success'] = false; $valid['messages'] = "Error while uploading"; } } } $conn->close(); echo json_encode($valid); exit; ?> Puis vide le cache de ton navigateur et refait un essai.
Et si ça ne marche toujours pas, fais une capture de la CONSOLE de ton navigateur et montre la nous.
PS: Je te rappelle que pour débuguer de l'ajax, je te recommande fortement d'utiliser le navigateur firefox ... et surtout.. n'oublie pas d'activer le debugage XHR
--
Cordialement,
Jordane
The error is located on line 13 of the JavaScript code I provided you, as you can see there is an extra dot, which is due to a typo on my part.
--
Best regards,
Jordane
--
Best regards,
Jordane
You forgot to close some tags in your JS...
Try it this way
Try it this way
<script type="text/javascript"> var btnCust = '<button type="button" class="btn btn-default" title="Add picture tags" ' + 'onclick="alert(\'Click on the Photo to upload.\')">' + '<i class="glyphicon glyphicon-tag"></i>' + '</button>'; $("#avatar-2").fileinput({ overwriteInitial: true, maxFileSize: 1500, showClose: false, showCaption: false, showBrowse: false, browseOnZoneClick: true, removeLabel: '', removeIcon: '<i class="glyphicon glyphicon-remove"></i>', removeTitle: 'Cancel or reset changes', elErrorContainer: '#kv-avatar-errors-2', msgErrorClass: 'alert alert-block alert-danger', defaultPreviewContent: '<img src="uploads/default-avatar.jpg" alt="Your Avatar" style="width:160px"><h6 class="text-muted">Click to select</h6>', layoutTemplates: {main2: '{preview} ' + btnCust + ' {remove} {browse}'}, allowedFileExtensions: ["jpg", "png", "gif"] }); function uploadImg(form,formData){ $.ajax({ url: form.attr('action'), type: form.attr('method'), data: formData, dataType: 'json', cache: false, contentType: false, processData: false, async: false, success:function(response) { console.log("Ajax response",response); var success = typeof(response)!='undefined' && typeof(response.success)!='undefined' ? response.success : null; var msg = typeof(response)!='undefined' && typeof(response.messages)!='undefined' ? response.messages : ""; if(success == true) { $("#messages").html('<div class="alert alert-success alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ msg + '</div>'); $('input[type="text"]').val(''); $(".fileinput-remove-button").click(); } else { $("#messages").html('<div class="alert alert-warning alert-dismissible" role="alert">'+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>'+ msg + '</div>'); } }, error: function(xhr, ajaxOptions, error){ console.log('AJAX ERROR',xhr, ajaxOptions, error); var errorMessage = xhr.status + ': ' + xhr.statusText; alert('Error - ' + errorMessage); } }); } $(document).ready(function(){ $('#uploadImageForm').on('submit', function(e){ e.preventDefault(); var form = $(this); var formData = new FormData($(this)[0]); uploadImg(form,formData); }); }); </script>
On the way, I just made some corrections to the PHP code
<?php // connection à la base de données $server = '127.0.0.1'; $username = 'root'; $password = ''; $dbname = 'base'; $conn = new mysqli($server, $username, $password, $dbname); // vérifier l'erreur de connexion à la base de données NE MARCHE PAS :( je ne sais pas pourquoi? if($conn->connect_error) { $valid['success'] = false; $valid['messages'] = "Échec de la connexion : " . $conn->connect_error; echo json_encode($valid); exit; } // récupération PROPRE des variables AVANT de les utiliser $name = !empty($_POST['fullName']) ? $_POST['fullName']: NULL; $lastname = !empty($_POST['lastname']) ? $_POST['lastname']: NULL; $email = !empty($_POST['email']) ? $_POST['email']: NULL; $valid = array('success' => false, 'messages' => array()); $userImage = !empty($_FILES['userImage']) ? $_FILES['userImage'] : NULL; if(!$userImage['tmp_name'] ){ $valid['success'] = false; $valid['messages'] = "Aucun fichier à uploader !"; echo json_encode($valid); exit; } $ext = end(explode('.', $userImage['tmp_name'])); $url = '/uploads/files/' . uniqid(rand()) . '.' . $ext; if(in_array($ext, array('gif', 'jpg', 'jpeg', 'png'))) { if(is_uploaded_file($userImage['tmp_name'])) { if(move_uploaded_file($userImage['tmp_name'], $url)) { //****************************************************************** // vérifier le doublon d'email avant validation du formulaire $sql = "SELECT * FROM visitor WHERE email = '$email' "; $result = $conn->query($sql); $row = $result->fetch_array(MYSQLI_ASSOC); if (empty($row)){ // dans ce cas, la requête n'a rien retourné.. // Insérer dans la base de données $sql = "INSERT INTO visitor (Name, email, Image) VALUES ('$name','$email','$url')"; if($conn->query($sql) === TRUE) { $valid['success'] = true; $valid['messages'] = "Téléchargement réussi"; // dans ce cas, ALERTE AJAX .. MARCHE :) // ****************************************************** } else { $valid['success'] = false; $valid['messages'] = "Erreur lors de l'insertion en bdd"; } } else { $valid['success'] = false; $valid['messages'] = "L'email existe déjà !"; } } else { $valid['success'] = false; $valid['messages'] = "Erreur lors du téléchargement"; } } } else { $valid['success'] = false; $valid['messages'] = "Extension non autorisée"; } $conn->close(); echo json_encode($valid); exit; ?>








2 - Show the modified PHP code
3 - Show us the console of your browser (Note that to debug ajax, I highly recommend using the Firefox browser... and above all, don't forget to enable XHR debugging)
4 - Don't forget to follow the guidelines for posting your code correctly on the forum (by specifying the language in the code tags)