8795 sujets

Développement web côté serveur, CMS

Bonjour,

me revoilà pour un autre problème
Sur ma page index, j'ai un formulaire de connexion lors de la validation de celui-ci, je traite le formulaire via une autre page qui contiens le traitement et un autre formulaire.
(je voulais verrouiller le 2eme formulaire par un mot de passe)
Mon 2eme formulaire et traité par une 3eme page et c'est là que le problème se trouve,
je veux récupérer les info du 2eme formulaire pour enregistrer dans ma bdd, mais les info contiennent également des données de l'utilisateur qui s'est logué, c'est pour ça que je voulais faire un session start(); ainsi que l'ouverture du $_SESSION['login']

voici le code
pade 1:
<div id="conteneur" class="conteneur">
                <?php if(isset($_GET['err']))
                {
                    if($_GET['err'] == 1)
                    {?>
                        <p class="indication">L'identifiant et/ou le mot de passe ne sont pas valides</p>
                    <?php   
                    }
                }?>
           		<form action="form.php" method="post" name="connexion">
                    <p>
                        <label for="login" class="libele">Identifiant<span class="required">*</span></label><br>
                        <input class="champ" type="text" name="login" id="login" size="30" required="required" placeholder="Votre login" ><br>
                    </p>
                    <p>
                        <label for="password" class="libele">Mot de passe<span class="required">*</span></label><br>
                        <input class="champ" type="password" name="password" id="password" size="30" required="required" placeholder="Votre mot de passe" ><br>
                    </p>
                    <p class="indication">Tous les champs avec une <span class="required">*</span> sont obligatoires</p>
                    
                    <p>
                        <input type="submit" class="bouton1" name="submit" value="Se connecter" ><br>
                    </p>
                </form> 
            </div>


page2:
<?php
            if($_POST['login'] != '' and $_POST['password'] != '')
            {
                
                //je verifie que j'ai la paire login+mdp
                $log  = mysql_real_escape_string(htmlspecialchars($_POST['login']));
                $sql =$cnx->query('SELECT IDUtilisateur, IDClient, Login, Password FROM utilisateurs WHERE Login ="'. addslashes($log) .'"') or die(mysql_error());
                $row = $sql->fetch(PDO::FETCH_ASSOC);
                if (($row['Login'] == $_POST['login']) AND ($row['Password'] == $_POST['password']))
                {   
                    //je démare une session
                    session_start();
                    $_SESSION['login'] = $_POST['login'];
                    $_SESSION['id'] = $row['IDUtilisateur'];
                    //j'affiche le formulaire
                    ?>

                    <div class="conteneur">
                        <form action="process.php" method="post" name="form_ticket">
                                
                                <p>
                                    <label for="nom" class="libele">Nom<span class="required">*</span></label><br>
                                    <input type="text" name="nom" id="nom" size="30" required="required"/><br>
                                </p>
                                <p>
                                    <label for="sites" class="libele">Site<span class="required">*</span></label><br>
                                    <select name="sites" id="sites" onChange="Systeme(this.value);" required="required" size="1">
                                        <option value='-1' selected>Sélectionner un site...</option>
                                        <?php
                                        $sql = $cnx->query('SELECT * FROM sites WHERE IDClient="'. addslashes($row['IDClient']).'"') or die(mysql_error());
                                        while($row = $sql->fetch())
                                        { ?>
                                            <option value="<?php echo $row['IDSite']; ?>"><?php echo $row['NomSite']; ?></option>
                                        <?php } ?>
                                    </select><br>
                                </p>
                                <div id="systeme">
                                    <?php
                                    if(isset($_POST['site']))
                                    {
                                        $include = 1;
                                        include('traitement.php');
                                    }
                                    ?>
                                </div><br>
                                <p>
                                    <label for="date" class="libele">Date du problème<span class="required">*</span></label><br>
                                    <input type="text" name="dateprob" value="" onclick="var toto = new calendar(this);" required="required"><br />
                                </p>
                                <p>
                                    <label for="message">Problème rencontré<span class="required">*</span></label><br />
                                    <textarea id="message" name="message" rows="10" cols="50" required="required"></textarea><br />
                                </p>
                                <p class="indication">Tous les champs avec une <span class="required">*</span> sont obligatoires</p>
                                <p>
                                    <input class="bouton" type="submit" name="valider" value="Valider"/>
                                    <input class="bouton2" type="reset" name="effacer" value="Effacer"/>
                                </p>
                            
                        </form>
                    </div>
                    <?php
                }else {
                    header('location:index.php?err=1');
                }
            }else {
                echo "<p class=\"indication\">Tous les champs ne sont pas renseigné ! <a href=\"index.php\">Retour</a></p>";
            }
            ?>


page3

<?php
session_start();
$_SESSION['login'];
require 'config/config.php';
if(!isset($_POST['valider']))
{
	//Je verifie que les champs sont complétés
	if($_POST['nom'] != '' and $_POST['sites'] != '' and $_POST['systeme'] != '' and $_POST['dateprob'] != '' and $_POST['message'] != '')
	{
		$iduser   = $_SESSION['id'];
		$idsite   = $_POST['sites'];
		$systeme  = $_POST['systeme'];
		$dateprob = $_POST['dateprob'];
		$message  = $_POST['message'];

		//insert dans la base de donnée. Table 'tickets'
		$sql ='INSERT INTO tickets (IDTicket, IDUtilisateur, IDSystem, ProblemeIDTF, DateProbleme, IDSite) 
		VALUE("", "'.mysql_real_escape_string($iduser).'", "'.mysql_real_escape_string($systeme).'", "'.mysql_escape_string($message).'", "'.mysql_escape_string($dateprob).'", "'.mysql_escape_string($idsite).'")';
		$res = mysql_query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
		mysql_close();
		?><p class="info">Votre demande à été envoyé avec succés, <a href="form.php">Retour !</a></p><?php
	} 
}else {
	echo 'Une erreure est survenue lors du traitement du formulaire, veuillez recommencer';
	header ('Location: form.php');
}
?>


Lors du traitement j'ai une erreur

Notice: Undefined index: login in

donc avec ma 3eme page, il ne reconnait plus le $_POST['login'] lorsque je test les paires login+mdp
Bonjour,

Il faut que tu vérifie la variable $_SESSION pour savoir si tu est bien connecté.
Fait le dans une page vierge avec ça comme code :
<?php
session_start();
var_dump($_SESSION);

Tu devrait voir un tableau avec ton id et ton login.
Salut,

bon le code est peu clair mais je dirais que ton soucis vient de ta page 3:

$_SESSION['login'];


Tu as oublié le echo, la remarque de benj est pertinente par ailleurs. Aussi, attention à ne pas envoyer de contenu avant de faire le session_start, dans ton code tu ne le fais pas mais je ne sais pas s'il est exhaustif.
Bonjour,
pour répondre a benj, j'ai mis le code que tu m'as dit pour vérifier que le $_SESSION est bien connecté.
j’obtiens ce code:
array (size=2)
  'login' => string 'usertest' (length=8)
  'id' => string '1' (length=1)

donc pour moi il n'y a pas de problème !

Pour répondre à floreo, je mets toujours en première ligne le session_start();, donc aucun problème à ce niveau, cependant, je ne vois pas pour le echo sur le $_SESSION['login']; je l'ai ajouté pour voir mais toujours la même erreur.
Alors j'aimerais juste avoir l'avis d'un connaisseur, mon code est fait en 3 pages, est ce que la méthode que j'ai utilisé pour protéger la page2 par un mot de passe et le traitement de ma page 2 via la page 3 est une bonne éxécution ? n'y a t-il pas plus simple? j'aimerais aussi avoir techniquement des conseils.
Bon je viens de résoudre le problème du $_SESSION['login'] en fait sur la ligne
if(!isset($_POST['valider']))

j'ai retiré le "!" de isset.

Mais j'obtiens une erreur suite à ma requête : Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

visiblement j'ai une erreur sql, ma question est, si je fait un insert dans une table est ce que je dois mettre toute les colonnes dans ma requête, là par exemple j'ai pas besoin d’insérer toutes les colonne de ma table.
Modifié par cid5420 (23 Jan 2014 - 09:20)
Bon désolé de tous ces poste, je vous mets l'avancement du projet, sans attendre bêtement un réponse de votre part !
j'ai résolu mon erreur sql (prob de débutant lol)
cependant j'affiche un message en disant que la requête est bien prise en compte puis je mets un lien retour vers mon formulaire, le problème c'est que je pense qu'il y a un problème sur la session, en effet, je n'ai pas mis le session_start(); en haut de ma 2eme page car je l'ai déjà mis dans la l'ouverture de session si ma paire login + mdp était valid. Et lorsque je met quand même le session_start() en haut, il me dit:
 A session had already been started - ignoring session_start()
le session_start doit être en tout début de code, devant tout autre code, juste derrière l'ouverture de php ^^

Et un seul session_start par page ^^ Smiley lol (t'aurais pas oublié d'ôter le second après l'avoir mis en haut de la page ?)
Oui mais le second c'est pour le créer c'est pour ça que je ne comprend pas, de plus si je l'enlève, j'ai mon erreur disant:
Notice: Undefined index: login line 34

ce qui correspond à page 2 ligne:
 if($_POST['login'] != '' and $_POST['password'] != '')


alors j'ai une autre question, lors du traitement, est ce que je suis obligé de verifier si mes champs sont bien rempli du moment ou sur mes input j'ai
required="required"

Modifié par cid5420 (23 Jan 2014 - 10:45)
cid5420 a écrit :
Oui mais le second c'est pour le créer c'est pour ça que je ne comprend pas, de plus si je l'enlève, j'ai mon erreur disant:
Notice: Undefined index: login line 34

ce qui correspond à page 2 ligne:
 if($_POST['login'] != '' and $_POST['password'] != '')

Un seul session_start() par page. La variable globale $_SESSION est créé automatiquement.
La variable globale $_POST n'a rien à voir avec les sessions.
en fait je pense savoir d'où viens le problème, la deuxième page traite le formulaire page 1, si il est validé j'affiche le formulaire 2, la troisième page traite le formulaire 2, et si je renvoi sur la page 2, le script comme il est là, va traiter le formulaire 1, c'est pour ça qu'il y a confusion avec le $_POST, je pense qu'il faut repenser le code, de la page 2, j'ai contourné le problème provisoirement en proposant de se deloguer et de se reloguer pour pouvoir retourner sur le formulaire 2 (ce qui n'est pas terrible)
Bonjour,
toujours pas trouvé la solution, le fait de contourner le problème est très gênant pour l'utilisateur.