par
Saian » 02 juin 2019, 17:45
Hyoshiko, c'est pas sur le net qu'il faut chercher là, c'est dans ton code.
Comme je t'ai déjà dit, si ça t'affiche
pouet c'est que ta condition
if (in_array($file_extension, $check_ext)) { retourne
false.
Et pour comprendre pourquoi, il faut que tu regardes ce que tu as dans
$file_extension et
$check_ext.
C'est pas compliqué, la valeur de
$file_extension n'est pas présente dans le tableau
$check_ext. Rien de plus, rien de moins.
Tu as juste à regarder le contenu de
$file_extension pour comprendre.
Un simple
echo $file_extension; juste avant le if, c'est tout.
Tu vas voir à tous les coups il manque juste le . au début ou le dernier caractère dans
$file_extension.
Tu auras juste à corriger cette ligne :
$file_extension = strtolower(substr(strrchr($file_name, '.'), 1));
Ou modifier ton tableau
$check_ext pour que ça corresponde avec
$file_extension.
PS : fait aussi l'effort de bien indenter ton code, il sera beaucoup plus lisible et tu le comprendras beaucoup mieux.
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
if (isset($_POST['envoi_correction'])) {
if (isset($_POST['destinataire'], $_POST['mess']) AND !empty($_POST['destinataire']) AND !empty($_POST['mess']) AND !empty($_FILES)) {
echo 'OK'; // test echo juste ici
$destinataire = htmlspecialchars($_POST['destinataire']);
$messages = htmlspecialchars($_POST['mess']);
$stmt = $DB->query(
'SELECT id FROM utilisateur WHERE mail = :mail', // paramètre $sql
array(':mail' => $destinataire)); // paramètre $data
$dest_exist = $stmt->rowCount();
$file_name = $_FILES['fichier']['tmp_name'];
$file_dest = 'files/'.$file_name;
$file_extension = strtolower(substr(strrchr($file_name, '.'), 1));
$check_ext = array('.pdf', '.PDF', '.PNG', '.png', '.JPG', '.jpg', '.JPEG', '.jpeg');
if ($dest_exist == 1 AND !file_exists($file_dest)) {
if (in_array($file_extension, $check_ext)) {
if (move_uploaded_file($file_name, $file_dest)) {
$stmt = $stmt->fetch();
$stmt = $stmt['id'];
echo 'OKEY'; //encore un test echo par là
$id = $DB->insert('INSERT INTO messages (id_expediteur,id_destinataire, mess, nom, file_url ) VALUES (?,?,?,?,?)',
array($_SESSION['id'], $stmt, $messages, $file_name, $file_dest));
$error = $id ? "Votre message a bien été envoyé !" : $DB->getError();
} else {
$error = "Cet utilisateur n'existe pas...";
$error = "Veuillez compléter tous les champs";
}
} else {
echo 'pouet'; //encore un test juste là.
}
}
}
}
}
Et si tu as juste le echo
OK qui s'affiche c'est que tu as un problème avec la condition
if ($dest_exist == 1 AND !file_exists($file_dest)) { juste avant celle du
in_array.
C'est à dire soit
$dest_exist est différent de
1 soit
$file_dest existe déjà... fais fonctionner ta logique, essaie de lire le code comme si tu étais l'ordinateur en train de l'exécuter.
Hyoshiko, c'est pas sur le net qu'il faut chercher là, c'est dans ton code.
Comme je t'ai déjà dit, si ça t'affiche [b]pouet[/b] c'est que ta condition [b]if (in_array($file_extension, $check_ext)) {[/b] retourne [b]false[/b].
Et pour comprendre pourquoi, il faut que tu regardes ce que tu as dans [b]$file_extension[/b] et [b]$check_ext[/b].
C'est pas compliqué, la valeur de [b]$file_extension[/b] n'est pas présente dans le tableau [b]$check_ext[/b]. Rien de plus, rien de moins.
Tu as juste à regarder le contenu de [b]$file_extension[/b] pour comprendre.
Un simple [b]echo $file_extension;[/b] juste avant le if, c'est tout.
Tu vas voir à tous les coups il manque juste le . au début ou le dernier caractère dans [b]$file_extension[/b].
Tu auras juste à corriger cette ligne :
[PHP]$file_extension = strtolower(substr(strrchr($file_name, '.'), 1));[/PHP]
Ou modifier ton tableau [b]$check_ext[/b] pour que ça corresponde avec [b]$file_extension[/b].
PS : fait aussi l'effort de bien indenter ton code, il sera beaucoup plus lisible et tu le comprendras beaucoup mieux.
[PHP]if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
if (isset($_POST['envoi_correction'])) {
if (isset($_POST['destinataire'], $_POST['mess']) AND !empty($_POST['destinataire']) AND !empty($_POST['mess']) AND !empty($_FILES)) {
echo 'OK'; // test echo juste ici
$destinataire = htmlspecialchars($_POST['destinataire']);
$messages = htmlspecialchars($_POST['mess']);
$stmt = $DB->query(
'SELECT id FROM utilisateur WHERE mail = :mail', // paramètre $sql
array(':mail' => $destinataire)); // paramètre $data
$dest_exist = $stmt->rowCount();
$file_name = $_FILES['fichier']['tmp_name'];
$file_dest = 'files/'.$file_name;
$file_extension = strtolower(substr(strrchr($file_name, '.'), 1));
$check_ext = array('.pdf', '.PDF', '.PNG', '.png', '.JPG', '.jpg', '.JPEG', '.jpeg');
if ($dest_exist == 1 AND !file_exists($file_dest)) {
if (in_array($file_extension, $check_ext)) {
if (move_uploaded_file($file_name, $file_dest)) {
$stmt = $stmt->fetch();
$stmt = $stmt['id'];
echo 'OKEY'; //encore un test echo par là
$id = $DB->insert('INSERT INTO messages (id_expediteur,id_destinataire, mess, nom, file_url ) VALUES (?,?,?,?,?)',
array($_SESSION['id'], $stmt, $messages, $file_name, $file_dest));
$error = $id ? "Votre message a bien été envoyé !" : $DB->getError();
} else {
$error = "Cet utilisateur n'existe pas...";
$error = "Veuillez compléter tous les champs";
}
} else {
echo 'pouet'; //encore un test juste là.
}
}
}
}
}[/PHP]
Et si tu as juste le echo [b]OK[/b] qui s'affiche c'est que tu as un problème avec la condition [b]if ($dest_exist == 1 AND !file_exists($file_dest)) {[/b] juste avant celle du [b]in_array[/b].
C'est à dire soit [b]$dest_exist[/b] est différent de [b]1[/b] soit [b]$file_dest[/b] existe déjà... fais fonctionner ta logique, essaie de lire le code comme si tu étais l'ordinateur en train de l'exécuter.