Page 1 sur 2

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

Posté : 22 oct. 2007, 12:28
par jobart
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

Posté : 22 oct. 2007, 12:39
par Truc
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.

Posté : 22 oct. 2007, 12:55
par jobart
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. |*()

Posté : 22 oct. 2007, 13:24
par Truc
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)

Posté : 22 oct. 2007, 13:39
par jobart
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:

Posté : 22 oct. 2007, 13:54
par jobart
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:

Posté : 22 oct. 2007, 14:01
par Truc
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'] );  
}

Posté : 22 oct. 2007, 14:14
par jobart
=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();

Posté : 22 oct. 2007, 14:34
par Truc
tu as in_array() pour ça et d'autres fonctions pour jouer avec les tableaux

Posté : 22 oct. 2007, 15:09
par jobart
merci, j'ai essayé
if (in_array ($_GET["nombre"], $_SESSION['tableau'])) {
    print $_GET["nombre"];
  }
ça trouve rien, aurais je omis quelque chose?

Posté : 22 oct. 2007, 15:27
par jobart
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:

Posté : 22 oct. 2007, 15:34
par Ryle
Image

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

Posté : 22 oct. 2007, 15:42
par jobart
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()
|*()

Posté : 22 oct. 2007, 16:18
par Truc
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>";

Posté : 22 oct. 2007, 17:10
par jobart
|*() |*() |*() |*() |*() |*() |*()
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...