problème de débutant sur les sessions et 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 : problème de débutant sur les sessions et tableaux

par Truc » 23 oct. 2007, 15:06

il faut aussi interpréter les messages d'erreurs.

donc inserer des données bidons ou initialiser avec un array() vide non pas "tableau" mais "tableau>nombre"

par Berzemus » 23 oct. 2007, 14:57

Il faut lire quand ça marche pas.

Dans ton cas, tu peux pas savoir ce qu'il y a dans le tableau, puisque la partie dans laquelle tu veux rechercher n'existe pas encore !!

Donc, il faut insérer les données avant de faire une recherche..

par jobart » 23 oct. 2007, 13:48

Donc si j'ai bien compris je fais comme ça?
if(!isset($_SESSION['tableau']))
{   
    $_SESSION['tableau'] = array();  
}
 if(isset($_GET['nombre']) && isset($_GET['multi]) )
{
 // suite du script... test de l'existence des variables GET
if( ! in_array($_GET["nombre"], $_SESSION['tableau']["nombre"])) 
{

 $motif="^([0-9]+)$";   
   // vérification du format des variables GET et ajout à la session
   if(eregi($motif,$_GET["nombre"]) && eregi($motif,$_GET["multi"]))
  
       $_SESSION['tableau']["nombre"][] = $_GET['nombre'];
        $_SESSION['tableau']["multi"][] = $_GET['multi'];  
 }
}
je dois faire une erreur car j'ai:


Notice: Undefined index: nombre in...
et
Warning: in_array(): Wrong datatype for second argument in
et ça me remplace la ligne du tableau

pourtant quant je fais à part
if (in_array ($_GET["nombre"], $_SESSION['tableau']["nombre"])) {
    print $_GET["nombre"];
  }
ben la ça marche |*()

par Truc » 23 oct. 2007, 11:04

En effet Berzemus :wink:

Donc à remplacer le test if et son contenu que j'avais proposé par celui proposé par Berzemus.
Ensuite si tu ne veux pas ajouter l'élément s'il existe déjà alors il suffira de tester avec
if( ! in_array($_GET["nombre"], $_SESSION['tableau']["nombre"]))
   // ajout 

par jobart » 23 oct. 2007, 10:30

je commence à comprendre =D> \:D/

j'avais trouvé Z d'une autre façon moins poétique disons avec une fonction:
function array_find($array,$search)
   {
   $present = false;
  for ($i = 0; $i < count($array); $i++)
  {
  if( $array[$i]['nombre'] == $search ){$present = true; }
  }
   return $present;
  }

par Berzemus » 23 oct. 2007, 10:22

une petite erreur de gestion des tableaux je crois.

$_SESSION['tableau']['nombre'] est une valeur d'un tableau, une chaine (et pas un tableau en tant que tel, d'après ce que je vois de ton code), qui correspond à $_GET["nombre"]. En réalite, $_SESSION['tableau']['nombre'] n'existe même pas, mais $_SESSION['tableau'][0]['nombre'] bien.

Si tu veux faire ce que je pense que tu veux faire (et encore..), c'est plutôt ceci que tu devrais mettre:
if(eregi($motif,$_GET["nombre"]) && eregi($motif,$_GET["multi"])) {
        $_SESSION['tableau']["nombre"][] = $_GET['nombre'];
        $_SESSION['tableau']["multi"][] = $_GET['multi'];
}
Ainsi $_SESSION['tableau']['nombre'] existera, et sera un tableau contenant tes nombres.

par jobart » 23 oct. 2007, 08:22

d'accord #-o
Comment faire pour faire marcher le "in_array()" pour trouver le $_GET["nombre"] par exemple quand je clic pour qu'il me dise dsl ,ce nombre est déjà dans le tableau!

si j'ai bien compris faut que je mette la condition avant?
if(eregi($motif,$_GET["nombre"]) && eregi($motif,$_GET["multi"]))
        $_SESSION['tableau'][] = array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] );
j'ai pris sur le tuto http://jem-web.info/cv/tutos/tuto_panier.html la fonction:
function verif_panier($ref_article)
{
    /* On initialise la variable de retour */
    $present = false;
    /* On vérifie les numéros de références des articles et on compare avec l'article à vérifier */
    if( count($_SESSION['tableau']['nombre']) > 0 && array_search($ref_article,$_SESSION['tableau']['nombre']) !== false)
    {
        $present = true;
    }
    return $present;
} 


elle ne me voit pas ['nombre']
Notice: Undefined index: nombre in .... #-o

par Truc » 22 oct. 2007, 19:29

ah oui mais ce que je t'ai proposé était un test d'affichage pour voir ce que contiennent ces variables donc à effectuer avant le "in_array()"

Les indices sont ok

par jobart » 22 oct. 2007, 17:10

|*() |*() |*() |*() |*() |*() |*()
if (in_array ($_GET["nombre"], $_SESSION['tableau'])) {
    print $_GET["nombre"];
  echo "<pre>";
print_r($_SESSION['tableau']);
echo "</pre>"
}
j'ai essayé aussi
if (array_key_exists('nombre', $_SESSION['tableau'])) {
    echo "L'élément 'nombre' existe dans le tableau";


ça ne marche pas tandis que la boucle for marche .

quand nous inserons une ligne
$motif="^([0-9]+)$";
// vérification du format des variables GET et ajout à la session
   if(eregi($motif,$_GET["nombre"]) && eregi($motif,$_GET["multi"]))
        $_SESSION['tableau'][] = array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] );
question de débutant
ne serait ce pas l'incrémentation automatique
$_SESSION['tableau'][] = 
qui nous joue des tours?
car quand je teste avec
print_r(array_keys($_SESSION['tableau']));
j'ai
Array ( [0] => 0 [1] => 1 [2] => 2 )
Mystère, mystère...

par Truc » 22 oct. 2007, 16:18

merci, j'ai essayé
if (in_array ($_GET["nombre"], $_SESSION['tableau'])) {
    print $_GET["nombre"];
  }
est syntaxiquement correct, affiche donc les 2 contenus des varaibles
print_r($_GET["nombre"]);

echo "<pre>";
print_r($_SESSION['tableau']);
echo "</pre>";

par jobart » 22 oct. 2007, 15:42

tu as le piolet et les crampons pour aller le chercher , car c'est une pente glissante :wink:
je boque sur
array_search()
et
in_array()
dans ma boucle avec count j'ai
$_SESSION['tableau''][$i]['nombre]
comment fait on pour
array_search()
et
in_array()
|*()

par Ryle » 22 oct. 2007, 15:34

Image

Ouais bon... ça va... je sors.... :roll:

par jobart » 22 oct. 2007, 15:27

j'ai trouvé ça pour la boucle:
  $count = count($_SESSION['tableau']);
 for ($i=0;$i < $count;$i++)
 {
 if ($_SESSION['tableau''][$i]['nombre] == $_GET['nombre'])
 {
 echo $_SESSION['tableau''][$i]['nombre'] ;
 }
 }
plus qu'à trouver Z :ordi:

par jobart » 22 oct. 2007, 15:09

merci, j'ai essayé
if (in_array ($_GET["nombre"], $_SESSION['tableau'])) {
    print $_GET["nombre"];
  }
ça trouve rien, aurais je omis quelque chose?

par Truc » 22 oct. 2007, 14:34

tu as in_array() pour ça et d'autres fonctions pour jouer avec les tableaux