Problèmes avec ISSET

Résolu
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014 - 5 janv. 2009 à 16:36
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014 - 8 janv. 2009 à 17:18
Bonjour et meilleurs voeux à toutes et à tous pour 2009,

J'aimerai savoir si il est possible dans un même script de faire une saisie d'un formulaire et à la validation, insérer la fiche dans la BDD.
Pour comprendre mieux voila le script :

<html>
    <head>
        <title>I.R.P USL-SO</title>
    </head>

<center>SAISIE DES HEURES
</center>

<?php
    include ('connection.inc.php');
    $cnn=connection();

if (isset($_POST['$code']))
    {
    echo "

j'ai deja saisie le code " . $code .  "je peux donc faire mon INSERT dans Mysql";
    $code_abscence=$_POST["code"];
    $nbre_heures = $_POST["nbre_heures"];
    $mandat = $_POST["mandat"];
    $date = $_POST["annee"] . $_POST["mois"] . $_POST["jour"];
    $sql = "INSERT INTO heures_effectuees (code_abscence,nbre_heures,mandat,date) VALUE ('$code_abscence','$nbre_heures','$mandat','$date'";
    $rs  = mysql_query($sql,$cnn);
    }
else
    {
    echo "<form name="formulaire" method="post" action="saisie_heures.php">";
   
    echo "Code Abscence    :&nbsp;";
    $sql="SELECT * FROM code_abscence ORDER BY code";
    $rs=mysql_query($sql,$cnn);
    echo "<select name="code">";
    while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
        { $code=$ligne['code'];
        $theme_suivi=$ligne['theme_suivi'];
        echo "<option>" . $code . "&nbsp;&nbsp;&nbsp;" . $theme_suivi;
        }
    echo "</select>

";
   
    echo "Nombre d'heures    :";
    echo "<select name="nbre_heures">";
        for ($heure=0;$heure<1000;$heure++)
            {$ligne = "<option>";
            echo $ligne . $heure;}
        echo "</select>

";
   
    echo "Mandat concerné    :";
    $sql="SELECT * FROM mandat_agent ORDER BY agent_mandat";
    $rs=mysql_query($sql,$cnn);
    echo "<select name="mandat">";
    while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
        { $agent_mandat=$ligne['agent_mandat'];
        echo "<option>" . $agent_mandat ;
        }
    echo "</select>

";
   
    echo "Date du détachement :";
    echo "<select name=\jour">";
    for ($jour=01;$jour<32;$jour++)
        { echo "<option>" . $jour;}
    echo "</select>&nbsp;&nbsp;&nbsp;";
   
    echo "<select name="mois">";
    for ($mois=01;$mois<13;$mois++)
        { echo "<option>" . $mois ; }
    echo "</select>&nbsp;&nbsp;&nbsp;";
   
    echo "<select name="annee">";
        echo "<option>2008    <option>2009    <option>2010";
    echo "</select>";
    echo "

";
   
    echo "

</form>";
    }
?>

</html>

Si cela n'est pas possible alors je referai comme avant avec 2 scripts.
Merci.
Patrick

21 réponses

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
5 janv. 2009 à 17:17
Alors oui c'est possible tu n'es pas loin mais c'est très illisible...
Je te conseille :
1/Virer les echo"code html";
2/de corriger certainement une incohérence entre $code et $_POST["$code"] car il ne sera jamais "setté" quand tu fais : if (isset($_POST['$code']))

Pour le vérifier tu as juste à faire un
var_dump($_POST['$code']);

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
5 janv. 2009 à 17:26
Merci, je fais le test demain et te tiens au courant.

pour les codes HTML dans le PHP, c'était pour rester dans le PHP et dans les { du IF/ELSE, au départ je les avais mis à part.
Dans la mouture définitive je remettrais le HTML en dehors du PHP.
A demain
Patrick
PS: L' IGNORANCE est de ne pas poser la question.
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
6 janv. 2009 à 08:40
Bonjour,

1/J'ai viré le max de ECHO  que je pouvais, le reste doit rester dans le IF (enfin je pense)
2/Je n'ai pas très bien compris l'incohérence, et encore moins le VAR_DUMP($_POST['$code']), que j'ai mis en lieu et place du ISSET, et erreur, PHP ne connaisant pas la variable, je te mets le nouveau code.
Sache que j'ai pris $CODE parceque c'était la première variable, mais je peux en prendre une autre si ça doit mieux faire.

<html>
 <head>
  <title>I.R.P USL-SO</title>
 </head>


<center>SAISIE DES HEURES
</center>

<form name="formulaire" method="post" action="saisie_heures.php">

<?php
 include ('connection.inc.php');
 $cnn=connection();


if (var_dump($_POST['$code']))
 {
 $code_abscence=$_POST["code"];
 $nbre_heures = $_POST["nbre_heures"];
 $mandat = $_POST["mandat"];
 $date = $_POST["annee"] . $_POST["mois"] . $_POST["jour"];
 $sql = "INSERT INTO heures_effectuees (code_abscence,nbre_heures,mandat,date) VALUE ('$code_abscence','$nbre_heures','$mandat','$date'";
 $rs  = mysql_query($sql,$cnn);
 }
else
 {
 echo "Code Abscence :&nbsp;";
 $sql="SELECT * FROM code_abscence ORDER BY code";
 $rs=mysql_query($sql,$cnn);
 echo "<select name="code">";
 while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
  { $code=$ligne['code'];
  $theme_suivi=$ligne['theme_suivi'];
  echo "<option>" . $code . "&nbsp;&nbsp;&nbsp;" . $theme_suivi;
  }
 echo "</select>

";
 
 echo "Nombre d'heures :";
 echo "<select name="nbre_heures">";
  for ($heure=0;$heure<1000;$heure++)
   {$ligne = "<option>";
   echo $ligne . $heure;}
  echo "</select>

";
 
 echo "Mandat concerné :";
 $sql="SELECT * FROM mandat_agent ORDER BY agent_mandat";
 $rs=mysql_query($sql,$cnn);
 echo "<select name="mandat">";
 while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
  { $agent_mandat=$ligne['agent_mandat'];
  echo "<option>" . $agent_mandat ;
  }
 echo "</select>

";
 
 echo "Date du détachement :";
 echo "<select name=\jour">";
 for ($jour=01;$jour<32;$jour++)
  { echo "<option>" . $jour;}
 echo "</select>&nbsp;&nbsp;&nbsp;";
 
 echo "<select name="mois">";
 for ($mois=01;$mois<13;$mois++)
  { echo "<option>" . $mois ; }
 echo "</select>&nbsp;&nbsp;&nbsp;";
 
 echo "<select name="annee">";
  echo "<option>2008 <option>2009 <option>2010";
 echo "</select>";
 }
?>

 



</form> 

</html>

Merci pour tout.
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 janv. 2009 à 16:55
c'etait fait exprès :) c'etait pour te montrer que tu testais toujours une variable qui n'existait pas ^_^ d'ou l'incohérence :)
Reste encore pas mal d'echo mais c plus lisible déjà :)

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
6 janv. 2009 à 18:23
Ok j'ai compris :))), une incohérence est le fait de travailler sur quelque chose qui n'existe pas. leçon 1, rangée dans le cerveau.
Mais alors, quelle variable puis-je prendre ? ou faut-il que j'en crée une ?
Quant aux ECHO si j'en supprime plus je sors de ma boucle IF, mais ça fera partie d'une prochain exercice.

Je te remercie beaucoup pour ta gentillesse
Patrick
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 janv. 2009 à 21:37
un incohérence c'est un process qui suit des règles qui ne sont pas correctes. (c'est la définition rapide ^^)

Pour les echo je vais te montrer sur une portion de code...(par la même occasion j'indente ton code)
else
{
    ?>
    Code Abscence :&nbsp;
    <?php
   
    $sql="SELECT * FROM code_abscence ORDER BY code";
    $rs=mysql_query($sql,$cnn);
   
    ?>
    <select name="code">
    <?php
    while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
    {
        $code=$ligne['code'];
        $theme_suivi=$ligne['theme_suivi'];
         ?>
        <option>
        <?php
        echo $code;
        ?>
        &nbsp;&nbsp;&nbsp;
        <?php
        echo $theme_suivi;
      }
...

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 janv. 2009 à 21:37
Au passage il manque le </option>
Et c'est normal que ton tag <option> n'est aucun attribut value? tu le post jamais ?

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
7 janv. 2009 à 09:03
Oups! ! !pour le  </option>, un gros ZAP ! ! !
J'ai repris toute ma page et voila le résultat :

<html>
    <head>
        <title>I.R.P USL-SO</title>
    </head>

<center>SAISIE DES HEURES
</center>

<form name="formulaire" method="post" action="saisie_heures.php">
<?php
include ('connection.inc.php');
$cnn=connection();

if (ISSET($_POST['$code']))
    {
        $code_abscence=$_POST["code"];
        $nbre_heures = $_POST["nbre_heures"];
        $mandat = $_POST["mandat"];
        $date = $_POST["annee"] . $_POST["mois"] . $_POST["jour"];
        $sql = "INSERT INTO heures_effectuees (code_abscence,nbre_heures,mandat,date) VALUE ('$code_abscence','$nbre_heures','$mandat','$date'";
        $rs  = mysql_query($sql,$cnn);
    }
else
    {
        ?>
        Code Abscence    :&nbsp;
        <?php
        $sql="SELECT * FROM code_abscence ORDER BY code";
        $rs=mysql_query($sql,$cnn);
        ?>
        <select name="code">
        <?php
        while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
            {
                $code=$ligne['code'];
                $theme_suivi=$ligne['theme_suivi'];
                ?>
                <option>
                <?php
                echo $code;
                ?>
                &nbsp;&nbsp;&nbsp;
                <?php
                echo $theme_suivi;
            }   
        ?>
        </option></select>

   
        Nombre d'heures    :&nbsp;
        <select name="nbre_heures">
        <?php
        for ($heure=1;$heure<1000;$heure++)
            {
                $ligne = "<option>";
                echo $ligne . $heure;
            }
        ?>
        </option></select>

        Mandat concerné    :&nbsp;
        <?php
        $sql="SELECT * FROM mandat_agent ORDER BY agent_mandat";
        $rs=mysql_query($sql,$cnn);
        ?>
        <select name="mandat">
        <?php
        while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
        {
            $agent_mandat=$ligne['agent_mandat'];
            ?>
            <option>
            <?php
            echo $agent_mandat ;
        }
        ?>
        </option></select>

   
        Date du détachement :&nbsp;
        <select name="jour">
        <option>01<option>02<option>03<option>04<option>05<option>06<option>07<option>08<option>09<option>10<option>11<option>12<option>13<option>14<option>15<option>16<option>17<option>18<option>19<option>20<option>21<option>22<option>23<option>24<option>25<option>26<option>27<option>28<option>29<option>30<option>31</option>
        </select>&nbsp;&nbsp;&nbsp;
   
        <select name="mois">
        <option>01<option>02<option>03<option>04<option>05<option>06<option>07<option>08<option>09<option>10<option>11<option>12</option>
        </select>&nbsp;&nbsp;&nbsp;
   
        <select name="annee">
        <option>2008<option>2009<option>2010</option>
        </select>
        <?php
    }
?>

   



</form>   

</html>
 
Pour les jours et les mois, c'est vrai je ne me suis pas trop embêter j'essaie d'aller au plus simple et de me consacrer à la programmation pure de PHP pour l'instant.
J'espère que ton "élève" a bien compris la leçon, je ne savais pas qu'on pouvais mettre du PHP et l'enlever au milieu d'une boucle IF ou FOR.
Il reste mon problème d'ISSET, si j'ai bien tout lu FREUD . . . et compris mon tout petit cours de PHP au boulot, une fois la page affichée les variables n'existent plus, mais si on ré-affiche avec le FORM la même page, quelles variables garde-t-il ?
Merci
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
7 janv. 2009 à 10:57
YESSSSSSSSSSSSSSSSSSSSSSSS ! ! ! !

ça y est ça fonctionne,  youpiiiiiiii
il fallait tester avec ISSET la variable CODE et non $CODE, comme quoi . . . en se creusant la cervelle  . . .

Je te remercie pour ta patience et ton esprit pédagogue.
La dernière fois que j'ai fait de la programmation, c'était il y a quelques années (plusieurs dizaines . . .) c'était sous CLIPPER (compilateur dbase 3), juste après le fameux HEBDOGICIEL.
Voila le décors planté. Tu vois un peu mieux à qui tu as à faire. Mais je suis tétu, j'apprends assez vite (enfin je crois).

J'aurais certainement d'autres problèmes, que je mettrais dans le forum, et j'espère que tu auras un peu de temps pour moi.
Passe une bonne journée, et à très bientôt.
Patrick
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
7 janv. 2009 à 11:10
ça manque encore :p

while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
        {
            $agent_mandat=$ligne['agent_mandat'];
            ?>
            <option>
            <?php
            echo $agent_mandat ;
        }
        ?>
        </option></select>

Ton </option> doit être logiquement dans ta boucle for après : echo $agent_mandat ;
Ton </select> par contre est en dehors et je suis d'accord.

devient
(ça fait plus joli ^_^)

Pour bien faire, il faudrait aussi ajouter une structure conditionnelle du genre ...
if(mysql_num_rows(..)>0{
  //ton code
}

La doc => http://www.php.net/manual/en/function.mysql-num-rows.php

Ceci afin d'eviter d'afficher le select si ta requete ne retourne aucun résultat .

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
7 janv. 2009 à 11:45
C'est bon je viens de régler le problème des </option> que j'avais oublié et je les ai mis eu bon endroit.

La requete  sur le select en question est obligatoirement renseignée car la table sera fournit avec le site, mais je garde l'info car je pense que j'en aurai besoin très bientôt pour la suite.
voila le script remanié, et je te le mets en entier avec le SESSION_START():

<?php
session_start();
if (isset($_SESSION['connect']))
    {
        $connect=$_SESSION['connect'];
        $login  =$_SESSION['login'];
    }
else
    {
        $connect=0;
    }
if ($connect == "0")
    {
        ?>
        <center> VOUS N'ESTES PAS IDENTIFIE
</center>
       

        <?php
        exit;
    }
?>
<html>
    <head>
        <title>I.R.P USL-SO</title>
    </head>

<center>SAISIE DES HEURES
</center>

<form name="formulaire" method="post" action="saisie_heures.php">
<?php
include ('connection.inc.php');
$cnn=connection();

if (ISSET($_POST['code']))
    {
        $code_abscence    = $_POST["code"];
        $nbre_heures     = $_POST["nbre_heures"];
        $mandat         = $_POST["mandat"];
        $date             = $_POST["annee"] . $_POST["mois"] . $_POST["jour"];
        $sql             = "INSERT INTO heures_effectuees (code_abscence,nbre_heures,mandat,date) VALUES ('$code_abscence','$nbre_heures','$mandat','$date')";
        $rs              = mysql_query($sql,$cnn);
        echo "Fiche saisie";
    }
else
    {
        ?>
        Code Abscence    :&nbsp;
        <?php
        $sql="SELECT * FROM code_abscence ORDER BY code";
        $rs=mysql_query($sql,$cnn);
        ?>
        <select name="code">
        <?php
        while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
            {
                $code=$ligne['code'];
                $theme_suivi=$ligne['theme_suivi'];
                ?>
                <option>
                <?php
                echo $code;
                ?>
                &nbsp;&nbsp;&nbsp;
                <?php
                echo $theme_suivi;
                ?>
                </option>
                <?php
            }   
        ?>
        </select>
       

   
        Nombre d'heures    :&nbsp;
        <select name="nbre_heures">
        <?php
        for ($heure=1;$heure<1000;$heure++)
            {
                $ligne  = "<option>";
                $ligne2 = "</option>";
                echo $ligne . $heure . $ligne2;
            }
        ?>
        </option></select>

        Mandat concerné    :&nbsp;
        <?php
        $sql="SELECT * FROM mandat_agent ORDER BY agent_mandat";
        $rs=mysql_query($sql,$cnn);
        ?>
        <select name="mandat">
        <?php
        while ($ligne=mysql_fetch_array($rs,MYSQL_ASSOC))
        {
            $agent_mandat=$ligne['agent_mandat'];
            ?>
            <option>
            <?php
            echo $agent_mandat ;
            ?>
            </option>
            <?php
        }
        ?>
        </option></select>

   
        Date du détachement :&nbsp;
        <select name="jour">
        <option>01</option><option>02</option><option>03</option><option>04</option><option>05</option><option>06</option><option>07</option><option>08</option><option>09</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>
        </select>&nbsp;&nbsp;&nbsp;
   
        <select name="mois">
        <option>01</option><option>02</option><option>03</option><option>04</option><option>05</option><option>06</option><option>07</option><option>08</option><option>09</option><option>10</option><option>11</option><option>12</option>
        </select>&nbsp;&nbsp;&nbsp;
   
        <select name="annee">
        <option>2008</option><option>2009</option><option>2010</option>
        </select>
        <?php
    }
?>

   



</form>   

</html>

Merci encore.
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
7 janv. 2009 à 14:09
else
    {
        $connect=0;
    }
if ($connect == "0")

Ne pas confondre type entier et String !
0!=="0" (enfin oui et non)

Un truc genreu...
$bConnected=false;
if(){
    $bConnected=true;
}
if(!$bConnected){

}

Comme ça :
1/la variable que tu test est déclaré dans les 2 cas (une variable non déclarée est a null il me semble donc source d 'erreurs)
2/C'est plus propre je trouve :)

Après quand on est pas connecté on est souvent redirigé => http://www.php.net/manual/en/function.header.php

Enfin mieux vaut verifier si il y a des réponses a une requete car tu as plusieurs cas :
1/la base ne répond pas, la table n'existe pas, ça doit être géré en amont
2/la table est crée mais vide et là tu peux avoir des problèmes d'intégrité de données... donc attention quand même ^_^ (Une erreur arrive si vite)

<option>01</option><option>02</option><option>03</option><option>04</option><option>05</option><option>06</option><option>07</option><option>08</option><option>09</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>

Oula ! fais un for c'est plus rapide ^_^ avec un poils de js tu peux même redéfinir ton select pour faire apparaitre du métier côté client genre... février => 28 ou 29 jours (me semble je sais même plus >_<) ou janvier = 31 jours (ou 30 comme la calendrier d'Aubade encore une blonde qui l'a fait ;) )

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
7 janv. 2009 à 16:19
Ok, je vois, pour le "o" et le 0 j'ai rectifié.
Par contre je planche sur l'identification de session, entre le FALSE et le TRUE, ça queute un peu, je plache dessus et je te recontacte.
Par contre pour les jours et les mois, c'était pour m'affranchir du '0' dans les chiffres, je vais essayer pour faire une boucle, mais j'ai tellement de choses à voir avec le PHP, que le JS j'attends un peu avant de m'y mettre.

Merci, à demain
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
7 janv. 2009 à 16:31
t'affranchir du 0 dans ton for...
for($iBoucle=1;$iBoucle<=31;$iBoucle++){
    //
}

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
7 janv. 2009 à 17:32
et oui, si je fais cela mon champs sera 0 1 2 3 4 . . . au lieu de  01 02 03 04 . . ., ce qui risque de me créer des problèmes après.

Mais comme je te dis, ce n'est pas trop grave dans l'immédiat, je sais que ce n'est correct, et que tu as raison sur le fond et la forme, mais avec ce que tu m'as appris, j'ai déjà une dizaine de script à retoucher pour les rendre plus conformes à ce qui doit être.
après si on me laisse le temps je prendrais un petit calendrier pour le choix de la date.
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
7 janv. 2009 à 18:04
for($iBoucle=1;$iBoucle<=31;$iBoucle++){
    if($iBoucle<10){
      ?>
      0
      <?php
   }
}
ça devrait fonctionner ça ...

Content d'avoir pu t'aider déjà alors ^_^
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
8 janv. 2009 à 08:45
Bonjour,
Désolé d'abuser de ta patience, mais dans ma procédure de session_start(), j'ai essayé ce que tu m'as dit avec la variable à TRUE ou à FALSE et ça ne fonctionne plus.
Si tu n'as pas le temps, ou si ça t'embête, ne te tracasse pas je comprendrai.

Premier script SESSION.PHP qui demande la saisie du login:
<?php
session_start();// À placer obligatoirement avant tout code html
include ('connection.inc.php');
$cnn = connection();
$_SESSION['connect'] = false; //initialise la variable 'connect'
$connect = $_SESSION['connect'];
 if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
    {
        $mot_de_passe    = $_POST['mot_de_passe'];
        $login            = $_POST['login'];//On récupère les données envoyées par la méthode POST du formulaire d'identification
        $sql              = "SELECT * FROM tbl_user WHERE user_log='$login' AND user_pass='$mot_de_passe'"; //on teste l'existance dans la bdd
        $bln              = mysql_query($sql,$cnn);
        if ($bln)  // Si le mot de passe et le login sont bons
            {
                // Change la valeur de la variable connect. C'est elle qui nous permettra de savoir s'il y eu identification.
                $_SESSION['login']=$login;
                while  ($reponse = mysql_fetch_array($bln))
                    {
                        $user    = $reponse['nom_user'];
                        $_SESSION['user']=$user; // Permet de récupérer le login afin de personnaliser la navigation
                    }
                if ($user <> "") // si l'utilisateur existe on lance index.php
                    {   
                        $_SESSION['connect'] = true;
                        header ('Location:index.php');
                    }
                else
                    {
                        $_SESSION['connect'] = false;
                        exit();
                    } // sinon on met la variable de session à 0 pour ne pas lancer d'autres pages et on sort
            }
        else
            {   
                $_SESSION['connect'] = false;
                exit() ;
            }
    }
 else // Les variables n'existent pas encore
    {      
        $mot_de_passe="";
        $login="";// On crée des variables $mot_de_passe  et $login vides
        //l'option onload sans le BODY permet de positionner le curseur sur la bonne zone à saisir, le f est le nom du FORM et login le nom de l'INPUT
        ?>
        <html>
        <head>
        <title>Identification</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link rel="stylesheet" media="screen" type="text/css" title="TNM" href="design_accueil.css" />
                <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" height="48" width="48"/>
        </head>
       
       

        Veuillez vous identifier pour accéder au site :

        <form name="f" action="session.php" method="post">
        Votre login :
        Votre mot de passe :

        </form>

      
       
        </html>
        <?php
    }
?>

Et après le petit module que je mets au début de tous mes scripts :
<?php
session_start();
$connect=$_SESSION['connect'];
echo $connect;
if ($connect == true)
    {
        $connect=$_SESSION['connect'];//On récupère la valeur de la variable de session
        $login  =$_SESSION['login'];
    }
else
    {
        $connect = false ;//Si $_SESSION['connect'] n'existe pas, on donne la valeur "0"
    }
      
if ($connect == false) // Si le visiteur s'est mal identifié
    {
        ?>
        <center> VOUS N ETES PAS IDENTIFIE
</center>
       


        <?php
        exit;
    }
?>

Merci
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
8 janv. 2009 à 11:23
C'est le bazar tu t'enmeles les pédales ^^
Dejà tu as 2 session_start() enlève soit l'un soit l'autre (garde celui dans connection.inc.php que tu inclueras a chaque début de page)
Ensuite dans ce fameux fichier connecion.inc.php, pour tester une session ils faut utiliser session_is_regitered => Doc : http://www.php.net/session_is_registered

if(session_is_registered($_SESSION['connected'])){
   //ton utilisateur est identifié
   $login  =$_SESSION['login'];
}
else{
   //ton utilisateur n'est pas identifié
   ?>
        <center> VOUS N ETES PAS IDENTIFIE
</center>
       


        <?php
        exit();
}

Ensuite tes autres fichiers commenceront par...

<?php
//on a viré le session_start();// À placer obligatoirement avant tout code html
include ('connection.inc.php');
...
Traitement script en cours...

Dans le cas précis de l'identification de l'utilisateur, il ne faut pas commencer ainsi car on ne veut pas tuer l'execution du script !!!
Dans ton script, ton formulaire se soumet à lui même donc !
ton début sera un truc du genre ...
<?php
session_start();
if(session_is_registered($_SESSION['connected'])){
   //redirect vers page de membre ou d'accueil de personne connecté
   //OU
   //destruction de la session (un membre qui retourne sur la page d'identification perd sa session! => session_destroy() => http://www.php.net/manual/en/function.session-destroy.php
}
else{
  //afichage du formulaire
}

Evidément idéalement, on tue la session de la personne qui va sur la page d'identification puis on lui propose de se réidentifier.

Voili voilà :)
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
8 janv. 2009 à 16:40
Bon, je crois je je tiens le bon bout,

j'ai mis le session_start() dans l'include et là tout fontionne.
Je te le mets ci-dessous pour confirmation, je n'ai pas utiliser tout ce que tu m'as donné mais un peu quand même.
J'attends avec impatience ton verdict :

L'ouverture de session :
<?php
include ('connection.inc.php');
if (isset($_POST['mot_de_passe']) AND isset($_POST['login']))
    {
        $mot_de_passe    = $_POST['mot_de_passe'];
        $login            = $_POST['login'];
        $cnn               = connection();
        $sql              = "SELECT * FROM tbl_user WHERE user_log='$login' AND user_pass='$mot_de_passe'";
        $bln              = mysql_query($sql,$cnn);
        if ($bln)  // Si le mot de passe et le login sont bons
            {
                $_SESSION['login']  = $login;
                while  ($reponse = mysql_fetch_array($bln))
                    {
                        $user    = $reponse['nom_user'];
                        $_SESSION['user']=$user;
                        $_SESSION['connect'] = true;
                    }
                    if (isset($user))
                        {
                            header ('Location:index.php');
                        }
                    else
                        {
                            session_destroy();
                            echo "ERREUR D IDENTIFICATION";
                            exit() ;
                        }
            }
        else
            {   
                session_destroy();
                echo "ERREUR D IDENTIFICATION";
                exit() ;
            }
    }
 else // Les variables n'existent pas encore
    {      
        $mot_de_passe="";
        $login="";
        //l'option onload sans le BODY permet de positionner le curseur sur la bonne zone à saisir, le f est le nom du FORM et login le nom de l'INPUT
        ?>
        <html>
        <head>
        <title>Identification</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link rel="stylesheet" media="screen" type="text/css" title="TNM" href="design_accueil.css" />
        <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" height="48" width="48"/>
        </head>
       
       

        Veuillez vous identifier pour accéder au site :

        <form name="f" action="session.php" method="post">
        Votre login :
        Votre mot de passe :
       

       

        </form>

      
       
        </html>
        <?php
    }
?>

et le petit code avant chaque script :
<?php
include ('connection.inc.php');
if (isset($_SESSION['connect']))
    {
        $login  = $_SESSION['login'];
    }
else
    {
        ?>
        <center> VOUS N ETES PAS IDENTIFIE
</center>
        


        <?php
        session_destroy();
        exit;
    }
?>

je croise les doigts . . .
3
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
8 janv. 2009 à 17:00
tu include 2 fois include ('connection.inc.php'); ^^
Petite question...
Je suis utilisateur, je me log je met dans la barre d'adresse l'adresse du formulaire quand je me log il affiche le formulaire de connection ok... sauf que je suis tjrs identifié la session est tjrs vivante enfin c'est un détail à part ça ça devrait fonctionner (il manque le session_start(); aussi sur ce que tu envoies (a vu de nez ^^)

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
3
Rejoignez-nous