Insertion lien image php base mysql
Résolujordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je crée un formulaire qui permet de sélectionner une image et inscrire un texte qui la décrit, et le tout accessible par php dans une base mysql.
Mon formulaire (creat_chat.htm):
<html><body> <form enctype="multipart/form-data" action="add_chat.php?id='.$id.'&$photo1='.photo1.',$descript_chat='.descript_chat.'" method="POST" value="envoyer" name="soumettre"> <center><table width="975"> <tr><td width="450"><h2><u>Insérer une photo :</u><br><font size="2"> Sélectionnez l\'image sur votre disque dur. Vous ne pouvez uploader que des fichiers de type png , gif , jpg , jpeg ou bmp, de taille limitée à 2Mo.</font></td> <td><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <input type="file" name="photo1" size="51" /></td></tr> <tr><td width="450"><h2><u>Insérer une deuxième photo :</u><br></td> <td><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <input type="file" name="photo2" size="51" /></td></tr> <tr><td width="450"><h2><u>Insérer une troisième photo :</u><br></td> <td><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <input type="file" name="photo3" size="51" /></td></tr> </form> <tr align="left"><td><b>Description du chat : </b></td></tr><tr><td><textarea name="descript_chat" cols="70" rows="30"></textarea></td></tr><p> <td> <input type="submit" name="preview" value="Valider"> <input type="reset" value="Effacer"> <input type="button" name="lien" value="Retour" onClick="javascript:history.back()"> <input type="button" name="lien" value="Annuler" onClick="self.location.href='../index.php'"> </td></tr></center> </body></html>
Mon script pour l'insertion dans la bd (add_chat.php):
<?php include ('../connexion/connexion.php'); $id=$_GET['id']; $photo1=$_GET['photo1']; $descript_chat=$_GET['descript_chat']; //*** description du chat *** $descript_chat = stripslashes($descript_chat); //----pour éviter les \ ds le descript_chat-------------- $descript_chat = mysql_real_escape_string($descript_chat); $descript_chat = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])","<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$descript_chat); //*** Insertion photo1 **** $dossier_photos = '../images/photos/chats'; $photo1 = basename($_FILES['photo1']['name']); if (!empty($photo1)) { $photo1 = strtr($photo1,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $photo1 = preg_replace('/([^.a-z0-9]+)/i', '_', $photo1); $photo1 = "$id$photo1"; move_uploaded_file($_FILES['photo1']['tmp_name'], $dossier_photos.$photo1); $resultY=mysql_query("UPDATE liste_chats SET photo1='$dossier_photos$photo1' WHERE id='$id'"); //, photo_dc='$photo_dcd' } $result=mysql_query("UPDATE liste_chats SET descript_chat='$descript_chat', WHERE id='$id'"); header("Location: ../index.php?page=liste_chats"); mysql_close(); exit; ?>
J'ai comme messages d'erreurs :
Warning: move_uploaded_file(../images/photos/chats\'.$id.\'tiana.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in /mnt/168/sda/5/0/th1/tatachat/gestion/add_chat.php on line 22 (correspond au move........)
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/mnt/168/sda/5/0/th1/phpeYeTTa' to '../images/photos/chats\'.$id.\'tiana.JPG' in /mnt/168/sda/5/0/th1/tatachat/gestion/add_chat.php on line 22
Warning: Cannot modify header information - headers already sent by (output started at /mnt/168/sda/5/0/th1/tatachat/gestion/add_chat.php:22) in /mnt/168/sda/5/0/th1/tatachat/gestion/add_chat.php on line 28 (correspond au header......)
Merci de m'aider :o)
- Insertion lien image php base mysql
- Lien url - Guide
- Créer un lien pour partager des photos - Guide
- Base de registre - Guide
- Lien copié ✓ - Forum Google Chrome
- Verificateur de lien - Guide
7 réponses
Bonjour
Cela indique que le répertoire dans lequel tu veux déplacer l'image n'existe pas, où ne se trouve pas à l'emplacement que tu penses, ou qui ne dispose pas des droits en écriture.
Commence parfaire un écho de tes variables $dossier_photos.$photo1
Et avant le move,
Test si le répertoire $dossier_photos existe .(via l'instruction file_exists)
Les variables sont bonnes, le répertoir destination existe !!!??
Tu montres le code modifié qui intègre les corrections que je t'ai demandé ?
Sinon .. impossible pour moi de savoir si tu l'as bien fait.
Et au passage ( pour la cinquantième fois...), l'extension mysql_* est OBSOLETE !
Il faut réécrire ton code en PDO ou MYSQLI
Actuellement, la majorité des serveurs web fonctionnent avec php 7 voir php 8 .. autant dire que ton code n'y fonctionnera pas...(si tu ne fais pas la correction que je t'ai déjà plusieurs fois indiqué )
Je n'ai pas modifié grand chose dans mon code
<?php include ('../connexion/connexion.php'); $id=$_GET['id']; $photo1=$_GET['photo1']; $descript_chat=$_GET['descript_chat']; //*** description du chat *** $descript_chat = stripslashes($descript_chat); //----pour éviter les \ ds le descript_chat-------------- $descript_chat = mysql_real_escape_string($descript_chat); $descript_chat = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])","<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$descript_chat); //*** Insertion photo1 **** $dossier = '../images/chats'; $photo1 = basename($_FILES['photo1']['name']); //echo $photo1 ; //exit; if (!empty($photo1)) { $photo1 = strtr($photo1,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $photo1 = preg_replace('/([^.a-z0-9]+)/i', '_', $photo1); ::$photo1 = "$id$photo1"; move_uploaded_file($_FILES['photo1']['tmp_name'], $dossier.$photo1); $resultY=mysql_query("UPDATE liste_chats SET photo1='$dossier$photo1' WHERE id='$id'"); } $result=mysql_query("UPDATE liste_chats SET descript_chat='$descript_chat' WHERE id='$id'"); header("Location: ../index.php?page=liste_chats"); mysql_close(); exit; ?>
Et chez Free, leur serveur n'utilise pas MYSQLI.
Où sont les modifications que je t'ai demandé pour vérifier que le chemin de destination existe ?
Surtout que je t'ai donné un lien qui t'explique comment utiliser la fonction...
Pour Free, il me semble bien qu'on peut paramétrer une version de PHP plus élevée ce qui implique que tu auras au moins PDO.. voir même mysqli.
Salut jordane45.
J'ai fait les tests comme tu me l'avais expliqué, et ils étaient tous positif. C'est vrai que je ne les ais pas laissé dans le script ..............
Pour MYSQLI, pour maintenant, je reste sur mysql. De toute façon, après ce site, j'arrête !!!! :o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionVoilà le code
<?php include ('../connexion/connexion.php'); $id=$_GET['id']; $photo1=$_GET['photo1']; $descript_chat=$_POST['descript_chat']; //*** description du chat *** $descript_chat = stripslashes($descript_chat); //----pour éviter les \ ds le descript_chat-------------- $descript_chat = mysql_real_escape_string($descript_chat); $descript_chat = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])","<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$descript_chat); //*** Insertion photo1 **** $dossier = '../images/chats'; $photo1 = basename($_FILES['photo1']['name']); //echo $photo1 ; //echo $dossier; //exit; if (!empty($photo1)) { $photo1 = strtr($photo1,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $photo1 = preg_replace('/([^.a-z0-9]+)/i', '_', $photo1); if (file_exists($dossier)) { echo "Le fichier $dossier existe."; } else { echo "Le fichier $dossier n'existe pas."; } exit; move_uploaded_file($_FILES['photo1']['tmp_name'], $dossier . $photo1); //$result=mysql_query("UPDATE liste_chats SET photo1='$dossier.$photo1' WHERE id='$id'"); } if (!empty($photo1) || !empty($descript_chat)) { $result=mysql_query("UPDATE liste_chats SET photo1='$dossier$photo1', descript_chat='$descript_chat' WHERE id='$id'"); } //$result=mysql_query("UPDATE liste_chats SET descript_chat='$descript_chat' WHERE id='$id'"); header("Location: ../index.php?page=liste_chats"); mysql_close(); exit; ?>
Donc, la photo s'enregistre dans ../images, alors que je demandais ../images/chats.
L'écriture dans la base ne se fait pas !?
J'ai mis le exit en commentaire.....
J'ai comme message retour :
Le fichier ../images/chats existe.
Warning: Cannot modify header information - headers already sent by (output started at /mnt/168/sda/5/0/th1/tatachat/connexion/connexion.php:2) in /mnt/168/sda/5/0/th1/tatachat/gestion/add_chat.php on line 40
L'image n'est toujours pas dans le bon fichier (mais ça ce n'est pas trop grave). Et il n'y a pas eu d'inscription dans la base.