for () + sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : for () + sql

par VaN » 21 juil. 2005, 17:43

pas à 100% je crois. que dois-je faire pour que à chaque tour de boucle, je me retouve avec le bon id_media_article correspondant dans ma variable result donc ?

par ouckileou » 21 juil. 2005, 17:37

j'ai bien compris le problème


c'ets toi qui ne comprend pas le principe de mysql_fetch_array
$result_id[$i] = mysql_fetch_array($query_id); 
mysql_fetch_array te renvoie un tablea, dont chaque cellule contient une colonne de la ligne de résultat courante, puis avance d'une ligne
mais à la première utilisation, la ligne courante est la première

donc toi ce que tu fais, c'est que tu mets le tableau correspondant à la première ligne, dans une cellule différente de $result_id

tu comprends ?

par VaN » 21 juil. 2005, 17:31

j'avais laissé le while au début, mais le pb est le meme, sauf que c'est l'id_media_article de la deuxieme image qui inscrit dans chaque tour de boucle

par ouckileou » 21 juil. 2005, 17:28

c'est le même problème... à chaque tout de boucle tu sélectionnes tout, mais tu ne traites que la première ligne de résultat
  $result_id[$i] = mysql_fetch_array($query_id); 
si tu fais pas attention à ce que j'écris c'est pas la peine :roll: on avancera pas

par VaN » 21 juil. 2005, 17:22

<?php
while ($result_media = mysql_fetch_array($query_media)) 
{ 
    ?> 
    <tr> 
        <td width="46">#<?php echo $i ?> :</td> 
        <td><input type="file" name="pic<?php echo $i ?>" /></td> 
    </tr> 
    <tr> 
        <td width="46">alt #<?php echo $i ?> :</td> 
        <td><input type="text" name="alt<?php echo $i ?>" value="<?php echo stripslashes($result_media['alt']); ?>" />
		<?php
		$sql_id = "SELECT * FROM media_pics WHERE id_media_article='$id_media_article'";
		$query_id = mysql_query($sql_id);
		$result_id[$i] = mysql_fetch_array($query_id);
		$id_media_pic = $result_id[$i]['id_media_pic'];
		?>
		<input type="text" value="<?php echo "result_id['$i'] :".$id_media_pic ?>" />
		</td> 
    </tr> 
    <?php 
    $i++; 
}
?>
m'affiche l'id_media_pic de la premiere image dans chaque tour de boucle : /
result_id['1'] :12
result_id['2'] :12

par ouckileou » 21 juil. 2005, 17:10

oui mais avant, ce qui sera à mon avis plus simple

sélection de l'article
sélection des données correspondantes, avec champ file pour mettre à jour

et ensuite, mise à jour direct

c'est un fonctionnement plus classique, et plus cloisonné donc je pense plus simple ;)

par VaN » 21 juil. 2005, 17:06

donc ça pourrait effectivement être un champ hidden, qui pour chaque photo $i, contiendrait le numéro de la ligne correspondante dans ta table
donc il y'a bien un SELECT derriere ça nan ?

par ouckileou » 21 juil. 2005, 17:03

je ne sais pas de quelle façon

mais en tout cas faire un SELECT pour faire un UPDATE dessus, 'cest qu'il y a un problème, et tu pourrais t'en passer

donc ça pourrait effectivement être un champ hidden, qui pour chaque photo $i, contiendrait le numéro de la ligne correspondante dans ta table

comme ça tu récupères tes infos (id_article, id_ligne) et tu fais directement un UPDATE données_de_la_photo WHERE id_article = $id_article AND id_ligne = $id_ligne

par VaN » 21 juil. 2005, 16:59

c'est a dire ? a coté de chaque input FILE, créer un input hidden, et lui affecter l'id_media_pic correspondant ? il faudra tout de meme que je crée une requete SELECT je pense, qui ressemblera en tout point à celle ci. Seule sa place va changer.. j'arive pas bien à visualiser..

par ouckileou » 21 juil. 2005, 16:54

je voulais dire via ton formulaire : faire directement correspondre
fichier - article - ligne d'image

sans justement faire cette requête de sélection

par VaN » 21 juil. 2005, 16:49

bin il me semble que c'est ce que j'essayais tant bien que mal de faire avec ceci :
$sql_id = "SELECT * FROM media_pics WHERE id_media_article='$id_media_article'"; 
                $query_id = mysql_query($sql_id); 
                $result_id[$i] = mysql_fetch_array($query_id); 
                $id_media_pic = $result_id[$i]['id_media_pic']; 
que finalement j'ai enlevé pour réaliser une boucle en while :
$sql_id = "SELECT * FROM media_pics WHERE id_media_article='$id_media_article'";
				$query_id = mysql_query($sql_id);
				
				while ($result_id = mysql_fetch_array($query_id)) 
				{}
qui ne marche pas mieux :lol:

par ouckileou » 21 juil. 2005, 16:38

etu tu n'aurais pas moyen, en plus de l'id de l'article, de récupérer pour chaque l'identifiant de la ligne ?

comme ça tu fais ton "UPDATE ... WHERE id_article = $id_article AND id_image = $id_image"

je schématise mais ça t'éviterai ces bidouilleries avec un SELECT et une double boucle

par VaN » 21 juil. 2005, 16:35

le but de tout ça, c'est de modifier le nom des images liées à l'article dans ma table media_pics. tout d'abord il crée un article, et lui assigne des images, mais je voudrais egalement qu'il puisse modifier ces images.

donc je verifie quels sont les input FILE qui sont rempli :

if (isset($_FILES['pic'.$i]['name']) && $_FILES['pic'.$i]['name']!='')
{}

et a chaque fois que je trouve un input rempli, je fais mes manipulations de selection de la ligne correspondante à cette image, et je modifie le nom de l'image dans la bdd (et ensuite tout le bordel d'upload de l'image et de resize, mais là n'est pas le pb ).

par ouckileou » 21 juil. 2005, 16:29

ben oui les infos n°2 écrasent celles du n°1

je repose la question, peut-être que cette fonction tu répondras :
à quoi correspondent ces manipulations ? que sont ces images et cette table ?


c'est vraiment bizarre comme fonctionnement :

récupérer 4 images
récupérer 4 ligne
puis boucler sur les images, et pour chaque récupérer toutes les données pour ne modifier qu'une ligne

hum hum

tu n'as pas moyen d'identifier plus précisément la ligne que tu souhaites modifier ? cela t'éviterait ce SELECT et cette boucle

par VaN » 21 juil. 2005, 16:24

Voila ce que je viens de faire :
<?php
for ($i=1;$i<=4;$i++) 
		{
			if (isset($_FILES['pic'.$i]['name']) && $_FILES['pic'.$i]['name']!='') 
			{
				$pic = $_FILES['pic'.$i]['name'];
				no_accent($pic);
				$alt = addslashes($_POST['alt'.$i]);

				$sql_id = "SELECT * FROM media_pics WHERE id_media_article='$id_media_article'";
				$query_id = mysql_query($sql_id);
				
				while ($result_id = mysql_fetch_array($query_id)) 
				{
					$id_media_pic = $result_id['id_media_pic'];
					
					echo "id_media_pic : ".$id_media_pic."<br>";
					
				
					$sql_pics = "UPDATE media_pics SET date='$date',alt='$alt' WHERE id_media_pic='$id_media_pic'";
					$query_pics = mysql_query($sql_pics) OR die("Erreur : ".mysql_error());

					
		
					$dir="pictures/";

					$dest=$dir."media_".$id_media_pic."_".$pic;
					move_uploaded_file($_FILES['pic'.$i]['tmp_name'], $dest);
					$sql_upd = "UPDATE media_pics SET pic='".$id_media_pic."_".$pic."' WHERE id_media_pic='$id_media_pic'";
					$query_upd = mysql_query($sql_upd) OR die("Erreur : ".mysql_error());
				}
			}?>
2 pb : le echo "id_media_pic : ".$id_media_pic."<br>"; me renvoie cela :

id_media_pic : 12
id_media_pic : 13
id_media_pic : 12
id_media_pic : 13

j'imagine que c'est normal vu qu'il il y'a deux boucles.. ? (dans cette exemple, j'ai uploadé 2 images)

le deuxieme pb est que dans la bdd, il modifie bien les deux lignes, mais inscrit le nom de l'image fournit dans l'input FILE n°2 dans les 2 lignes : /