begin process at 2012 05 30 21:16:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

formulaire qui ne marche pas !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

formulaire qui ne marche pas !

dimanche 29 juin 2008 à 19:52:43 | formulaire qui ne marche pas !

nicomilville

Membre Club

Salut,

j'ai un formulaire avec des champs de type hidden auxquels j'essai d'assigné le résultat d'une requête SQL seuleument ça ne marche pas, pouvez vous me dire ce qui ne va pas ?

mon code :

<?php
session_start();

if(isset($_POST['pseudo']) && isset($_POST['pass'])) {
    mysql_connect('host','pseudo','pass');
    mysql_select_db('base');
 
 $req = "SELECT * FROM utilisateurs WHERE pseudo='".$_POST['pseudo']."' AND pass='".$_POST['pass']."'";
 $retour = mysql_query($req);

 if(mysql_num_rows($retour)<1) {
  echo 'Ce compte n\'existe pas, merci de <a href="inscription.php">vous inscrire</a>';
 } else {
  $_SESSION['pseudo'] = $_POST['pseudo'];
  $_SESSION['age'] = $_POST['age'];
  $_SESSION['cp'] = $_POST['cp'];
  
  mysql_query("INSERT INTO connecte VALUES('','".time()."','".$_POST['pseudo']."','".$_SESSION['age']."','".$_SESSION['cp']."','".$_SERVER['REMOTE_ADDR']."')");
  
  header("Location: tableau.php");
 }
}
?>
<body>
<div align="center">
 <form action="connection.php" method="post">
  <table width="414" height="221" border="0" cellspacing="0">
    <tr>
      <td><div align="center">
        <table width="388" height="141" border="0" cellspacing="0">
          <tr>
            <td><div align="center">Pseudo : </div></td>
            <td><div align="center">
              <label>
              <input type="text" name="pseudo" />
              </label>
            </div></td>
          </tr>
    <tr>
            <td><div align="center">Mot de passe : </div></td>
            <td><div align="center">
              <label>
              <input type="password" name="pass" />
              </label>
            </div></td>
          </tr>
    <?php
    mysql_connect('host','pseudo','pass');
    mysql_select_db('base');

    $query = "SELECT age, cp FROM utilisateurs WHERE pseudo='".$_SESSION['pseudo']."'";
    $result = mysql_query($query);

    while($row = mysql_fetch_array($result)) {
    ?>
          <tr>
              <input type="hidden" name="age" value="<?php echo $row['age']; ?>" />
          </tr>
    <tr>
              <input type="hidden" name="cp" value="<?php echo $row['cp']; ?>" />
          </tr>
    <?php
    }
    ?>
          <tr>
            <td>&nbsp;</td>
            <td><div align="center">
              <label>
              <input type="submit" name="Submit" value="connexion" />
              </label>
            </div></td>
          </tr>
    <tr>
            <td>&nbsp;</td>
            <td><div align="center">
              <label>
              <a href="inscription.php">Inscrivez-Vous</a>
              </label>
            </div></td>
          </tr>
        </table>
    </form>
      </div></td>
    </tr>
  </table>
</div>
</body>

Aidez moi svp !

a++

Si la réponse vous convient, pensez : Réponse acceptée !

dimanche 29 juin 2008 à 22:51:38 | Re : formulaire qui ne marche pas !

JoJo738

Membre Club
Hello

Qu'est ce qui ne va pas ?

Par contre je viens de voir un truc avec tes hiddens ... Comment veut tu faire une requete SQL si _SESSION['pseudo'] n'existe pas ??? Et fait des vérifications (htmlentities(), mysql_string_escape(), isset(), ....) !

Ho ! Et deux connexions à MySQL ??? Quel intéret ? Surtout si il n'y a pas de déconnexions ...

Ah, et utilise mysql_query(...) or die(mysql_error());

^^

Si ma reponse te convient, merci de l'accepter ! 
dimanche 29 juin 2008 à 23:02:08 | Re : formulaire qui ne marche pas !

nicomilville

Membre Club
c'est pas ça, en fait, si je me connecte et que je fais précèdant et que je me reconnecte, ça va mais sinon ça va pas !

oui, mais comment faire la requête sans la session avec le pseudo ?

a++

Si la réponse vous convient, pensez : Réponse acceptée !

lundi 30 juin 2008 à 04:39:25 | Re : formulaire qui ne marche pas !

Farfadh

Je n'ai pas regardé en détail mais je vois des failles majeures dans ton code.

Déjà, $_SESSION est stocké dans les cookies donc l'écriture dans cette variable risque d'échouer la plupart du temps si tu n'active pas le buffer de sortie avec ob_start() au début. Deuxièmement, comme le contenu de $_SESSION est dicté par les cookies de l'utilisateur, tu ne peux absolument pas lui faire confiance pour lui confier des informations de connection, sinon, il suffit d'attendre que quelqu'un est connecté, entrer son pseudo dans les cookies et hop ! Tu as accès à son compte et tu n'as plus qu'à changer son mot de passe pour lui voler son compte. Et si tu veux y mettre une valeur moins évidente, voire même chiffrée, il est toujours possible de voler les cookies à ta victime pour ensuite lui dérober son compte.

Ensuite, pour tes requêtes MySQL, tu oublies de protéger les valeurs de tes chaînes avec mysql_real_escape_string() alors qu'il s'agit de données possiblement sensibles. Ensuite tu utilises mysql_num_rows() et un while sur mysql_fetch_array() sur des résultats qui contiennent au mieux un enregistrement, ce qui est très maladroit. Tu entres dans ta table de connections des informations sur l'utilisateur qui n'ont rien à faire là, et qui constituent une redondance de données particulièrement inutile, d'autant plus que tu voulais déjà sauvegarder ces données dans la session.

On va arrêter cette liste accablante avec le fait que tu ne nous donnes pas le moyen avec lequel tu rétablis une connection active. Je suis en train de préparer un code dont tu pourras te servir sans problème. A tout de suite.

lundi 30 juin 2008 à 10:17:36 | Re : formulaire qui ne marche pas !

nicomilville

Membre Club
Salut...

merci, a tout de suite !

a++

Si la réponse vous convient, pensez : Réponse acceptée !

lundi 30 juin 2008 à 14:33:42 | Re : formulaire qui ne marche pas !

neigedhiver

Salut,

@Farfadh : "Déjà, $_SESSION est stocké dans les cookies"

Au lieu de dire n'importe quoi, il serait bien de lire la doc de PHP : http://fr3.php.net/manual/fr/book.session.php
Les sessions sont gérées côté serveur, SÛREMENT PAS côté client (ça fait même l'objet d'une question dans un test sur le site de Zend)
Lorsqu'on ouvre une session, seul l'identifiant de la session (retourné par session_id() ) est stocké sur le client. RIEN D'AUTRE.
Il peut être :
- stocké dans un cookie si la configuration le permet, et si le client l'accepte
- passé dans l'url si la configuration le permet (cf la directive de configuration session.use_trans_sid)

Par défaut le gestionnaire de session est 'files' : les sessions sont stockées dans des fichiers, écrits dans un répertoire spécifique (déterminé par la directive de configuration session.save_path). Le gestionnaire peut aussi être personnalisé, voire entièrement réécrit (on trouve même des sources sur phpCS pour utiliser une base de données).

Par conséquent, le tampon de sortie n'a absolument rien à voir dans l'histoire. La seule condition est qu'aucun entête ne soit envoyé au client avant l'ouverture de la session (qui tente de placer un cookie, ce qui est une requête HTTP)

"Deuxièmement, comme le contenu de $_SESSION est dicté par les cookies de l'utilisateur, tu ne peux absolument pas lui faire confiance pour lui confier des informations de connection,"

La question n'est pas là. Les sessions ne sont pas sécurisées : c'est là qu'est le problème. Placer un cookie est a priori relativement sûr (hormis le fait que sans utilisation de SSL, il circule en clair sur internet). Le vol de sessions est chose rare : récupérer un cookie d'un internaute n'est pas si aisé que cela (il faut sniffer le réseau, intercepter les paquets, identifier la personne, le site visité, spoofer l'ip du client...). Le principal risque est de laisser un cookie sur un ordinateur partagé.
Pour ce qui est du reste de la protection, il suffit de s'imposer quelques règles dans la gestion d'un compte (saisir le mot de passe actuel pour pouvoir le changer, etc).

Quoi qu'il en soit, les variables de sessions sont stockées sur le serveur et ne transitent pas sur le réseau. Point barre. Donc si un pseudo est stocké dans les variables de session, il ne sera pas stocké dans un cookie. Il sera stocké dans le fichier correspondant à la session de l'utilisateur (le tableau $_SESSION est d'ailleurs linéarisé avec serialize() avant d'être stocké, et délinéarisé avec unserialize() lorsque la session est restaurée).

Voilà pour la mise au point qui me paraissait vraiment nécessaire.

Bonne journée.


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
lundi 30 juin 2008 à 15:50:41 | Re : formulaire qui ne marche pas !

nicomilville

Membre Club
Salut neige,

Merci de cette explication car je dois t'avouer que je ne savais plus quoi penser !

a++

PS : as tu une solution pour mon pb ?

Si la réponse vous convient, pensez : Réponse acceptée !

lundi 30 juin 2008 à 18:47:39 | Re : formulaire qui ne marche pas !

JoJo738

Membre Club
Lu' ^^

Et avec un code de ce genre ?

<?php

session_start();
// include 'mysql_connexion.php';

if( isset($_POST['pseudo'], $_POST['password']) )
{
  $pseudo = mysql_real_escape_string($_POST['pseudo']);
  $password = mysql_real_escape_string($_POST['password']);

 
  $query = mysql_query('SELECT id FROM utilisateurs WHERE pseudo = "' . $pseudo . '" AND password = "' . $password . '" ') or die(mysql_error());

  if( mysql_num_rows($query) <> 1 )
  {
    echo 'Ce compte n\'existe pas, merci de <a href="inscription.php">vous inscrire</a>';
  }
  else
  {
    $row = mysql_fetch_assoc($query);
    $_SESSION['id'] = $row -> id;
    // Perso, je stocke l'ID du membre (au pire des cas avec transmission d'une clé généré lors de la connection et avec un petit UPDATE (en dessous) je le mémorise

    // mysql_query('UPDATE utilisateurs SET time_connexion = NOW(), ip = "' . $_SERVER['REMOTE_ADDR'] . '" WHERE id = ' . $row -> id) or die(mysql_error());

    // * Mettre ' . $time() . ' à la place de NOW() en fonction du type de champ (varchar, int, date, ...)
    // * Je conseil d'utiliser une fonction pour trouver l'IP .... Faut pas oublier les proxys ;)
  }
}

?>
<form action="?" method="POST">
 <p>
  <label for="pseudo">Pseudo :</label>
  <input type="text" name="pseudo" id="pseudo" />
 </p>

 <p>
  <label for="password">Mot de passe :</label>
  <input type="text" name="password" id="password" />
 </p>
 
 <p>
  <input type="submit" value="Connection !" />
 </p>
</form>


Si ma reponse te convient, merci de l'accepter ! 
lundi 30 juin 2008 à 19:18:06 | Re : formulaire qui ne marche pas !

nicomilville

Membre Club
le pb c'est pas ça, c'est que les session age et cp n'existent pas encore quand je fais ma requête !

a++

Si la réponse vous convient, pensez : Réponse acceptée !

lundi 30 juin 2008 à 23:58:24 | Re : formulaire qui ne marche pas !

JoJo738

Membre Club
Hum ...

Qu'est ce que "CP" ?
Et quel intéret de récupérer age et cp ? (surtout si tu les as dans ta base) ...
C'est un systeme de vérification ???


Si ma reponse te convient, merci de l'accepter ! 

1 2

Cette discussion est classée dans : mysql, session, post, pseudo, pass


Répondre à ce message

Sujets en rapport avec ce message

session_start ou autre chose... ? [ par elisaba ] bonjour, j'ai une page a accès login + pass avec accès formulaire + test + la page en php. j'ai bien mon dossier sessions, à priori ca defrait foncti pbroblème de session [ par Miss1 ] Salut,je veux crée une session pour que l'utilisateur puisse accédé a son compte panier.Le probleme qui intervien' c'est que quand je rentre  acun log session [ par nicomilville ] Bonjour tout le monde, mon problème est le suivant :j'ai une page connection.php qui permet de se connecter et je voudrai que si l'utilisateur est rec script de session qui ne marche pas ... [ par nicomilville ] Salut j'ai un script php utilisant les session et au début ça marche bien mais après quand je retourne sur la page du formulaire ça ne me renvoi pas s un mini chat [ par mouniklo ] Bonjour à tous je voudrais intégrer un minichat à mon site.Mais, et oui il y à toujours un mais j'ai une fabuleuse erreur qui fait que ça ne fonctionn formulaire qui ne marche pas !!! [ par nicomilville ] Bonjour tout le monde j'ai un petit problème avec le bas de ce code, la partie admin ne se charge pas si je rentre le pseudo et le mot de passe dans l erreur mysql [ par nicomilville ] bonjour tout le monde, voici mon formulaire :Accès aux pages :Pseudo : <input type=" connection membre [ par gorn deja pris ] Voila j'ai un ptit soucis, je débute le php, et j'essai de faire une page où l'on peut se connecter, le truc c'est que j'ai déjà fais les inscriptions delete from... [ par fatatra ] Bonjour;Dans le code ci joint, je veux supprimer une entrée de ma table en fonction du dela variable $_post['pseudo'] que je récupere de la page php p Vérificateur de changement de données [ par givit ] Bonjour @ tous,Je sais, c'est encore moi ... J'ai un petit souci avec un formulaire de modification de données. Il n'affiche rien lorsqu'il y


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales