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

Eléphant du PHP | 76 Messages

22 oct. 2007, 12:28

Bonjour,
Tout nouveau dans la programation du php (et de la programation tout court :wink: ).
Je suis arrivé aux tableaux et aux sessions, j'essaye de comprendre tout ça :-k .
en suivant un peu les tuto j'ai fait des bout de code dont celui-ci:
<? 
session_start();
if(!isset($_SESSION['tableau']))
{
   
    $_SESSION['tableau'] = array(); 
}
else{
$motif="^([0-9]+)$";
if(eregi($motif,@$_GET["nombre"])&&isset($_GET['nombre']))
{
@array_push($_SESSION['tableau'],array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] ));  
 }
}
?>
que je remplie avec

Code : Tout sélectionner

<a href="?nombre=50&&multi=2">http://</a> <a href="?nombre=51&&multi=3">http://</a> <a href="?nombre=52&&qte=1">http://</a>
Je voudrai comprendre l'erreure que je fais par rapport à l'initialisation du tableau
car quand je clic sur un lien la première fois j'ai:

Code : Tout sélectionner

array(0) { }
puis quand je clic à nouveau dessus:

Code : Tout sélectionner

array(1) { [0]=> array(2) { ["nombre"]=> string(2) "51" ["multi"]=> string(1) "3" } }
je pense que c'est tout bête , mais un peu d'aide peut m'aider dans ma compréhention

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2007, 12:39

Salut,

Et le souci c'est quoi ?
Le script fait exactement ce que tu lui demandes :-k

On peut simplifier (sécuriser) sans les "@" :
$motif="^([0-9]+)$";
if(isset($_GET['nombre']) && isset($_GET['multi']) )
{
    if(eregi($motif,$_GET["nombre"]) && eregi($motif,$_GET["multi"]))
        $_SESSION['tableau'][] = array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] );  
}
Donc si le tableau de session n'existe pas tu le crée (1er if) donc la tu as
array(0) {
}
SINON tu vérifie si $_GET["nombre"] existe et est un nombre pour l'ajouter au tableau de session pour avoir ton 2ème affichage.

/!\ 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

22 oct. 2007, 12:55

je te remercie de m'avoir eclairé :D
je voulais que mon tableau existe déjà
j'ai fais
session_start();
 $_SESSION['tableau'] = array(); 

$motif="^([0-9]+)$";
if(eregi($motif,@$_GET["nombre"])&&isset($_GET['nombre']))
{
array_push($_SESSION['tableau'],array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] ));  
 }

?>
la où je bug :( c'est qu'il me remplace la ligne au lieu de me la rejouter. |*()

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2007, 13:24

oui puisque la tu lui demande de créer à chaque fois un nouveau tableau de session.

Il faut juste que tu enlèves le "else" de ton 1er code et exécuter dans tous les cas l'ajout des valeurs (si elles sont correctes = nombre)

/!\ 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

22 oct. 2007, 13:39

j'ai fais ce que tu m'as dit:
<? 
session_start();
if(!isset($_SESSION['tableau']))
{
   
    $_SESSION['tableau'] = array(); 

$motif="^([0-9]+)$";
if(eregi($motif,@$_GET["nombre"])&&isset($_GET['nombre']))
{
@array_push($_SESSION['tableau'],array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] ));  
 }
}
?>
il enregistre le premier lien puis il ne prend plus rien :cry:
vive les joies du débutant :wink:

Eléphant du PHP | 76 Messages

22 oct. 2007, 13:54

merci de tes lumières
j'ai codé comme ça
<? 
session_start();
if(!isset($_SESSION['tableau']))
{
   
    $_SESSION['tableau'] = array(); 

$motif="^([0-9]+)$";
if(eregi($motif,@$_GET["nombre"])&&isset($_GET['nombre']))
{
@array_push($_SESSION['tableau'],array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] ));  
 }
}
else{$motif="^([0-9]+)$";
if(eregi($motif,@$_GET["nombre"])&&isset($_GET['nombre']))
{
@array_push($_SESSION['tableau'],array("nombre"=>$_GET['nombre'],"multi"=>$_GET['multi'] ));  
 }
?>
ça à l'air de marcher, peut on le compacter? :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2007, 14:01

hi hi
Ce que je voulais dire en enlevant le "else" et exécuter le reste c'est :
Faut pas essayer de chercher compliqué la programmation n'est qu'un cheminement logique "si X alors faire Y; faire ça avec Z"
session_start();
// test de l'existence
if(!isset($_SESSION['tableau']))
{   
    $_SESSION['tableau'] = array();  
}

// suite du script... test de l'existence des variables GET
if(isset($_GET['nombre']) && isset($_GET['multi']) )
{
   $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'] );  
}

/!\ 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

22 oct. 2007, 14:14

=D>
des fois Z est un peu dur à trouver, merci encore :D .
si je peux me permette de prendre encore un peu de ton temps :oops:
suite logique : savoir si un nombre existe dans le tableau.

Il faut mieux faire un
array_search($_GET['nombre'],$_SESSION['tableau']);
?

ou une boucle, avec for, while ou
foreach();

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2007, 14:34

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

/!\ 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

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?

Eléphant du PHP | 76 Messages

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 oct. 2007, 15:34

Image

Ouais bon... ça va... je sors.... :roll:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 76 Messages

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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

/!\ 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

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...