sizeof et les tableaux

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 : sizeof et les tableaux

par subversive_element » 14 août 2008, 14:02

En fait, ce que je voulais, c'est que tu sois plus précis que "ça ne marche pas". Qu'est-ce qui se passe réellement ?
La valeur de $x ne change pas quelle que soit la taille de l'array, donc à chaque fois j'ai un seul passage de boucle ($y = 0 <= $x = 0), malgré un echo correct.
Sinon, mieux que les tables temporaires (c'est très couteux les accès SGBD), est-ce que tu as essayé de remplacer ton
while($x <= $y)
par un
foreach($vals as $num_commande)
qui correspond à 100% à ce que tu cherches à faire, à savoir exécuter le code pour chaque (foreach) ligne de ton tableau
Essayé, pas marché... :? Mais c'est pas grave, j'imagine que c'est du à certaines variables environnementales (?) ou autres. Merci.

Agité: en fait le "mal" c'est de récupérer toutes les variables postées sans contrôle sur leur nom, ce qui ouvre une faille de sécurité si quelqu'un bidouille son propre formulaire et l'envoie.

par agité » 14 août 2008, 13:17

J'ai pas compris ca : "Je peuple un tableau de toutes les valeurs POST envoyées par le navigateur (je sais, c'est pas bien, mais c'est un autre problème)."

par exemple de faire une boucle foreach et de tester chaque element $_POST pour voir s'il contient des erreurs, créer un tableau d'erreurs et l'afficher, c'est le mal ?

par zeus » 14 août 2008, 11:52

En fait, ce que je voulais, c'est que tu sois plus précis que "ça ne marche pas". Qu'est-ce qui se passe réellement ?

Sinon, mieux que les tables temporaires (c'est très couteux les accès SGBD), est-ce que tu as essayé de remplacer ton
while($x <= $y)
par un
foreach($vals as $num_commande)
qui correspond à 100% à ce que tu cherches à faire, à savoir exécuter le code pour chaque (foreach) ligne de ton tableau

par subversive_element » 14 août 2008, 11:09

la boucle while ($y <= $x){ ... considère que $x est égal à zéro, ou qu'il n'est pas spécifié.
Est-ce qu'il t'est possible de nous préciser ce qui t'ammène à penser ça ?
Quand je définis $x = 1 dans le code, ça marche.

Quand je définis $x = sizeof($vals) (echo me retourne 1), ça ne marche pas.

J'ai trouvé une solution temporaire, créer une table temporaire et ensuite faire une boucle sur les ID's :
foreach ($_POST as $var => $value) {
$tt = mysql_query("insert into t_temp_fac (id_fac) VALUES ('$value')") or die(mysql_error());
} 

$ff = mysql_query("select * from t_temp_fac order by id_fac") or die (mysql_error());

while ($rrr = mysql_fetch_array($ff)){....}
Mais je reste intrigué...

Merci quand même à tous pour votre aide

par zeus » 14 août 2008, 09:29

la boucle while ($y <= $x){ ... considère que $x est égal à zéro, ou qu'il n'est pas spécifié.
Est-ce qu'il t'est possible de nous préciser ce qui t'ammène à penser ça ?
Il me renvoie "integer", mais ma boucle ne fonctionne toujours pas.... $x est lui aussi considéré comme integer....c'est à n'y rien comprendre :roll:
Je mettrais donc plus la faute sur la boucle que sur $x ;)

NB : PHP étant un langage faiblement typé, il est possible de récupérer une chaine contenant un integer, de lancer des opérations de calcul sur cette chaine et cette chaine sera automatiquement considérée comme un entier.

par subversive_element » 14 août 2008, 08:44

Que veux tu dire par "reconnait" ? PHP peut faire des opérations dessus c'et ça ?


Tu as essayé avec count() à la place de sizeof() ?
Hello-

Merci pour ta réponse.

Exemple concret, je sais qu'il y a deux éléments dans mon tableau, donc $x retourne 1.

la boucle while ($y <= $x){ ... considère que $x est égal à zéro, ou qu'il n'est pas spécifié.

J'ai essayé avec count() et c'est la même chose.

Le problème doit venir de mon tableau qui est créé ainsi, pour rappel :
foreach ($_POST as $var => $value) {
$vals[] = $value;
} 
Si par contre je crée ce tableau manuellement (il s'agit dID's de commande), ça marche:
$vals = array(6900, 6899); ou 
$vals = array('6900', '6899');
Ma méthode de population de $vals semble être la source du problème. Pourtant, quand je sors les valeurs de $vals (echo $vals[0] et [1]), il me sort 6900 et 6899...

EDIT: tests avec gettype(), il me renvoie "string". Mais si je change foreach ainsi:
foreach ($_POST as $var => $value) {
$vals[] = intval($value);
} 
Il me renvoie "integer", mais ma boucle ne fonctionne toujours pas.... $x est lui aussi considéré comme integer....c'est à n'y rien comprendre :roll:

par Ryle » 13 août 2008, 20:45

C'est pas clair ton histoire... et ton code fonctionne très bien.

Quand tu dis que php ne reconnait pas ton $x comme un chiffre tu peux expliquer ce qui te fait penser ça ? Un gettype() de $x devrait te montrer qu'il s'agit bien d'un integer. La question est surtout, qu'est ce que tu en fais ensuite et qu'est ce qui te bloque ? :)


A noter que sizeof() est un alias de count() ... il ne sert à rien d'essayer l'un ou l'autre pour voir s'il y a une différence puisque c'est scrupuleusement la même chose :)

par Aureusms » 13 août 2008, 19:18

Essaye cela si tu veux allez plus vite :
$longueur_tableau_post = count($_POST);

par _activmik » 13 août 2008, 16:50

Que veux tu dire par "reconnait" ? PHP peut faire des opérations dessus c'et ça ?


Tu as essayé avec count() à la place de sizeof() ?

sizeof et les tableaux

par subversive_element » 13 août 2008, 16:35

Bonjour,

Voilà, une question toute bête mais je n'arrive pas à m'en sortir...

Je peuple un tableau de toutes les valeurs POST envoyées par le navigateur (je sais, c'est pas bien, mais c'est un autre problème). Ensuite, j'extrais la taille de ce tableau avec la fonction sizeof() :
$y = 0;
$vals = array();
foreach ($_POST as $var => $value) {
$vals[] = $value;
} 
$x = sizeof($vals) - 1;

}
while ($y <= $x){

...

}
Le problème, c'est que PHP ne reconnaît pas $x comme un chiffre. En testant "echo $x", il me retourne la bonne valeur. J'ai essayé de convertir en nombre avec intval($x), mais rien à faire. C'est comme si $x n'était pas spécifié, il l'ignore totalement. C'est la même chose avec la valeur du tableau $vals. Je peux sans problème les sortir (echo $vals[0], etc.), mais PHP n'arrive pas non plus à lire ces valeurs.

En testant (donc en connaissant d'avance la valeur de $x, par exemple 1), PHP interprète différemment ces deux codes:
$x = sizeof($vals) - 1; [sortie: 1, mais c'est comme si $x restait unset]
$x = 1; [sortie: 1, php "reconnaît" cette valeur]
:shock: Où se trouve l'erreur?

S.