Page 1 sur 2

cherche un tutoriel

Posté : 29 sept. 2006, 10:43
par laurentg2003
Bonjour,
Aprés avoir eplucher enormément de tuto sur les sessions tous trés bien fait mais présentant pour la plupart comme exemple l'accés à un espace réservé je cherche un tuto sur les sessions qui récupere simplement des données d'un base et qui les affichent de page en page
j'ai déja éssayé de faire un script de ce genre mais la derniere valeur ecrase les autres
surement un probléme de récupération de variable dans un tableau(avec un foreach peut étre?)enfin j'en sais rien merci d'avance

Posté : 29 sept. 2006, 11:42
par Ryle
Je n'ai pas vraiment de tutoriel à te conseiller, mais en ce qui me concerne, je résumerais les sessions à deux choses principales qui devraient te donner les clés pour n'importe quoi derriere :

1. session_start() en début de page : oui, c'est assez évident, mais sans ça la session elle tourne pas :)

2. le tableau $_SESSION : qui en dehors de son nom n'a rien d'extraordinaire, ca reste un vulgaire tableau dans lequel tu ranges ce que tu veux :
- variables : $_SESSION["index"] = $valeur ;
- tableaux : $_SESSION["tableau"] = array(...);
- objets sérialisés : $_SESSION["objet"] = serialize($object);
...
et qui s'intéroge tout aussi facilement :
- echo $_SESSION["index"];
- print_r($_SESSION["tableau"]);
- unserialize($_SESSION["objet"]);
...

Dès que tu as compris ça, il ne te reste plus qu'à vérifier ce que tu mets dedans, sous quel nom tu le mets pour pouvoir le retrouver et le reste devrait se faire les yeux fermés :) (enfin entrouverts quand même, c'est un coup à taper n'importe quoi sur le clavier sinon ;))

Posté : 29 sept. 2006, 11:50
par laurentg2003
:lol:
merci je vais me pencher sur tes indications
je recommence tout à zero

Posté : 29 sept. 2006, 15:05
par laurentg2003
re bonjour,
Bon aprés moult manoeuvres
j'ai réussie à afficher les variables sur la 1er page
voici le code
<?php
session_start();
require ("Connect.php");

$connexion = mysql_pconnect (SERVEUR,NOM,PASSE);

if (! $connexion)
{
 echo"Désolé,connexion à " . SERVEUR ." impossible\n";
 exit;
}

if (! mysql_select_db (BASE,$connexion))
{
 echo "Désolé,accés à la base " . BASE . " impossible\n";
}

$resultat=mysql_query ("SELECT * FROM Fille",$connexion);

if ($resultat)
{
 while ($valeur = mysql_fetch_array($resultat))
 {          $id = $valeur["filleId"];
			$image = $valeur["image"];
			$prénom = $valeur["prénom"];
			$age = $valeur["age"];
			$pays = $valeur["pays"];
			$langue = $valeur["langue"];
			$objectif = $valeur["objectif"];
                  $id=$valeur["filleID"];
                  $miniature=$valeur["miniature"];

$_SESSION['prénom'] = "$prénom";


if ( isset( $_SESSION['prénom'] ) )
 {
   
  echo 'mon prénom : ' ;
  // lecture de la variable de session 'prénom'
  
  echo $_SESSION['prénom'] ;
  echo "<a href=\"vide.php\">afficher le profil</a>";
} else {

  echo 'prénom n\'existe pas dans la session' ;
} 



				  
				  
				  }
}
else
{
echo"<B>Erreur dans l'exécution de la requete.</B><BR>";
echo"<B>Message de Mysql : </B>".mysql_error($connexion);
}			
?>
mon soucis est que la seconde page n'affiche rien
mon code
// on initialise et utilise la session
session_start();
$_SESSION['prénom'] = "$prénom";
echo $_SESSION['$prénom']; // affiche rien du tout donc...
c'est le code que je trouve sur tous les tuto....
cela dit m'est avis qu'il doit manquer un bon bout de code

Posté : 29 sept. 2006, 15:21
par iclo
Le tableau super global $_SESSION contient toutes les informations que tu y as déja placé dans les scripts précédents

Sur ta deuxième page, après le session _start, tu fais
$_SESSION['prénom'] = "$prénom";
ce qui t'écrase le contenu de ta variable de sessions.
Fais simplement print $_SESSION['prénom']; après le session_start, pour voir ce que cela donne.

Le tableau super global $_SESSION contient toutes les informations que tu y as déja placé dans les scripts précédents

Posté : 29 sept. 2006, 15:46
par laurentg2003
<?php
echo("<pre>") ;
print_r($_SESSION) ;
echo("</pre>") ;
?>
et bien j'y avais déja penser (pour une fois lol)
et ça affiche Array
(
[prénom] =>
)

donc c'est un tableau multidimensionel associatif
j'ai méme essayé ça mais la c'est du delire
session_start();
if ( isset( $_SESSION['prénom'] ) )
foreach($_SESSION as$valeur)
{
    echo "<td><b>$valeur</b></td>";
} 
le pire c'est que ça m'affiche la méme chose
donc je pense qu'il faut lire le tableau non?

Posté : 29 sept. 2006, 16:09
par Ryle
Un petit soucis au niveau de l'ajout du prénom dans la session :
if ($resultat) 
{ 
 while ($valeur = mysql_fetch_array($resultat))  // ici tu boucles sur les lignes retournées par la base
 {          $id = $valeur["filleId"]; 
            $image = $valeur["image"]; 
            $prénom = $valeur["prénom"]; 
            $age = $valeur["age"]; 
            $pays = $valeur["pays"]; 
            $langue = $valeur["langue"]; 
            $objectif = $valeur["objectif"]; 
                  $id=$valeur["filleID"]; 
                  $miniature=$valeur["miniature"]; 

$_SESSION['prénom'] = "$prénom"; // ici tu écrases à chaque fois la valeur précédente par la nouvelle
...
En fait, tu es dans le cas ou tu veux mettre un tableau en session.

Si tu veux compléter ton tableau avec chaque prénom, il te faut spécifier qu'il s'agit d'un nouvel élément du tableau avec la fonction push ou en ajoutant les chrochets :
<?
array_push($_SESSION['prénom'], $prénom);
// ou 
$_SESSION['prénom'][] = $prénom; 
// à noter que les guillemets autour de $prénom ne sont pas obligatoires :)?>
Tu peux également créer ton tableau normalement et une fois celui-ci renseigné comme tu le souhaites (en vérifiant avec print_r que tu as bien ce que tu attends) tu le coles dans $_SESSION ;)

Dans ta seconde page, un session_start et un print_r($_SESSION['prénom']) devraient te montrer ton tableau correctement renseigné.. reste plus qu'à boucler sur $_SESSION['prénom'] pour le parcourir :)


Edit : une remarque en passant, évite les accents et les caractères spéciaux autre que "_" dans tes noms de variable ou de champ en base :!:

Posté : 29 sept. 2006, 16:39
par laurentg2003
$_SESSION['prénom'][] = $prénom;
provoque une fatal erreur sauf si je met un 0 entre les crochet
la 1er page s'affiche toujours sur la deuxieme ça marque Array
Array
(
[prénom] => Array
)
avec array_push($_SESSION['prénom'], $prénom);
ça afficheWarning: array_push(): First argument should be an array in
et sur la page deux toujours
Array
(
[prénom] =>
)

je comprend le principe ça a méme l'air simple
mais franchement je crois que je suis pas doué

Posté : 29 sept. 2006, 17:02
par Ryle
Pour les crochets, ca ne devrait pas le faire... il te dit quoi dans le message d'erreur ?

Pour le array_push, il faut effectivement dire qu'il s'agit d'un tableau, tu peux ajouter ceci avant ton while :

Code : Tout sélectionner

$_SESSION['prénom'] = array();
Cela t'évitera l'avertissement et te donnera normalement le résultat attendu :)

(Et évite les accents dans les noms de variable ou d'index ! ;))

Posté : 29 sept. 2006, 17:34
par laurentg2003
<?php
session_start();
require ("Connect.php");

$connexion = mysql_pconnect (SERVEUR,NOM,PASSE);

if (! $connexion)
{
 echo"Désolé,connexion à " . SERVEUR ." impossible\n";
 exit;
}

if (! mysql_select_db (BASE,$connexion))
{
 echo "Désolé,accés à la base " . BASE . " impossible\n";
}

$resultat=mysql_query ("SELECT * FROM Fille",$connexion);

if ($resultat)
{
 while ($valeur = mysql_fetch_array($resultat))
 {          $id = $valeur["filleId"];
			$image = $valeur["image"];
			$prénom = $valeur["prénom"];
			$age = $valeur["age"];
			$pays = $valeur["pays"];
			$langue = $valeur["langue"];
			$objectif = $valeur["objectif"];
                  $id=$valeur["filleID"];
                  $miniature=$valeur["miniature"];
$_SESSION['prénom'] = array();
array_push($_SESSION['prénom'], $prénom); 






if ( isset( $_SESSION['prénom']))
 {
   
  echo 'mon prénom : ' ;
  // lecture de la variable de session 'prénom'
  
  echo $_SESSION['prénom'] ;
  echo "<a href=\"vide.php\">afficher le profil</a>";
} else {

  echo 'prénom n\'existe pas dans la session' ;
} 



				  
				  
				  }
}
else
{
echo"<B>Erreur dans l'exécution de la requete.</B><BR>";
echo"<B>Message de Mysql : </B>".mysql_error($connexion);
}			
?>
$_SESSION['prénom'] = array();
avant while ça provoque le méme message d'erreur donc je l'ai mis avant
array_push($_SESSION['prénom'], $prénom); et le résultat est
mon prénom : Array sur la page 1 sur page deux aucun changement
il faut faire une boucle peut étre?
pour les accents vu que prénom est un nom de champs ds ma bdd je le changerai qd j'aurais le temps de faire les mises à jour de tous les script mais merci du conseil ça prete à confusion

session re

Posté : 18 oct. 2006, 16:56
par laurentg2003
Bonjour,
Aprés des recherches acharnées sur les sessions et les tableaux et les conseils de ryle,je suis parvenu à faire le code suivant qui fonctionne certes mais qui est casiment inutilisable dans le sens ou c'est difficile d'utiliser les données(dans les variables) obtenues en page 2 .Je rappelle le but recherché interroger une base de donnée recupérer les valeurs de ces données et les transmettre de page en page avec les sessions .
Comment corriger ce code pour le rendre efficasse et fonctionel?
le code
page1
if ($resultat)
{
 while ($valeur = mysql_fetch_assoc($resultat))
 {          $id = $valeur["filleId"];
			$image = $valeur["image"];
			$_SESSION['prénom'][] = $valeur["prénom"];
		    $_SESSION['age'][]= $valeur["age"];					
			$pays = $valeur["pays"];
			$langue = $valeur["langue"];
			$objectif = $valeur["objectif"];
            $id=$valeur["filleID"];
            $miniature=$valeur["miniature"];


echo"<DIV>";

$_SESSION['prénom'][]= $prénom;
$_SESSION['age'][]= $age;
echo "$valeur[prénom]";
et la page 2
<?
session_start();



echo"<DIV>";
$_SESSION['prénom']=$prénom;
$_SESSION['age']= $age;
//$prénom = array($prénom);
echo"<TABLE border='1'><TR>";
foreach($prénom as $valeur1)
{
echo"<TD>$valeur1</TD>";

}
echo"</TR></TABLE>";

echo"<TABLE border='1'><TR>";
foreach($age as $valeur2)
{
echo"<TD>$valeur2</TD>";

}
echo"</TR></TABLE>";
//echo"$valeur[prénom]";
//echo"$_SESSION[prénom]";

//var_dump($prénom);
//echo"<pre>";
//print_r ($prénom);
//echo"</pre>";

echo"</DIV>";
 
echo'Les filles s\'appellent :';
foreach($prénom as $valeur1)
{
echo"$valeur1   ";

}

//echo"$prénom";






//var_dump($prénom);
//echo"<pre>";
//print_r ($prénom);
//echo"</pre>";


?>
<br><br><br><br>
<?php
if (isset($_SESSION['prénom'])) {
    echo 'La variable prenom est  enregistrée !';
    } else {
    echo 'La variable prenom n\'est pas enregistrée !';
}
session_destroy() 
?>

les ligne commanter sont des tests en fait
un var_dump($prénom) donne array(8) { [0]=> string(5) "Maria" [1]=> NULL [2]=> string(5) "Tanja" [3]=> NULL [4]=> string(3) "Eva" [5]=> NULL [6]=> string(6) "Oksana" [7]=> NULL }
Ce qui me semble pas correct (NULL [2])
En bref ce code devrait pas fonctionner
help.... :roll: Merci

Posté : 18 oct. 2006, 17:15
par Ryle
Hello :)

C'est parce que tu ne fais pas attention à ce que tu mets dans ta session... regarde le contenu de ton tableau avant de passer à la page suivante, tu verras qu'il est déjà incohérent et qu'une ligne sur deux contient un null.
while (...) {
  ...
  $_SESSION['prenom'][] = $valeur["prénom"]; // Ici tu mets les valeurs de ta requête dans ta session
  $_SESSION['age'][]= $valeur["age"]; 
  ...

  $_SESSION['prenom'][]= $prénom; // Et là tu ajoutes à nouveau dans ta session une variable $prénom alors que celle-ci n'existe pas. Tu vas donc récupérer un null
  $_SESSION['age'][]= $age; // idem pour l'age
}
Tu devrais soit supprimer ce deuxième ajout en session, soit remplacer le premier par les variables que tu utilises :
  $prenom = $valeur["prenom"]; // récupération des valeurs
  $age= $valeur["age"]; 
  ...
  $_SESSION['prenom'][]= $prenom; // mise en session
  $_SESSION['age'][]= $age;
Enfin, sur ta deuxième page, tu affectes de nouveau une valeur dans ta session au lieu d'en lire le contenu, ce qui ne doit pas te donner grand chose comme résultat :
// tu fais
$_SESSION['prenom']=$prenom; 
// au lieu de 
$prénom = $_SESSION['prenom'];
un var_dump($prenom); te montrerais alors le tableau des prénoms que tu as obtenu, et une simple boucle foreach te permettrait de le parcourir pour l'afficher :)

Ps : Et on met pas d'accent dans ses noms de variables ronthidjiu ?! J'vais te coller un clavier qwerty moi, ca va pas faire un pli !! ;)

Posté : 18 oct. 2006, 17:40
par laurentg2003
ok merci j'essaye tous ça
je crois que je complique les choses :)

Posté : 18 oct. 2006, 19:09
par Invité
quand j'ecris ça$_SESSION['prenom'][]= $prenom; // mise en session
$_SESSION['age'][]= $age; ça marque :
Fatal error: [] operator not supported for strings in etcetc
visiblement le probléme vient du fait que c'est une chaine a la base..
que faire??

résolu

Posté : 18 oct. 2006, 19:26
par laurentg2003
merci beaucoup ryle
plus de blanc et de null
et va savoir pourquoi ça marche
j'crois que j'ai pas actualisé la page :lol:
bon j'ai passé 15 jours la dessus
merci beaucoup
ah oui j'ai supprimé les accents dans les noms de variables ...
pas besoin de qwerty :wink: