Page 1 sur 1

insertion de donnée dans une table

Posté : 13 mai 2012, 14:59
par nanoyo
Bonjour
j'aimerai mettre des donnée dans ma database mais je n y arrive pas pourtant j ai regarder des exemple le site du zero ect
mais je n y arrive pas voici mon code
<?php
$db = new mysqli('localhost', 'root@localhost', '', 'test')
or die('erreur de connection: ');
  
$date=$_POST['date'];


if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message']))
{
extract($_POST);
 if(!empty ($nom) && !empty ($email) && !empty ($message))
  {
  $req=$db->prepare("INSERT INTO contact(nom, email, message, date) VALUES ('$nom', '$email', '$message', '$date')") or die ('erreur de la requete');
  $req->execute();
  echo 'execution de la requete';
  }
else
{
 echo "une erreur a ete commise";
}
}
?>
merci de vos reponse

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 15:35
par xTG
Dans ton utilisation la requête préparée ne sert à rien.
Il faut savoir que ça utilise plus de ressources qu'une requête normale.

Le seul avantage que tu pourrais en tirer dans ton cas est l'échappement des paramètres, sauf que vu que tu balances tout en bloc dans la requête...
Il y a un bon exemple dans la documentation : http://fr2.php.net/manual/fr/mysqli-stmt.prepare.php

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 16:13
par nanoyo
merci de m'avoir répondu malheureusement
même si j ai tester de changer mon code il m'affiche toujour une page blanche
<?php
$db = new mysqli('localhost', 'root', '', 'test')
or die('erreur de connection: ');
if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message']))
{
extract($_POST);
 if(!empty ($nom) && !empty ($email) && !empty ($message))
  {
  $stmt =  $mysqli->stmt_init();
  if ($stmt->prepare("INSERT INTO contact(nom, email, message, date)")) {
  $stmt->bind_param($nom, $email, $message, date());
  $stmt->execute();
  echo 'execution de la requete';
  }
  }
else
{
 echo "une erreur a ete commise";
}
}
?>

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 18:13
par AB
Un autre exemple avec mysqli et insert sur ce lien

EDIT Evites d'utiliser la fonction "extract", cela peut être dangereux pour la sécurité du script.

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 19:42
par xTG
Page blanche ? L'affichage des erreurs de syntaxe est-elle activée sur ton serveur ?
Ou bien c'est que ton formulaire n'envoie pas toutes les données attendues et donc tu ne rentres jamais dans la première condition.
Tu peux vérifier ce que tu reçois avec var_dump($_POST);

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 22:07
par nanoyo
merci de vous conseille j ai réussi mon code par contre pour le else j arrive a afficher un message d'erreur mais je n'arrive pas a l afficher avec le formulaire html et je ne vois pas comment faire

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 22:35
par AB
Refaits voir ton nouveau code (en ayant virer le "extract").

Sinon sur le principe tu peux faire :
<?php
$message_erreur = array();

if(condition)
{
//...
}
else
{
    $message_erreur[]='message erreur1';
}

if(condition2)
{
    $message_erreur[]='message erreur2';
}

// etc.
?>

<html>
<form...>
...
</form>

<div>
<?php if(isset($message_erreur) && is_array($message_erreur) && count($message_erreur) > 0)
{
foreach($message_erreur as $value) echo '- '.$value.'<br>';
}
?>
</div>
</html>
L'avantage d'utiliser un tableau comme ci dessus c'est que tu peux afficher plusieurs message d'erreurs simultanément (et ça ne gène pas si tu veux n'en afficher qu'un).

Re: insertion de donnée dans une table

Posté : 13 mai 2012, 23:03
par nanoyo
merci je n'ai pas réussi a enlever l extract car quand je fesais $nom= $_POST['nom']; pour les 3 cela m afficher des erreurs et si je mettais l extract cela fonctionnais et je travail avec un fichier php et 1 html

ce que je veux faire c'est mettre un message d'erreur tout en gardant les champs et aussi garder les données saisies
<?php
$db = new mysqli('localhost', 'root@localhost', '', 'test') //je me connecte à la base de donnée
or die('erreur de connection: ');
  
  
$date=date("Y-m-d");


if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])) //je verifie que les champs ne sont pas vide
{
extract($_POST); //simplification des $_POST['nom'] en $nom
 if(!empty ($nom) && !empty ($email) && !empty ($message)) //verification si les champs sont vide
  {
  $sql="INSERT INTO `test`.`contact` (`id`, `nom`, `email`, `message`, `date`) VALUES (NULL, '$nom', '$email', '$message', '$date')"; // requete pour les mettre dans la table
  mysql_query($sql)  or die ('erreur de requete'); // exécution de la requete
  echo 'merci de votre message';
  }
else
{
  $erreur="une erreur a ete commise";
	header('Location: test2.html');
}
}
?>

Re: insertion de donnée dans une table

Posté : 14 mai 2012, 18:22
par AB
Prends modèle sur l'exemple de mon précédent message, cela te permettra d'indiquer les erreurs précises. Et si tu veux ne pas perdre les valeurs il faut les enregistrer dans une variable de session. Exemple :
<?php session_start();

if(isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])) //Vérifie que le formulaire a été envoyé
{
$_SESSION['message_form'] = array();
$_SESSION['input_form'] = $_POST;

$nom = trim($_POST['nom']);//enlève les espaces vides de début et de fin
if(empty($nom)) {$_SESSION['message_form'][] = 'le nom doit être rempli';}

$email = trim($_POST['email']);
if(empty($email )) {$_SESSION['message_form'][] = 'le mail doit être rempli';}

$message= trim($_POST['message']);
if(empty($message)) {$_SESSION['message_form'][] = 'le message ne doit pas être vide';}

if(count($_SESSION['message_form']) == 0)
  {
    // requête d'insertion
   //...
   $_SESSION['message_form'][] = 'merci de votre message';
   unset($_SESSION['input_form']);// efface les valeurs si tout est correct
   
   }
   
   header('Location:'.$_SERVER['PHP_SELF']);
   exit;

}
?>

<html>
<div>
<form action = "#" method="post" />
nom <input type = "text" name = "nom" value = "<?php if (isset($_SESSION['input_form']['nom'])) echo htmlspecialchars($_SESSION['input_form']['nom']) ?>" /><br />

mail <input type = "text" name = "email" value = "<?php if (isset($_SESSION['input_form']['email'])) echo htmlspecialchars($_SESSION['input_form']['email']) ?>" /><br />

message <input type = "text" name = "message" value = "<?php if (isset($_SESSION['input_form']['message'])) echo htmlspecialchars($_SESSION['input_form']['message']) ?>" /><br />

<input type = "submit" value = "envoyer" />
</form>
</div>

<div>
<?php if(isset($_SESSION['message_form']) && is_array($_SESSION['message_form']) && count($_SESSION['message_form']) > 0)
{
foreach($_SESSION['message_form'] as $value) echo '- '.$value.'<br>';
unset($_SESSION['message_form']);
}
?>
</div>
</html>
ci-dessus tu as un exemple complet (php et html dans une même page) à tester dans une page séparée.

Au fait utilises mysqli_real_escape_string pour protéger tes variables dans ta requête. C'est indispensable quand on utilise pas de requêtes préparées.