cherche un tutoriel

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 : cherche un tutoriel

par laurentg2003 » 19 oct. 2006, 15:24

oui :lol: :( :lol: promis
c'est de la superstition mais juré je vais les virer
bon je vais tester ton code qui est plus simple et plus élégant et donc plus efficasse(je lis best practices php5 et ça se voit mdr :lol:

par Ryle » 19 oct. 2006, 15:07

lol :) Et sans bidouillage, quelque chose dans ce genre là devrait fonctionner également :)
if ($resultat) {  
  $_SESSION['prenom'] = array(); // déclaration des tableaux
  $_SESSION['age'] = array(); 

  while ($valeur = mysql_fetch_assoc($resultat))  {
    $id = $valeur["filleId"];  
    $image = $valeur["image"];  
    $prenom = $valeur["prénom"]; // récupération des valeurs  
    $age = $valeur["age"];                      
    $pays = $valeur["pays"];  
    $langue = $valeur["langue"];  
    $objectif = $valeur["objectif"];  
    $id=$valeur["filleID"];  
    $miniature=$valeur["miniature"];  

    $_SESSION['prenom'][] = $prenom; // mise en session
    $_SESSION['age'][] = $age;

    echo "<DIV>";  
    echo $valeur["prenom"];
    echo "</DIV>"; 
  }
} 
On peut même en profiter pour virer ces @#[censuré]%$ d'accents sur les noms de variables en ne gardant que celui de la base le temps que tu le changes ;)

RESOLU

par laurentg2003 » 19 oct. 2006, 14:42

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

if ($resultat)
{ 
 while ($valeur = mysql_fetch_assoc($resultat)) 
 {          $id = $valeur["filleId"]; 
            $image = $valeur["image"]; 
            $prénom[] = $valeur["prénom"]; // récupération des valeurs 
            $age[] = $valeur["age"];                     
            $pays = $valeur["pays"]; 
            $langue = $valeur["langue"]; 
            $objectif = $valeur["objectif"]; 
            $id=$valeur["filleID"]; 
            $miniature=$valeur["miniature"]; 


echo"<DIV>"; 

@array_push($_SESSION['prénom'], $prénom); 
@array_push($_SESSION['age'], $age); 


echo "$valeur[prénom]";  
//foreach($resultat as $valeur)
//{
//echo"$valeur";
//}

//$prenom = array($prénom);
//$_SESSION['age'][]= $age; 

//echo"$valeur[prénom]";
//echo"$_SESSION[prénom][]";

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

echo"</DIV>";

}

}
else
{
echo"<B>Erreur dans l'exécution de la requete.</B><BR>";
echo"<B>Message de Mysql : </B>".mysql_error($connexion);
}
echo"<a href='vide.php'>cliquez ici</a><br><br>";
et page2
session_start(); 



echo"<DIV>"; 

$prénom = $_SESSION['prénom'];   
$age = $_SESSION['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>"; 


?> 
<php?
<br><br><br><br> 
 
if (isset($_SESSION['prénom'])) { 
    echo 'La variable prenom est  enregistrée !'; 
    } else { 
    echo 'La variable prenom n\'est pas enregistrée !'; 
} 
session_destroy()  
?>
 
Voilà et ça fonctionne ,heureusement que PHP autorise le bidouillage :lol:
Merci ryle

par laurentg2003 » 18 oct. 2006, 21:41

bon c'est pas fini cette affaire
quand j'affiche la page2 directement et que je reviens sur la page 1 tout fonctionne quand je fait l'inverse(le truc normal et logique) page1 et que je clic sur le lien
Fatal error: [] operator not supported for strings in etcetc
si j'ecris $prenom=array();car visiblement $prenom est une chaine de caractére tout fout le camps
Une vrai histoire de fou ce truc...
la je craque :!:

résolu

par laurentg2003 » 18 oct. 2006, 19:26

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:

par Invité » 18 oct. 2006, 19:09

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

par laurentg2003 » 18 oct. 2006, 17:40

ok merci j'essaye tous ça
je crois que je complique les choses :)

par Ryle » 18 oct. 2006, 17:15

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 !! ;)

session re

par laurentg2003 » 18 oct. 2006, 16:56

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

par laurentg2003 » 29 sept. 2006, 17:34

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

par Ryle » 29 sept. 2006, 17:02

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 ! ;))

par laurentg2003 » 29 sept. 2006, 16:39

$_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é

par Ryle » 29 sept. 2006, 16:09

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 :!:

par laurentg2003 » 29 sept. 2006, 15:46

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

par iclo » 29 sept. 2006, 15:21

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