8792 sujets

Développement web côté serveur, CMS

Hello, j'ai fait un formulaire avec une checkbox pour faire des suppressions multiples..
<form action="<? echo $_SERVER['php_self']; ?>" method="post">     
<table>
<?
$requete = "SELECT id,titre FROM la_gallery_items WHERE gal='$idgal' ORDER BY file";
$resultat=mysql_query($requete);
$count=mysql_num_rows($resultat);

while($row=mysql_fetch_array($resultat)){
echo'<tr>
<td>'.$row[titre].'</td>
<td><input name="delete[]" type="checkbox" id="delete[]" value="checkbox"></td>';
}
?>
</table>
<input name="update" type="hidden" value="1">
<input type="submit" name="Submit" value="Mettre à jour!">
</form>


Et au dessus de ma page, j'ai :


<?
if ($update =='1') {
	for($i=0;$i<$count;$i++){
	    $del_id = $delete[$i];
	    echo $del_id;
        }	
}
?>

Mais il ne retourne rien du tout.
Je vous avoue que je ne suis pas un pro en php et j'ai repiqué des bouts de code par ci par là, je comprend pas tout... Et là, en l'occurence, les trucs de for et i++ c'est pas évident !

Pouvez vous m'aider ? Merci !
Modifié par gordie (01 Nov 2006 - 19:13)
Bonsoir,

Je sais que ma réponse n'est pas très constructive, mais je te déconseille de te lancer dans un langage comme PHP sans t'être un minimum documenté sur le sujet auparavant.
Modifié par Eldebaran (01 Nov 2006 - 19:47)
Ben écoute, ça fait quelques années que je chipote en php; je ne suis pas un expert mais ça va je me débrouille un peu...
Je cale de temps en temps dont cette fois-ci Smiley lol
Ca doit être une bête erreur mais je ne sais pas quoi...
Si tu ne comprends pas for et i++, je te conseille néanmoins de lire un tutoriel PHP, tu en trouveras facilement sur Internet.

Le fait d'utiliser des morceaux de code sans les comprendre est en général potentiellement assez dangereux...
Modifié par Eldebaran (02 Nov 2006 - 12:28)
Je parie que la variable $count dans la boucle n'a aucune valeur Smiley cligne

Voilà ce que je proposerai, mais bon il faudrait encore revoir certaines choses, mais c'est pas le but du sujet Smiley cligne Smiley cligne


<?
if ($update =='1') 
{
	for($i=0;$i<sizeof($_POST['delete']);$i++)
        {
	    $del_id = $_POST['delete'][$i];
	    echo $del_id;
        }	
}
?>


Si le parametre variables_globals est à Off bien sur
Modifié par chpego (02 Nov 2006 - 17:10)
Bonjour.

Si j'ai bien compris, on traite un tableau nommé $delete[], qu'on désire parcourir pour en lire le contenu.

Effectivement, cette variable $count est "casse-gueule", et il y a deux autres méthodes :

Utiliser la fonction count() qui renvoi le nombre d'éléments du tableau


<?php
// Récupérer (éventuellement) le tableau posté... 
$delete = (isset($_POST["delete"])) ? $_POST["delete"] : array();
// et le type de requête
$update = (isset($_POST["update"])) ? $_POST["update"] : "0";

if ($update =='1') 
   for ($i = 0; $i < count($delete)) ; $i++)
   {
        $del_id = $delete[$i];
        echo $del_id;
    }
}
?>


ou, si on n'a pas usage de $i :


<?php
// Récupérer (éventuellement) le tableau posté... 
$delete = (isset($_POST["delete"])) ? $_POST["delete"] : array();
// et le type de requête
$update = (isset($_POST["update"])) ? $_POST["update"] : "0";

if ($update =='1') 
   foreach($delete as $del_id)
   {
       echo $del_id;
   }
}
?>


... et bien sur, éviter/proscrire les variables globales.
Modifié par GeorgesM (02 Nov 2006 - 07:41)
Bouh... y a plein de choses à dire !
Soutenir que tu fais du php depuis plusieurs années et ne pas savoir décortiquer un simple for... tu avoueras que c'est fort (oui je sais elle était facile)

Pour toi et pour ceux qui ont répondu, on ne met pas un count() dans une boucle.

Bon en fait c'est simple, la question est :
- a quoi sert cette boucle for ?
Modifié par Bison (02 Nov 2006 - 12:04)
Bison a écrit :

Pour toi et pour ceux qui ont répondu, on ne met pas un count() dans une boucle.



Smiley rolleyes Pourquoi ? Smiley langue je ne demande qu'à comprendre Smiley cligne
Je crois que le problème du calcul du count est ici plutôt secondaire... Surtout que ce n'est pas une opération que l'on peut qualifier de coûteuse.
Eldebaran a écrit :
Je crois que le problème du calcul du count est ici plutôt secondaire... Surtout que ce n'est pas une opération que l'on peut qualifier de coûteuse.

C'est clair... faire du code propre, c'est secondaire !
Bison a écrit :
C'est clair... faire du code propre, c'est secondaire !
Je ne vois pas le rapport entre faire du code optimisé et du code propre... Bien au contraire.
Bien entendu, le code suivant est didactique :

if ($update =='1') 
   for ($i = 0; $i < count($delete)) ; $i++)
   {
        $del_id = $delete[$i];
        echo $del_id;
    }


... en "production", il faudrait écrire

if ($update =='1') 
{
    $count = count($delete)  ;  // point-virgule rajouté car absent.  [eek] 
    for ($i = 0; $i < $count) ; $i++)
    {
        $del_id = $delete[$i];
        echo $del_id;
    }
}


ça tombe sous le sens.

Le code propre et optimisé ferait appel à une boucle foreach :


<?php

// Récupérer le tableau (éventuellement) posté ... 
$delete = (isset($_POST["delete"])) ? $_POST["delete"] : array();
// et le type de requête
$update = (isset($_POST["update"])) ? $_POST["update"] : "0";

if ($update =='1') 
   foreach($delete as $del_id)
   {
       echo $del_id;    // Agir sur l'élément
   }
}
?>


Tout ceci nous faisant perdre de vue le soucis de la personne qui a ouvert le sujet, qui était, rappelons le : l'usage d'une variable non renseignée en début de traitement d'un formulaire. Le problème se résolvant de la façon exposée.

a écrit :
Soutenir que tu fais du php depuis plusieurs années...

gordie répondait à Eldebaran pour lui indiquer qu'il n'était pas un débutant complet, et donc qu'il était susceptible de comprendre les explications données. Il n'a pas soutenu être un expert.
Modifié par GeorgesM (03 Nov 2006 - 09:50)
GeorgesM a écrit :
Bien entendu, le code suivant est didactique :
... en "production", il faudrait écrire

if ($update =='1') 
{
    $count = count($delete)
    for ($i = 0; $i < $count) ; $i++)
    {
        $del_id = $delete[$i];
        echo $del_id;
    }
}


ça tombe sous le sens.




Si je peux me permettre tu as oublié un ";" à la ligne :

$count = count($delete)

Smiley cligne