problème de débutant sur les sessions et tableaux

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 76 Messages

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

ViPHP
ViPHP | 4039 Messages

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.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 76 Messages

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;
  }

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 76 Messages

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 |*()

ViPHP
ViPHP | 4039 Messages

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..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute