8795 sujets

Développement web côté serveur, CMS

Salut à tous,
j'ai un souci au niveau d'un update sur un menu 'sortable' cela fait un journée que je cherche mais je vois pas le truc

La bdd "test":
id | nom | position
1 | nom1 | 4
2 | nom2 | 3
3 | nom3 | 2
4 | nom4 | 1

le code :

<?php
require("connect.php");

if(!empty($_POST))
{
$cate=$_POST['category'];

	foreach($cate as $c){
	extract($c);
	print_r($c);
	$sql1="UPDATE test SET nom='$nom', position=$position WHERE id=$id";
	mysql_query($sql1) or die(mysql_error());
	}

}
?>
<!doctype html>
<head>
<meta charset="utf-8">
<title>jQuery UI Sortable - Default functionality</title>
<link rel="stylesheet" href="js/jquery-ui.css">
<script src="js/jquery.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/order.js"></script>
<style>
 #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
#sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
#sortable li span { position: absolute; margin-left: -1.3em; }
ul#sortable li{border:1px solid #ff0000}
ul#sortable li.fantom{border:1px solid #000000}
</style>

</head>
<body>
<form method="post" action="admin.php">

<ul id="sortable">
<?php
			$i=0;
			$sql="SELECT nom,id,position FROM test ORDER BY position ASC";
			$req = mysql_query($sql) or die(mysql_error());
				while($d = mysql_fetch_assoc($req))
				{
				$i++;
				?>
				<li>
				<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
					<input type="hidden" name="category[<?php echo $i; ?>][$id]"  value="<?php echo $d['id'];?>" />
					<input type="text" name="category[<?php echo $i; ?>][$nom]"  value="<?php echo $d['nom'];?>" />
					<input type="text" class="positioninput" name="category[<?php echo $i; ?>][$position]"  value="<?php echo $d['position'];?>" />
				</li>
					
				<?php
				}
?>
</ul>
<input type="submit" value="Enregistrer"/>
</form>
</body>
</html>


donc quand je valide mon "form", les données sont bien envoyées puisque je les affiches avec le print_r mais la requête ne fonctionne pas cette dernière ne trouve pas les variable a insérer.
si j'echo ma requête cela me donne cela

UPDATE test SET nom='', position='' WHERE id=''
UPDATE test SET nom='', position='' WHERE id=''
UPDATE test SET nom='', position='' WHERE id=''
UPDATE test SET nom='', position='' WHERE id=''

alors que mon print_r($c) m affiche
Array ( [$id] => 4 [$nom] => Titre4 [$position] => 1 ) Array ( [$id] => 3 [$nom] => Titre3 [$position] => 2 ) Array ( [$id] => 2 [$nom] => Titre2 [$position] => 3 ) Array ( [$id] => 1 [$nom] => Titre1 [$position] => 4 )

si qql'un a une idée je suis preneur.
merci d'avance
Modifié par spawns (22 Jul 2014 - 11:37)
Salut,
Il faut que tu concatène tes variables PHP pour qu'elles soient interpretées

$sql1="UPDATE test SET nom='".$nom."', position=$position WHERE id=".$id;
tu as fait un echo de ta requête avec la concaténation pour voir si c'est mieux qu'avant ?

D'après ce que j'ai vu dans la doc PHP concernant extract(), les index de ton tableau n'ont pas à etre préfixés de $ :
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");

Modifié par SpiStache (22 Jul 2014 - 11:25)
oui j'ai fait un echo et cela me retourne la requête vide comme indiqué précédemment.
les variables $nom $id etc... sont définit dans le form en bas de page.

tu as le code entier de la page si tu veux tester il faut juste que tu récupères les jquery

<input type="hidden" name="category[<?php echo $i; ?>]['id']"  value="<?php echo $d['id'];?>" />
<input type="text" name="category[<?php echo $i; ?>]['nom']"  value="<?php echo $d['nom'];?>" />
<input type="text" class="positioninput" name="category[<?php echo $i; ?>]['position']"  value="<?php echo $d['position'];?>"/> 


En retirant les $ à id,nom et position dans l'attribut name ?
Modifié par SpiStache (22 Jul 2014 - 11:32)
SpiStache a écrit :
tu as fait un echo de ta requête avec la concaténation pour voir si c'est mieux qu'avant ?

D'après ce que j'ai vu dans la doc PHP concernant extract(), les index de ton tableau n'ont pas à etre préfixés de $ :
$var_array = array(&quot;color&quot; =&gt; &quot;blue&quot;,
                   &quot;size&quot;  =&gt; &quot;medium&quot;,
                   &quot;shape&quot; =&gt; &quot;sphere&quot;);



OU AH, c'est ça, je suis deg comment j'ai ramé comme un C... pendant une journée pour cela.
Merci beaucoup SpiStache
a charge de revenge

@+