[RESOLU] Fonction file_exists sans erreur

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 09:53

Bonjour à tous,
j'ai édité un script qui va permettre à un utilisateur de charger un fichier. Si le fichier a été bien chargé, il reçoit un mail de notification.
Voici mon code

Code : Tout sélectionner

<?php //session_start(); //require_once ("connectionMYSQL.inc.php"); $dateEnregistre = date('Y-m-d H:i:s'); if(isset($_POST['valider'])) { //Script chargement du fichier zip et données formulaires $PhotoMembre=$_FILES['fichier']; if(!empty($PhotoMembre)) { $extensionsP=array('.zip','.rar',''); $extensionP=strrchr($_FILES['fichier']['name'],'.'); if(!in_array($extensionP,$extensionsP)) { echo '<script language="javascript"> alert ("Vous devez charger un fichier .zip ou .rar !");</script>'; echo '<SCRIPT LANGUAGE="JavaScript"> document.location.href="candidature.php?" </SCRIPT>'; exit; echo'<br/>'; } $taille= filesize($_FILES['fichier']['tmp_name']); echo $taille; //1Mo vaut 1048576 bytes $taillemaxi=1048576; if($taille>$taillemaxi) { echo '<script language="javascript"> alert ("Le dossier ne peut pas dépasser 1 MO, veuillez réduire la taille !");</script>'; echo '<SCRIPT LANGUAGE="JavaScript"> document.location.href="candidature.php?" </SCRIPT>'; exit; } } //Vérification si un candidat est déjà enregistré $requete=mysql_query("SELECT nom,prenom,cni FROM candidat WHERE nom='".$_POST['nom']."' and prenom='".$_POST['prenom']."' and cni='".$_POST['cni']."'"); if(mysql_num_rows($requete)>=1) { echo '<script type="text/javascript">alert("Ce candidat a déjà deposé son dossier");</script>'; echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="candidature.php"</SCRIPT>'; } else { $reqInsert1="INSERT INTO candidat SET nom='".$_POST['nom']."', prenom='".$_POST['prenom']."' ,email='".$_POST['email']."',telephone='".$_POST['telephone']."',cni='".$_POST['cni']."',dateEnregistrement='".$dateEnregistre."'"; $resInsert1=mysql_query($reqInsert1) or die(mysql_error()); $IdM= mysql_insert_id(); if($extensionP!='') { $nomP ="C:\Program Files (x86)\EasyPHP-5.4alpha3\www\BCBRecrutement\File/".$_POST['nom']."_".$_POST['prenom']."_".$_POST['telephone'].strtolower($extensionP); $chemin="File/".$_POST['nom']."_".$_POST['prenom']."_".$_POST['telephone'].strtolower($extensionP); move_uploaded_file($_FILES['fichier']['tmp_name'],$nomP); mysql_query("UPDATE candidat SET chemin='".$chemin."' WHERE idcandidat='".$IdM."'"); } $filename=$nomP; if (!file_exists($filename)) { $supp="delete * from candidat where idcandidat='".$IdM."'"; $resSupp=mysql_query($supp) or die(mysql_error()); echo '<script type="text/javascript">alert("Echec de chargement du fichier, veuillez réessayer");</script>'; echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="candidature.php"</SCRIPT>'; } else { //Envoie mail require_once ("classes/class.phpmailer.php"); //include "classes/class.phpmailer.php"; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug=1; $mail->SMTPAuth = true; $mail->Host = "smtp.gmail.com"; // "ssl://smtp.gmail.com" didn't worked $mail->Port = 465; $mail->SMTPSecure = 'ssl'; $mail->Username = "[email protected]"; $mail->Password = "***********"; $mail->IsHTML(true); // if you are going to send HTML formatted emails $mail->SingleTo = true; // if you want to send a same email to multiple users. multiple emails will be sent one-by-one. $mail->SetFrom("[email protected]"); $mail->addAddress($_POST['email']); $mail->Subject ="Accuse reception candidature"; $mail->Body ="Votre candidature a été reçu.\n Merci d'avoir envoye votre candidature\n"; if(!$mail->Send()) echo "Message was not sent <br />PHPMailer Error: " . $mail->ErrorInfo; else echo "Message has been sent"; echo '<script type="text/javascript">alert("Votre candidature est bien reçue");</script>'; echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="index.php"</SCRIPT>'; //} } } } ?>
Malheureusement, meme si le fichier n'a pas été bien chargé, la notification est envoyée.
Pourriez-vous m'éclairer, pourquoi la fonction file_exists ne fonctionne pas correctement.
Merci.
Modifié en dernier par ArnaudYeha le 05 oct. 2017, 19:07, modifié 2 fois.

Mammouth du PHP | 1967 Messages

05 oct. 2017, 11:22

mets ta condition sur le move_uploaded_file plutot qu'un file_exist car si je test une première fois ton appli, et puis une deuxième fois mais sans fichier il existera bien un fichier à mon nom de la première utilisation
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 11:59

Merci @Spols pour ta réponse, tu peux juste me montrer quelle condition appliquée move_uploaded_file?

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 12:38

Pour tester si la condition fonctionne, j'ai mis celà:

Code : Tout sélectionner

if (move_uploaded_file($_FILES['fichier']['tmp_name'],$nomP)) { $supp="delete * from candidat where idcandidat='".$IdM."'"; $resSupp=mysql_query($supp) or die(mysql_error()); echo '<script type="text/javascript">alert("Echec de chargement du fichier, veuillez réessayer");</script>'; echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="candidature.php"</SCRIPT>'; }
Mais la condition ne fonctionne pas.
@Spols, tu en penses quoi??
Si non, pour la suite la condition devra etre :

Code : Tout sélectionner

if (!move_uploaded_file($_FILES['fichier']['tmp_name'],$nomP))

Mammouth du PHP | 1967 Messages

05 oct. 2017, 13:29

oui il te faut le !

move_uploaded_file retourne TRUE en cas de réussite et FALSE en cas d'echec
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 14:04

Je ne comprends pas alors pourquoi la condition n'est pas vérifiée

Mammouth du PHP | 1967 Messages

05 oct. 2017, 15:18

tente ceci

$tmp = move_uploaded_file(...
var_dump($tmp);
if($tmp) {...
} else {...}

ainsi tu controlera le retour de la fonction
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 16:46

Merci pour ton assistance @Spols. Malheureusement, je viens d'appliquer ce que tu viens de me dire mais aucun changement, le controle ne fonctionne pas. Je suis carrément perdu.

Mammouth du PHP | 1967 Messages

05 oct. 2017, 16:55

ca signifie que la fonction te retourne FALSE même quand le fichier est transfèrer ?
Est-ce que tu es sur que tout c'est bien passé, que les dossiers temp et de destination est accessible en ecriture ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 35 Messages

05 oct. 2017, 17:31

Merci beaucoup @Spols, maintenant la condition est bien vérifiée. En fait j'avais oublié d'affecter dans $tmp la fonction. Donc maintenant c'est :

Code : Tout sélectionner

$tmp=move_uploaded_file($_FILES['fichier']['tmp_name'],$nomP);
Et par la suite j'applique la condition

Code : Tout sélectionner

if($tmp) { $supp="delete * from candidat where idcandidat='".$IdM."'"; $resSupp=mysql_query($supp); echo '<script type="text/javascript">alert("Echec de chargement du fichier, veuillez réessayer");</script>'; echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="candidature.php"</SCRIPT>'; }
Vraiment grand merci pour ton aide!!!!