Page 1 sur 1

Créer un formulaire de contact PHP, MySQL, PDO

Posté : 05 avr. 2013, 12:26
par reverb
Bonjour,

Voici mon problème. Je suis récemment passé de mysql_ à la PDO, pour des raisons de sécurité (et de modernité du code utilisé). J'ai réussi à créer une page de connexion PDO :
<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=nom_de_name;charset=utf8', 'login', 'mot de passe', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'/*, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION*/));
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?> 
J'essaye actuellement d'adapter mon formulaire de contact à la pdo, voici ma page contact :
  <div id="formulairecontact">
  <p class="texte3">Formulaire de contact</p>
<form id="formcontact" method="post" action="contact.php" enctype="multipart/form-data">

 <p class="texte3"><label for="pseudo">Votre pseudo</label> : <br /><input type "text" name="pseudo" id="pseudo" placeholder="20 caractères maximum" size="30" maxlength="20" /></p>
 
 <p class="texte3">
  <label for"email" class"texte4">Votre E-mail : </label><br />
 <input type="email" name="email" id="email" /></p>
 
 <p class="texte3">
       <label for="objet">Objet du message ?</label><br />
       <select name="objet" id="objet">
           <option value="apdsite">A propos du site</option>
           <option value="demandedessin">Demande de Dessin</option>
           <option value="dprofessionelle">Demande professionelle</option>
           <option value="autre">Autre...</option>
       </select>
   </p>
 
 <p class="texte3">
<label for="ameliorer" class="texte3">Votre message : </label><br />
       <textarea name="message" id="message" row="10" clols="50"></textarea></p>
 
 <p class="texte3"><input type="submit" value="Envoyer" /></p>

</form>
<?php
if(isset($_POST['pseudo']))      $pseudo=$_POST['pseudo'];
else      $pseudo="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";

if(isset($_POST['objet']))      $objet=$_POST['objet'];
else      $objet="";

if(isset($_POST['message']))      $message=$_POST['message'];
else      $message="";

if(empty($pseudo) OR empty($email) OR empty($objet) OR empty($message))
    {
    echo '<font color="red"><b><center>Attention, vous devez remplir tous les champs</center></b></font>';
    }
	
else     
    {
		
		
       // connexion à la base
$db = mysql_connect('localhost', 'login', 'mot de passe')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

mysql_select_db('nom_base_de_donnée',$db)  or die('Erreur de selection '.mysql_error());
    
    // on écrit la requête sql
    $sql = "INSERT INTO recu(id, pseudo, email, objet, message) VALUES('','$pseudo','$email','$objet','$message')";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    // on affiche le résultat pour le visiteur
    echo '<font color="green"><b><center>Votre message à bien été envoyé !</center></b></font>';

    mysql_close();  // on ferme la connexion
    } 
?>
  </div>
 </div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>
J'aurais besoin d'un petit coup de pouce pour m'aider a rédiger ce code et surtout à le comprendre :/
Merci pour votre attention et de votre aide.
Sincèrement.

Re: Créer un formulaire de contact PHP, MySQL, PDO

Posté : 05 avr. 2013, 14:21
par reverb
Re,
Je pense avoir trouver une solution pour mettre tout ça sous forme PDO.
J'aurais besoin de savoir si mon code comporte des erreurs ou des codes manquant ( sur le site sa fonctionne parfaitement, je reçoie bien les infos du formulaire de contact dans ma BDD )
Voici mon code :

Ma connexion serveur :
conexionc.php
<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=nom_DB;charset=utf8', 'Users', 'mdp', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'/*, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION*/));
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?> 
et ma page de code :
contact.php
<?php
if(isset($_POST['pseudo']))      $pseudo=$_POST['pseudo'];
else      $pseudo="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";

if(isset($_POST['objet']))      $objet=$_POST['objet'];
else      $objet="";

if(isset($_POST['message']))      $message=$_POST['message'];
else      $message="";

if(empty($pseudo) OR empty($email) OR empty($objet) OR empty($message))
    {
    echo '<font color="red"><b><center>Attention, vous devez remplir tous les champs</center></b></font>';
    }
	
else     
    {
	// connexion à la base
require_once("connexioncontact.inc.php");
    
    // on écrit la requête sql
    $sql = "INSERT INTO recu(id, pseudo, email, objet, message) VALUES('','$pseudo','$email','$objet','$message')";
    
    // on insère les informations du formulaire dans la table
	try
{
	$bdd->query($sql);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
    // on affiche le résultat pour le visiteur
    echo '<font color="green"><b><center>Votre message à bien été envoyé !</center></b></font>';
    } 
?>
Merci pour votre aide et vos conseils.

Re: Créer un formulaire de contact PHP, MySQL, PDO

Posté : 05 avr. 2013, 20:07
par moogli
salut,


on utilise pas die c'est pas une bonne idée, tu récupère l message d'erreur et l'affiche (ou pas d'ailleur tu peux simplement le logguer et afficher une erreur standard bateau).

ensuite pourquopi systèmetiquement utiliser des variables en plus pour traiter les formulaires ?

utilise directement $_POST dans les if c'est et la suite c'est pas un problème. (même si je sais parfaitement que ces variables ne sont que des références, ça peu faire perdre la provenance de celle ci ;)

de plus ta requete est sensible aux injection SQL.

code corrigé
<?php
if (empty($_POST['pseudo']) || empty($_POST['email']) || empty($_POST['objet']) || empty($_POST['message'])) {
    echo '<p class="erreur">Attention, vous devez remplir tous les champs</p>';
} else {
    // connexion à la base
    require_once("connexioncontact.inc.php");

    // on écrit la requête sql
    $sql = 'INSERT INTO recu(pseudo, email, objet, message) VALUES(' . $bdd->quote($_POST['pseudo']) . ','
        . $bdd->quote($_POST['email']) . ','
        . $bdd->quote($_POST['objet']) . ','
        . $bdd->quote($_POST['message']) . ')';

    // on insère les informations du formulaire dans la table
    try {
        $bdd->query($sql);
    } catch (Exception $e) {
        echo '<p class="erreur">', $e->getMessage(), '</p>';
    }
    // on affiche le résultat pour le visiteur
    echo '<span class="laclasse qui va bien">Votre message à bien été envoyé !</span>';
}
?>
 

@+

Re: Créer un formulaire de contact PHP, MySQL, PDO

Posté : 06 avr. 2013, 12:30
par reverb
Bonjour,
Merci beaucoup moogli, ça fonctionne.
2 petite questions, somme nous obliger d'utiliser un <span class> pour appliquer un style css à un "echo" ? ou je peu continuer a utiliser <p class> ?
et comment applique t'on un style à une image : <img src="images/<?php echo $_GET['image']; ?>" width="800px" height="auto"/> ?
Merci encore pour ton aide.
Sincèrement.

Re: Créer un formulaire de contact PHP, MySQL, PDO

Posté : 06 avr. 2013, 22:25
par moogli
Tu fait comme tu veux c'est pas un problème.

C'était juste pour virer ton html périmé ;)

Pour l'image tu style avec css, je te conseil le site alsacreations.com pour tous ce qui est css ;)


@+

Re: Créer un formulaire de contact PHP, MySQL, PDO

Posté : 07 avr. 2013, 13:19
par reverb
Ok, Merci beaucoup pour ton aide Moogli :).
Sincèrement.