[RESOLU] Formulaire pour ajout du nom d'une photo dans base MySQL

Eléphanteau du PHP | 38 Messages

05 mars 2014, 18:17

Bonjour,

j'ai un script PHP qui me permet de choisir de choisir une photo dans une liste et dynamiquement lorsque je choisi le nom d'une photo j'ai sa miniature qui s'affiche à côté de mon formulaire.
Une fois le choix fais, je valide mon formulaire et la photo s'ajoute dans la BDD.
Sauf que ça ne fonctionne pas du premier coup, ça ne fonctionne que lorsque je modifie mon ajout à la BDD:

nouveau.php :
                      	 <td align="right" valign="center">Photo :</td><td valign="center">
												 <img name="depart" src=../images/vide.jpg border=0>
												 <select name="listeImg1" size=8 onChange ="if(VersionNavigateur(3.0,4.0))depart.src=form.listeImg1.options[form.listeImg1.selectedIndex].value;">
												 <option name="../images/vide.jpg" value="../images/vide.jpg">-- aucune --</option>
												 <?
												 // on se connecte à MySQL 
$db = mysql_connect($host, $login_host, $pass_host);  

// on selectionne la base 
mysql_select_db($hostname,$db);

// on crée la requete SQL 
$sql = "SELECT * FROM `".$prefixe."_images` ORDER BY url ASC";
// on envoie la requète 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
while($data = mysql_fetch_array($req)) { 
echo'<option name="../images/mini_'.$data['url'].'" value="../images/mini_'.$data['url'].'">'.$data['url'].'</option>';
}
?>
												 </select>
												 </td>
...
$id_photo = $_POST['listeImg1'];
...
$sql = "INSERT INTO ".$prefixe."_articles(id, titre, auteur, texte1, texte2, categorie, id_photo, date, heure, suivie, commentaires, valide, description, motsclefs, lecture, time) VALUES('','$titre','$res','$texte1','$texte2','$categorie','$id_photo','$date','$heure','$suivie','$commentaires','oui','$description','$motsclefs','0','$time_article')";
Là ça ne fonctionne pas. Mais lorsque je modifie mon entrée dans la BDD avec ce fichier là :
modif_zone.php
	<td align="right" valign="center">Image :</td><td>
	<? if(!empty($data['id_photo'])) { ?><img name="depart" src="../images/mini_<? echo$data['id_photo']; ?>" border=0><? } else { ?><img name="depart" src="../images/vide.jpg" border=0><? } ?>
												 <select name="listeImg1" size=8 onChange ="if(VersionNavigateur(3.0,4.0))depart.src=form.listeImg1.options[form.listeImg1.selectedIndex].value;">
												  <option name="../images/vide.jpg" value="../images/vide.jpg"<? if(empty($data['id_photo'])) { echo' selected'; }?>>-- aucune --</option>
													<? if(!empty($data['id_photo'])) { ?><option name="../images/mini_<? echo$data['id_photo']; ?>" value="../images/mini_<? echo$data['id_photo']; ?>" selected>Photo actuelle</option> <? }
												 // on se connecte à MySQL 
$db = mysql_connect($host, $login_host, $pass_host);  

// on selectionne la base 
mysql_select_db($hostname,$db);

// on crée la requete SQL 
$sql = "SELECT * FROM `".$prefixe."_images` ORDER BY id DESC";
// on envoie la requète 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
while($result = mysql_fetch_array($req)) { 
if($data['url']==$result['url']) { $selected = ' selected'; } else { $selected = ''; }
echo'<option name="../images/mini_'.$result['url'].'" value="../images/mini_'.$result['url'].'"'.$selected.'>'.$result['url'].'</option>';
}
?>
												 </select>
												 </td>
...
//On récupère le nom de l'image sans "../images/mini_" soit 15 caractères
$id_photo = substr($_POST['listeImg1'], 15);
...
$sql = "UPDATE ".$prefixe."_articles SET titre='$titre', categorie='$categorie', texte1='$texte1', texte2='$texte2', suivie='$suivie', commentaires='$commentaires', id_photo='$id_photo', description='$description', motsclefs='$motsclefs', date='$date', heure='$heure', time='$time_article' WHERE id='$id'";
Là ça fonctionne.

On est d'accord avec nouveau.php tout le reste est bien enregistré dans la BDD je n'ai que le nom de la photo qui n'est pas enregistré.

Merci par avance pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 mars 2014, 18:32

salut,

les balises html "option" n'ont pas d'attibut name.
utilise la valeur plutot que de dupliquer.

pourquoi mettre ../images/mini_ dans la valeur alors que tu l'ajouter dans la fonction javascript (concaténation js plutot que php).
c'est plus simple et plus logique (surement plus performant peux être ).

a l'insert tu ne fait pas la substr comme dans l'update.

as tu vérifier ce que contient $_POST['listeImg1'] lorsque tu valide le formulaire la première fois ? (print_r, var_dump etc).
est ce que tu n'aurais pas un message d'erreur que tu masque ?

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

05 mars 2014, 18:55

Merci, je vais essayer de regarder avec ça.

Eléphanteau du PHP | 38 Messages

05 mars 2014, 19:03

Je n'y pensais pas, mais c'était bien un problème de substr...

Sinon peux tu être plus précis sur "option"?
Ainsi que sur la concaténation js?

Merci par avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 mars 2014, 19:11

l'option tu as le lien qui t'explique les attribut de ce tag.

la concaténation en js c'est avec le +, le principe est le même qu'en php (que tu utilise déjà).

le but c'est d'avoir cette info qu'une seule fois plutot que x fois dans un attribut.
de plus cela t'oblige a utiliser ta gymnastique avec le substr qui est totalement inutile, tu n'as aucu travail à faire sur les données avec ton code.
juste mettre dans le code javascript l'emplacement de base des fichiers.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

05 mars 2014, 20:02

Merci pour toutes ces précisions.