Problème Upload image sur le serveur
Résolu/Fermé
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
-
Modifié le 16 nov. 2020 à 12:06
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 16 nov. 2020 à 20:54
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 16 nov. 2020 à 20:54
A voir également:
- Problème Upload image sur le serveur
- Image iso - Guide
- Le protocole assure que la communication entre l'ordinateur de chaïma et le serveur de partageimage est car les informations seront avant d'être envoyées. - Forum traduction
- Le serveur de récupération n'a pas pu être contacté ✓ - Forum MacOS
- Serveur pop - Guide
- Acronis true image - Télécharger - Sauvegarde
3 réponses
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
16 nov. 2020 à 13:27
16 nov. 2020 à 13:27
bonjour,
au lieu de
au lieu de
empty($row), moi je testerais la valeur de
count($row)
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
16 nov. 2020 à 13:36
16 nov. 2020 à 13:36
Bonjour,
Le problème vient simplement du fait que tu fais le move_uploaded_file avant de vérifier l'email...
Revois l'ordre des actions dans ton script, pour que l'a validation de l'adresse soit faite avant toute autre chose.
Autre possibilité : en cas d'erreur, supprimer le fichier qui a été au préalable copié.
Xavier
Le problème vient simplement du fait que tu fais le move_uploaded_file avant de vérifier l'email...
Revois l'ordre des actions dans ton script, pour que l'a validation de l'adresse soit faite avant toute autre chose.
Autre possibilité : en cas d'erreur, supprimer le fichier qui a été au préalable copié.
Xavier
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
4
16 nov. 2020 à 14:01
16 nov. 2020 à 14:01
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
>
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
16 nov. 2020 à 16:14
16 nov. 2020 à 16:14
Fais voir ton code quand tu fais ça ?
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
4
>
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
Modifié le 16 nov. 2020 à 16:43
Modifié le 16 nov. 2020 à 16:43
$conn = new mysqli($server, $username, $password, $dbname); // check db connection if($conn->connect_error) { die("Connection Failed : " . $conn->connect_error); } else { // echo "Successfully Connected"; } $valid = array('success' => false, 'messages' => array()); $name = htmlspecialchars ($_POST['Name']); $lastname = htmlspecialchars ( $_POST['lastname']); $sex = htmlspecialchars ($_POST['Sex']); $age = htmlspecialchars ( $_POST['Age']); $statut = htmlspecialchars ( $_POST['Statut']); $proffession = htmlspecialchars ($_POST['Proffession']); $ville = htmlspecialchars ( $_POST['Ville']); $mobile = htmlspecialchars ( $_POST['Mobile']); $email = htmlspecialchars ($_POST['email']); //$date_created = $_POST['fullName']; //****************************************************************** // 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é.. $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)) { } // insert into database $sql = "INSERT INTO visitor (Name,lastname, Sex, Age, Statut, Proffession, Ville, Mobile, email, Image) VALUES ('$name','$lastname','$sex','$age','$statut','$proffession','$ville','$mobile','$email','$url')"; if($conn->query($sql) === true) { $valid['success'] = true; $valid['messages'] = "Successfully Uploaded"; } else { $valid['messages'] = "Erreur lors du telechargement"; } } else { $valid['success'] = false; $valid['messages'] = "Adresse mail déja utiliser"; } } else{ } } echo json_encode($valid); $conn->close(); }
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
>
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
16 nov. 2020 à 17:42
16 nov. 2020 à 17:42
Tu fermes ton if trop top...
De plus, la fonction htmlspecialchar ne doit pas s'utiliser pour stocker les données en BDD et ne doit être utilisée que pour de l'affichage sur une page web.
Il serait bien également d'être un peu plus rigoureuse sur l'indentation de ton code et l'écriture de celui-ci.
Bien que ça ne soit pas une réelle obligation, ne serait-ce que sur l'écriture des IF/ELSE, pourrais tu appliquer la norme
https://www.php-fig.org/psr/psr-2/#51-if-elseif-else
if(move_uploaded_file($_FILES['userImage']['tmp_name'], $url)) { }
De plus, la fonction htmlspecialchar ne doit pas s'utiliser pour stocker les données en BDD et ne doit être utilisée que pour de l'affichage sur une page web.
Il serait bien également d'être un peu plus rigoureuse sur l'indentation de ton code et l'écriture de celui-ci.
Bien que ça ne soit pas une réelle obligation, ne serait-ce que sur l'écriture des IF/ELSE, pourrais tu appliquer la norme
https://www.php-fig.org/psr/psr-2/#51-if-elseif-else
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
4
>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
16 nov. 2020 à 18:21
16 nov. 2020 à 18:21
je vous remercie pour le conseil Jordane pour le ( htmlspecialchar ) c'est mon 1er exercice en php j'ai commencé le php il y a que 2 mois pour la fermiture du if quand je le ferme tard le message d'alert ne s'afiche plus.
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
16 nov. 2020 à 19:45
16 nov. 2020 à 19:45
Voici ( encore une fois... )
ton code amélioré ... ( je l'ai découpé en fonctions )
Je te laisse le tester.
N'oublie pas de regarder dans la CONSOLE de ton navigateur si d'éventuelles informations apparaissent lorsque tu exécutes ce code.
( console de FireFox ... plus facile pour débuguer de l'ajax comme je te l'ai déjà indiqué )
Je t'invite au passage, à lire (et à appliquer dans tes prochains codes, les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
ton code amélioré ... ( je l'ai découpé en fonctions )
<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à ta bdd $server = '127.0.0.1'; $username = 'root'; $password = ''; $dbname = 'base'; $mysqli = new mysqli($server, $username, $password, $dbname); if ($mysqli->connect_error) { sendResponse('Erreur de connexion (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error, false); } /** * Permet de récupérer proprement les variables avant de les utiliser * @param type $varName * @param type $defaultValue * @return type */ function getPost($varName,$defaultValue=NULL){ return isset($_POST[$varName]) ? $_POST[$varName] : $defaultValue; } /** * Fonction qui va assurer le renvoi, au format json, du message * @param type $message * @param type $success */ function sendResponse($message,$success=false){ header('Content-Type: application/json'); // on force le format en JSON dans le header http de la réponse $data = array('success' => $success, 'messages' => $message); echo json_encode($data); exit; } /** * Retourne les infos d'un "visiteur" * @global mysqli $mysqli * @param string $email * @return array */ function getVisitorByMail($email){ global $mysqli; $sql = "SELECT * FROM visitor WHERE email = '$email' "; if (!$result = $mysqli->query($sql)) { sendResponse("Message d'erreur : %s\n", $mysqli->error , false); } return $result -> fetch_array(MYSQLI_ASSOC); } /** * Fonction permettant d'inséeer les données dans la bdd * @global mysqli $mysqli * @param type $name * @param type $lastname * @param type $sex * @param type $age * @param type $statut * @param type $proffession * @param type $ville * @param type $mobile * @param type $email * @param type $url * @return type */ function addInDb($name,$lastname,$sex,$age,$statut,$proffession,$ville,$mobile,$email,$url){ global $mysqli; $sql = "INSERT INTO visitor (Name,lastname, Sex, Age, Statut, Proffession, Ville, Mobile, email, Image) VALUES ('$name','$lastname','$sex','$age','$statut','$proffession','$ville','$mobile','$email','$url')"; if (!$result = $mysqli->query($sql)) { sendResponse("Message d'erreur : %s\n", $mysqli->error , false); } return $result; } //récupération PROPRE des variables AVANT de les utiliser $name = getPost('fullName'); $lastname = getPost('lastname'); $email = getPost('email'); $sex = getPost('Sex'); $age = getPost('Age'); $statut = getPost('Statut'); $proffession = getPost ('Proffession'); $ville = getPost('Ville'); $mobile = getPost('Mobile'); //on récupère proprement la variables $_FILES $files = !empty($_FILES['userImage']) ? $_FILES['userImage'] : NULL; if(empty($files)){ sendResponse("Aucun fichie à uploader !",false); } //On récupère les infos du visiteur pour voir si son email existe déjà $visitor = getVisitorByMail($email); //si l'utilisateur existe déjà if(!empty($visitor)){ sendResponse("Cet email existe déjà !",false); } $filename = $files['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); $url = '../uploads/files/' . uniqid(rand()) . '.' . $ext; $allowed = array('gif', 'jpg', 'jpeg', 'png'); if (!in_array($ext, $allowed)) { sendResponse("Extension de fichier non autorisé !",false); } if(!is_uploaded_file($files['tmp_name'])){ sendResponse("Erreur lors du téléchargement du fichier !",false); } if(!move_uploaded_file($files['tmp_name'],$url)){ //si le move_uploaded a échoué sendResponse("Erreur lors du déplacement du fichier !",false); }else{ //l'uplod c'est bien passé... addInDb($name,$lastname,$sex,$age,$statut,$proffession,$ville,$mobile,$email,$url); sendResponse("Successfully Uploaded",true); }
Je te laisse le tester.
N'oublie pas de regarder dans la CONSOLE de ton navigateur si d'éventuelles informations apparaissent lorsque tu exécutes ce code.
( console de FireFox ... plus facile pour débuguer de l'ajax comme je te l'ai déjà indiqué )
Je t'invite au passage, à lire (et à appliquer dans tes prochains codes, les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
4
Modifié le 16 nov. 2020 à 20:51
Modifié le 16 nov. 2020 à 20:51
ça marche 5/5 UN GRAND MERCI Jordan45 <3 Je vous promets d'apprendre plus & de faire de mon mieux la prochaine fois
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
>
lina-24
Messages postés
63
Date d'inscription
vendredi 6 novembre 2020
Statut
Membre
Dernière intervention
25 mars 2023
16 nov. 2020 à 20:54
16 nov. 2020 à 20:54
Tu penseras à mettre la discussion en résolue
Bonne soirée.
Bonne soirée.