Transmettre une variable de session?

WRInaute passionné
Bonjour,

J'essaye tant bien que mal de transmettre une simple variable de session d'une page à une autre mais sans succès et je ne comprend pas pourquoi!

Page1:
Code:
<? 
     session_start(); 
     $_SESSION['login']='valeur';
echo "<a href=\"modifier-en-tete2.php\">informations.php</a>";
?>
Page2:
Code:
<?
     session_start();
     if(isset($_SESSION['login']))
     {
          echo $_SESSION['login']; 
     }
?>
Je précise que les codes sont placés en tout début de page, sans espace et qu'il n'y a rien d'autre comme code (simple teste).J'ai également testé en commencent le code avec <?php ...

Sous FREE et OVH, j'ai cette erreur:
Code:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/141/sdc/e/0/.../index2.php:1) in /mnt/141/sdc/e/0/...index2.php on line 1
Sous 1&1 pour le même code je n'ai pas d'erreur mais la variable n'ai pas transmise 8O .
J'aimerais comprendre pourquoi selon l'hébergeur un même code renvoie des erreurs et pourquoi ma variable n'ai pas transmise.
Merci
 
WRInaute accro
tu n est sur qu'il y a que ca dans tes 2 pages ? tu n inclurai pas une page qui fait un session_start() dans une autre page a tout hasard ? car pas besoin de redefinir quoi que ce soit dns une page incluse, ca fait doublon :)
 
WRInaute passionné
e-kiwi a dit:
tu n est sur qu'il y a que ca dans tes 2 pages ? tu n inclurai pas une page qui fait un session_start() dans une autre page a tout hasard ? car pas besoin de redefinir quoi que ce soit dns une page incluse, ca fait doublon :)

J'ai pourtant bien dit: "..qu'il n'y a rien d'autre comme code .." :) .
Ces 2 fichiers sont "isolés" dans une dossier. Il n'y a vraiment rien d'autre que les 2 bouts de code cité plus haut mit respectivement dans les 2 fichiers.
Merci quand même e-kiwi.
 
Nouveau WRInaute
Code:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/141/sdc/e/0/.../index2.php:1) in /mnt/141/sdc/e/0/...index2.php on line 1

ça signifie que du code html a été envoyé avant ton session_start() ... vérifie bien ton code ...

pour 1and1 c'est normal qu'il n'affiche pas d'erreur, ils ont supprimé l'affichage des erreurs dans php.ini. (c'est pour des raisons de sécurité...)
 
WRInaute impliqué
Effectivement tu as du texte renvoyé au navigateur avant le début du PHP.
Il se peut que ça soit des caractères invisibles, ouvres ton fichier avec un éditeur héxadécimal par exemple et vire tout ce qu'il y a avant <?
 
WRInaute passionné
J'ai beau vérifier et re-vérifier, je ne vois pas d'erreur ..
Regarder par vous même:
Chez OVH -http://reflink.fr/a/. (Le .rar contient les 2 fichiers que j'utilise).
La même sous FREE -http://creer.mon.site.free.fr/a/ et enfin sous 1&1 -http://creer-un-site.fr/a/index2.php .
 
WRInaute impliqué
il y a bien 3 caractères qui s'incrustent au tout début de tes fichiers.

Ça m'arrive souvent ce genre de trucs et c'est bien chiant (ce sont généralement des en-têtes UTF-8 que Notepad++ ajoute mais qui me gênent plus qu'autre chose).

Utilise HexEdit par exemple pour les virer
 
WRInaute passionné
Merci FloBaoti, visiblement ta réponse est la bonne :D . Ceci dit, j'ai utilisé bloc-notes pour ce petit bout de code. Je trouve sa vraiment "relou" qu'il faille utiliser un logiciel spéciale pour se rendre compte de sa ...
En tout cas merci à vous :wink: .
 
WRInaute accro
A ben voila, c'est le bloc-note. Installe notepad++ !

Justement avec lui tout va bien, tu as les couleurs pour tous les langages, il est léger, une fonction rechercher remplacer super puissante multi-fichiers :p
 
WRInaute passionné
Whaouuu , trop chiant ces caractères qui viennent s'incruster comme sa!

Bon vu que je suis dans les transmissions de variable, j'ai un nouveau soucis que je ne comprend pas ..

Je transmet donc des infos d'une page A à une page B par variable de session qui s'affiche donc dans un formulaire. Jusque la, pas de soucis!
Code de la page de mon formulaire:
Code:
<?php if (isset($_SESSION['identete']))
{
?>

<form name="frm" method="get" action="modifier-en-tete2.php">
<b>ID:</b>
<input type="text" name="iad" value="<?php echo $_SESSION['identete']; ?>" /><br/>
<b>Titre:</b><br/>
<textarea name="taitre" cols=50 rows="5" ><?php echo stripslashes($_SESSION['titreentete']); ?>" /></textarea><br />
<b>Description:<b><br/>

<textarea name="daescription" cols=50 rows="5" ><?php echo stripslashes($_SESSION['descriptionentete']); ?></textarea><br/>

<b>Url :</>
<input type="text" name="uarl" value="<?php echo $_SESSION['urlentete']; ?>" />
<br />
<input type="submit" name="envoyer" value="Modifier l'entete" />

</form>

<?}?>
Je souhaite ensuite pouvoir modifier les infos contenue dans mon formulaire, alors je transmet celles ci à une page C par méthode GET pour la modification dont voici le code:
Code:
<?php 
//si la variable $_GET["iad"] existe alors ..
if (isset($_GET["iad"])){

//je teste si elle existe en l'affichant
echo $_GET["iad"];


//Je me connecte   
mysql_connect("**","**","**");
mysql_select_db("localhost");

$id = $_GET["iad"];
$titre = $_GET["taitre"];
$description = $_GET["daescription"];
$url = $_GET["uarl"];


$sql=("UPDATE `nom_de_ma_base`.`RSS` SET `titre` = '$titre',`description` = '$description',`url` = '$url' WHERE 

`RSS`.`id` =$id LIMIT 1 ;");


mysql_close();
}
?>
Les infos modifiées depuis la page B sont bien transmises à C mais aucune changement ne se fait dans ma base ...
Ou est mon erreur ?
 
WRInaute accro
tryan a dit:
Whaouuu , trop chiant ces caractères qui viennent s'incruster comme sa!

Bon vu que je suis dans les transmissions de variable, j'ai un nouveau soucis que je ne comprend pas ..

Je transmet donc des infos d'une page A à une page B par variable de session qui s'affiche donc dans un formulaire. Jusque la, pas de soucis!
Code de la page de mon formulaire:
Code:
<?php if (isset($_SESSION['identete']))
{
?>

<form name="frm" method="get" action="modifier-en-tete2.php">
<b>ID:</b>
<input type="text" name="iad" value="<?php echo $_SESSION['identete']; ?>" /><br/>
<b>Titre:</b><br/>
<textarea name="taitre" cols=50 rows="5" ><?php echo stripslashes($_SESSION['titreentete']); ?>" /></textarea><br />
<b>Description:<b><br/>

<textarea name="daescription" cols=50 rows="5" ><?php echo stripslashes($_SESSION['descriptionentete']); ?></textarea><br/>

<b>Url :</>
<input type="text" name="uarl" value="<?php echo $_SESSION['urlentete']; ?>" />
<br />
<input type="submit" name="envoyer" value="Modifier l'entete" />

</form>

<?}?>
Je souhaite ensuite pouvoir modifier les infos contenue dans mon formulaire, alors je transmet celles ci à une page C par méthode GET pour la modification dont voici le code:
Code:
<?php 
//si la variable $_GET["iad"] existe alors ..
if (isset($_GET["iad"])){

//je teste si elle existe en l'affichant
echo $_GET["iad"];


//Je me connecte   
mysql_connect("**","**","**");
mysql_select_db("localhost");

$id = $_GET["iad"];
$titre = $_GET["taitre"];
$description = $_GET["daescription"];
$url = $_GET["uarl"];


$sql=("UPDATE `nom_de_ma_base`.`RSS` SET `titre` = '$titre',`description` = '$description',`url` = '$url' WHERE 

`RSS`.`id` =$id LIMIT 1 ;");


mysql_close();
}
?>
Les infos modifiées depuis la page B sont bien transmises à C mais aucune changement ne se fait dans ma base ...
Ou est mon erreur ?

Tu devrais débugger pas à pas :

1) faire un echo juste avant ton test $_GET["iad"]
2) faire un echo juste après ton test $_GET["iad"]
3) faire un echo de l'ordre sql et le etster dans phpmyadmin pour vérifier qu'il est bon

Par ailleurs, avant d'affecter le contenu de variables récupérées dans l'url ou en post à des variables, c'est bien de les tester et de faire un mysql_real_escape_string.
 
WRInaute accro
en meme temps dans le code y a pas l'execution de la requete (mysql_query) et cette insertion marchera pas tout le temps (genre dans $description y a une apostrophe, et ca plante, pense à trsiter les variables avant de les inserer (addslashes, htmlentities, ...) et mieux aussi passer tes variables apr $_POST plutot que par GET aussi, je n'en vois aps l interet ici
 
WRInaute accro
e-kiwi a dit:
en meme temps dans le code y a pas l'execution de la requete (mysql_query) et cette insertion marchera pas tout le temps (genre dans $description y a une apostrophe, et ca plante, pense à trsiter les variables avant de les inserer (addslashes, htmlentities, ...) et mieux aussi passer tes variables apr $_POST plutot que par GET aussi, je n'en vois aps l interet ici

Ah oui j'avais zappé l'essentiel, l'absence d'exécution de l'ordre sql.

Par contre on est bien d'accord pour le reste e-kiwi, je vois pas trop l'intérêt du $_GET. Mais même en post, appliquer des traitements préalable aux variables récupérées est un indispensable avant de tenter de les insérer en base. Et en premier lieu, tester que les données existent avant de les affecter c'est quand même plus propre.
 
WRInaute passionné
e-kiwi: tu dis que dans $description il y a une apostrophe et que sa plante .. Je ne comprend pas ou tu vois cette apostrophe .. peut tu me préciser un peut plus stp ?

Sinon, j'ai modifié la transmission de variable $_GET en $_POST , ajouté la fonction stripslashes() et remplacé $sql= par mysql_query.
Code:
<?php 
//si la variable $_POST["iad"] existe alors ..
if (isset($_POST["iad"])){

//je teste si elle existe en l'affichant
echo $_POST["iad"];
echo "<br/>";


//Je me connecte   
mysql_connect("**","**","**");
mysql_select_db("localhost");

//je teste tout mes variables pour voir si elles s'affichent
$titre = stripslashes($_POST["taitre"]);
echo "je teste variable titre :$titre<br/>";
$description = stripslashes($_POST["daescription"]);
echo "je teste variable description :$description</br>";
$url = stripslashes($_POST["uarl"]);
echo "je teste variable url :$url<br/>";
$id = stripslashes($_POST["iad"]);
echo "je teste variable id :$id<br/>";

mysql_query("UPDATE `nom_de_ma_base`.`RSS` SET `titre` = '$titre',`description` = '$description',`url` = '$url' WHERE 

`RSS`.`id` =$id LIMIT 1 ;

");

mysql_close();
}
?>

La, sa fonctionne :D .
UsagiYojimbo: J'ai essayé la fonction mysql_real_escape_string mais visiblement je n'ai pas dut l'insérer correctement et sa ne fonctionnait plus.
 
WRInaute accro
$description = stripslashes($_POST["description"]);

un apostrophe dans le texte saisi dans le champ "description". surout qu'en plus tu fais un stripslashes (??) avant insertion
 
WRInaute passionné
UsagiYojimbo a dit:
Code:
if (isset($_POST

Ca je t'enjoins à le faire sur toutes les variables que tu récupères via ton formulaire.
C'est noté :D .
e-kiwi: Je ne suis pas une "flèche" dans le domaine alors j'essaye pour comprendre :) . Si j'ai mis la fonction stripslashes() c'est parce que j'ai crus comprendre qu'elle servait à supprimer les slash qui venait s'insérer dans un mot contenant une apostrophe .. je me suis planté ?

Sinon, peut on utiliser une variable de session dans une boucle contenant plusieurs enregistrement ?
Je m'explique:
Quand j'affiche mes variables, celle ci affiche entre autre un lien de la forme <a href="modifier-flux-rss1.php" >Modifier/supprimer</a>. Mon soucis est que lorsque que je clique sur ce lien, se sont toutes les infos contenue dans la boucle qui s'affiche au lieu des infos pour un "Id" précis.
Exemple:
Code:
.....

$query1 = mysql_query("SELECT id, titre, description, url FROM  NEWSRSS ORDER BY id DESC ");

$_SESSION['idrss'] ="";
$_SESSION['titrerss'] ="";
$_SESSION['descriptionrss'] = "";
$_SESSION['urlrss'] = "";

while($affiche1 = mysql_fetch_array($query1))
{
$id = $affiche1['id'];

$idrss.="$id";

$titre = $affiche1['titre'];

$titrerss.="$titre ";

$description = $affiche1['description'];

$descriptionrss.= "$description";

$url = $affiche1['url'];

$urlrss.="$url";

      echo '<b>Url:</b>  '.$url.' <br />';
      echo '<b>Id:</b>  '.$id.' <br />';
      echo '<b>Titre:</b>  '.$titre.'<br />';
      echo '<b>Description:</b>  '.$description.'<br />';
      echo '<b>Modif:</b><a href="modifier-flux-rss1.php" >Modifier/supprimer</a>';

}
...
Si j'ai plusieurs enregistrement dans ma boucle et que je souhaite avoir seulement l'info sur un seul, comment dois je procéder avec les sessions pour y parvenir car à l'heure actuelle c'est toutes les infos de tout les enregistrement qui s'affichent quand je clique sur mon lien.
 
WRInaute accro
tryan, en fait, lorsque tu insere une valeur en base de données, que tu fais par exemple :
insert values('$description')
si $description vaut "sal'ut" tu te retrouve avec :
insert values('sal'ut')
ce qui ne marchera pas, vu que tu as 3 apostrophes. on utilise donc addslashes pour pouvoir inserer l apostrophe en base de données. et lorsque tu recupere ta variable de la base de données, qui vaut "sal\'ut", tu applique stripslashes() pour rtrouver sal'ut et l'afficher. c'est donc le raisonnment inverse qu'il faut appliquer
 
WRInaute passionné
Ok, merci e-kiwi pour cette explication :D . Si je resume, on applique un addslashes() à la variable avant insertion en BD et un stripslashes() à la sortie. Donc ma variable $description=$_POST["description"]; devient $description=addslashes($_POST["description"]); avant insertion puis stripslashes($_POST['description']); en sortie .
Pour mon soucis 2, vous avez une piste que je pourrais suivre afin d'avancer un peut ?
Merci
 
WRInaute accro
Ca depend comment est configuré son serveur aussi. Les addslashes peuvent être automatiques sur les GET et POST. Et c'est peut-être le cas ici non ?
 
Discussions similaires
Haut