8768 sujets

Développement web côté serveur, CMS

Encore un formulaire

Bonjour,

Je reprends mes bases en programmation j'essaye de créer un formulaire simple 3 entrées html, pseudo, email, password, et sécurisé pour php 5.2.16 qui enregistre les champs dans une base mysql chaque champs est vérifié avec une regex;

j'aimerais qu'une fois tous les statements()if:else validés il ouvre une nouvelle page une fois qu'il a enregistré les données.

je trouve soit des tutoriels très longs soit des trucs trop simple et je m'y perds ça m'énerve, je demande de l'aide pour souffler un peu.


<?php

include 'cookie.php' //fichiers langue;
?>
<!DOCTYPE html>
<head>
  <title><?php $lang['title']; ?></title>
  <meta name="description" content=" <?php echo $lang['description']; ?> ">
  <meta name="keywords" content="<?php echo $lang['keywords']; ?> ">
  <meta name="author" content="********">
  <meta name="robots" content="index, follow">
  <link rel="stylesheet" media="screen" type="text/css" title="template" href="template.css">
  <style>
  body{
  	background:white;
  	}
  #error{
  	color: white;
  	background: black;
  	}
  </style>
</head>
<body>
 <h1>Essaie !</h1>
<a href="index.php?lang=en">English</a>
<a href="index.php?lang=fr">Français</a>
<div>
<form method="post" action="index.php" enctype="x-www-form-urlencodes">
 <input type="text" value="<?php echo $lang['pseudo']; ?> " name="pseudo" ><br>
 <input type="text" value="<?php echo $lang['email']; ?> " name="email" ><br>
 <input type="password" value="<?php echo $lang['password']; ?> " name="password" ><br>
 <input type="submit" value="<?php echo $lang['play']; ?>" name="submit" > 
</form>
<?php

$user = "j****";
$host = "*****";
$pass = "*********";
$db = "**********";
$con = mysqli_connect($host,$user,$pass);
mysqli_select_db($con, $db); 


if(isset($_POST['pseudo'])  && (isset($_POST['email'])) && (isset($_POST['password'])) )
{
    $_POST['pseudo'] = htmlspecialchars($_POST['pseudo']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer

    if (preg_match("#[a-zA-Z0-9]#", $_POST['pseudo']))
    {
        echo "<p id='valide'>". $lang['pseudoValidate']."</p><br>";
        $pseudo= $_POST['pseudo'];
        
        $_POST['email'] = htmlspecialchars($_POST['email']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer

    if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
    {
        echo "<p id='valide'>". $lang['emailValidate']."</p><br>";
        $email = $_POST['email'];
    }
    else
    {
       echo "<p id='error'>". $lang['emailUnValidate'] ."</p><br>";
    } 
       
    }
    else
    {
       echo "<p id='error'>". $lang['pseudoUnValidate'] ."</p><br>" ;
    }

    

    $_POST['passwordl'] = htmlspecialchars($_POST['password']); 
    if (preg_match("#^(?=.*\d)(?=.*[a-zA-Z]).{4,8}#", $_POST['password']))
    {
        //string to have at least one Numeric and one Character and the  length of text string to be between 4 to 8 characters
	      $pass = $_POST['password'] ;
	      $passs = hash('sha256', $pass);
        
         header('location: page_002.php');
          mysqli_query($con, "INSERT INTO players SET  pseudo='".$pseudo."', password='".    $passs."', email='".$email."' " ); 	
        
    }
    else
    {
        echo "<p id='error'>". $lang['passwordUnValidate'] ."</p><br>";
    }
  
}
mysqli_close($con);?>
</div>
<div></div>
<div>

</div>
</body>
</html>


ZeKK a écrit :

Je reprends mes bases en programmation j'essaye de créer un formulaire simple 3 entrées html, pseudo, email, password, et sécurisé pour php 5.2.16 qui enregistre les champs dans une base mysql chaque champs est vérifié avec une regex;


Ce que tu demandes est impossible, tu ne peux pas faire du développement sécurisée avec PHP 5.2 puisque cette version n'est plus supportée et ne reçois plus de mise à jour de sécurité depuis 5 ans. J'espère que tu n'as aucun serveur en ligne qui tourne avec cette version.

http://php.net/supported-versions.php

http://php.net/eol.php

Par rapport à ton code, je ne sais pas quoi dire, y'a tellement à revoir. Tu ne veux pas essayer de te plonger dans un bouquin récent ou une formation ?
Je veux bien une liste de livres de débutant à expert, car pour le moment je pars un peu dans tous les sens ( français ou anglais ).
J'aurais bien du mal à te conseiller vu que les livres que je lis ces dernières années parlent de programmation en générale mais pas forcément de PHP.

Il y a PHP The Right Way dont j'ai parlé dans un autre topic qui est un guide de présentation du developpement moderne en PHP. Il est dispo sous forme de site ou d'un ebook gratuit. Ce n'est pas un livre qui traite de programmation mais il donne une liste de bonnes pratiques qui peuvent t'aiguiller pour trouver des ressources d'apprentissage :

http://eilgin.github.io/php-the-right-way/
Bonjour,

en parcourant le code source du formulaire, je vous conseille d'y intégrer les 2 notions suivantes:
requetes préparées avec PDO
exemple http://php.net/manual/fr/pdo.prepared-statements.php
en remplacement de mysqli_query

utiliser une fonction de filtre sur les string en $_POST
exemple filter_var($_POST['password'], FILTER_SANITIZE_STRING)
fobec a écrit :

requetes préparées avec PDO
exemple http://php.net/manual/fr/pdo.prepared-statements.php
en remplacement de mysqli_query


mysqli permet de faire des requêtes préparées autant que PDO.

fobec a écrit :

utiliser une fonction de filtre sur les string en $_POST
exemple filter_var($_POST['password'], FILTER_SANITIZE_STRING)


Ça c'est vraiment une très mauvaise idée, surtout sur un mot de passe. Ce filtre a été discutée pas mal de fois à propos de sa tendance a coorompre les données entrées par l'utilisateur. Je reviens pas sur les détails mais pour references :

http://anuary.com/55/why-input-sanitization-is-evil

http://stackoverflow.com/questions/15989103/filter-sanitize-string-is-stripping-the-character-and-any-text-after-it
http://stackoverflow.com/questions/23392128/what-does-filter-sanitize-string-do
Modifié par tempif (16 Mar 2015 - 18:50)
tempif a écrit :

mysqli permet de faire des requêtes préparées autant que PDO.

disons que c'est un choix perso pour la refactorisation

tempif a écrit :

Ça c'est vraiment une très mauvaise idée, surtout sur un mot de passe. Ce filtre a été discutée pas mal de fois à propos de sa tendance a coorompre les données entrées par l'utilisateur. Je reviens pas sur les détails mais pour references :

je savais pas, merci pour l'info et les liens !