Insertion lien image php base mysql

Résolu/Fermé
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 - Modifié le 10 juil. 2022 à 11:44
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 11 juil. 2022 à 18:36

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)

A voir également:

7 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
10 juil. 2022 à 13:01

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)


0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
10 juil. 2022 à 18:17

Les variables sont bonnes, le répertoir destination existe !!!??

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
10 juil. 2022 à 18:29

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é )

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
10 juil. 2022 à 18:38

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.

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
10 juil. 2022 à 18:57

En fait, l'image est enregistrée dans le dossier précédent, soit "images", alors que je demande le dossier "images/chats".

Et pour $descript_chat, il n'est pas enregistré dans la base !!

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
10 juil. 2022 à 19:15

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.

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
11 juil. 2022 à 09:32

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)

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 juil. 2022 à 10:02

Si tu ne veux pas les remettre et me les montrer.. j'en resterai là....

Bonne journée 

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
11 juil. 2022 à 10:39

Au passage, modifie

$photo1 = "$id$photo1";

Par

$photo1 = $id . $photo1;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
11 juil. 2022 à 14:30

Voilà 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 !?

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 juil. 2022 à 14:40

Faudrait peut être retirer le exit..... Ou le mettre dans le else 

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
11 juil. 2022 à 16:15

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.

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 juil. 2022 à 18:04

Tu n'aurais pas oublié de mettre un slash à la fin du nom de ton dossier ?

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
11 juil. 2022 à 18:26

Merci ! C'est exact ! Mon image se trouve maintenant dans le bon dossier.....

Reste le move qui ne fonctionne pas ..............

Et le header. Pour ça, j'avais déjà eu le tour. Faut que je retrouve la solution. Il me semble qu'il fallait faire une redirection avec du javascript.

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 juil. 2022 à 18:36

Le move fonctionne.. sinon ton image ne serait pas dans le bon répertoire......

Et pour le header, il faut enlever le echo du if file_exists (ne garder que celui du else éventuellement)

0