insertion de donnée dans une table

nanoyo
Invité n'ayant pas de compte PHPfrance

13 mai 2012, 14:59

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

ViPHP
xTG
ViPHP | 7331 Messages

13 mai 2012, 15:35

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

nanoyo
Invité n'ayant pas de compte PHPfrance

13 mai 2012, 16:13

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";
}
}
?>

ViPHP
AB
ViPHP | 5818 Messages

13 mai 2012, 18:13

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.

ViPHP
xTG
ViPHP | 7331 Messages

13 mai 2012, 19:42

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);

nanoyo
Invité n'ayant pas de compte PHPfrance

13 mai 2012, 22:07

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

ViPHP
AB
ViPHP | 5818 Messages

13 mai 2012, 22:35

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).

nanoyo
Invité n'ayant pas de compte PHPfrance

13 mai 2012, 23:03

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');
}
}
?>

ViPHP
AB
ViPHP | 5818 Messages

14 mai 2012, 18:22

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.