Probleme avec l'envoi de donnée dans une table SQL en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme avec l'envoi de donnée dans une table SQL en php

Re: Probleme avec l'envoi de donnée dans une table SQL en php

par stealth35 » 21 oct. 2010, 09:51

voir ne pas mettre le ID dutout
INSERT INTO personnes (nom, prenom, email, telephone) VALUES(:nom , :prenom , :email , :telephone )

Re: Probleme avec l'envoi de donnée dans une table SQL en php

par moogli » 21 oct. 2010, 09:05

salut,

lorsque tu met du code sur le forum peut tu utiliser la balise a proprié (php,html ou sql) afin de bénéficier de la colorisatio de la syntaxe c'est plus simple à lire.

ton problème est lié a une erreur de syntaxe. Lorsque l'on execute ton code nous avons droit au message d 'erreur suivant :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in H:\web\docRoot\jg57.php on line 110

la concernée est
<?php
$req = $bdd->prepare('INSERT INTO personnes (ID, nom, prenom, email, telephone) VALUES('', :nom , :prenom , :email , :telephone )');
?>
dans le values tu a mis '' pour le premier paramètre.
coté php tu à une erreur de syntaxe car le tu finis la chaine de caractère après la parenthèse et donc l'on attend un ; (ou un point, une virgule etc) après le deuxième ' de la chaine.
pour garder cette syntaxe il te faut "échapper" les ' avec un \ =>
<?php
$req = $bdd->prepare('INSERT INTO personnes (ID, nom, prenom, email, telephone) VALUES(\'\', :nom , :prenom , :email , :telephone )');
?>
je suppose qu'il s'agit de la clef primaire (au vue du nom) si elle bien déclarée en not null, tu peut remplacer les '' par null !

@+

Probleme avec l'envoi de donnée dans une table SQL en php

par jg57 » 20 oct. 2010, 15:57

Bonjour,

voici le script que j'ai fait pour envoyer les réponse d'un formulaire dans une base sql. (aprés validation des champs)
Mon souci c'est qu'il ne fonctionne pas.
Pouvez vous m'aider?
Il semble que le souci vienne de ces deux lignes:
$req = $bdd->prepare('INSERT INTO personnes (ID, nom, prenom, email, telephone) VALUES('', :nom , :prenom , :email , :telephone )');
$req->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email,'telephone' => $telephone));

Car si je les met en commentaire le formulaire s'affiche alors que si je les met normalement j'ai une page blanche.

<?php
try
{
// Connection à mySQL
$bdd = new PDO('mysql:host=localhost;dbname=Annuaire', 'root', 'root');
}
catch(Exception $e)
{
// Si erreur, alors stop
die('Erreur : '.$e->getMessage());
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Nouveau Contact</title>
</head>
<body>
<div id="page">
<?php

//vérifie si le bouton soumettant le formulaire a été cliqué. Sinon, on saute à la ligne 146 de ce code.
if(isset($_POST['envoi']))
{
// Récupération des données du formulaire
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];
$telephone = $_POST['telephone'];
$email = $_POST['email'];

//Définition des variables servant au traitement de l'adresse électronique et du numéro de téléphone: on utilise les regex.
$valid = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#";
$phone = "#^\d{6,10}$#";

// Traitement de vérification des champs vides ou invalides (téléphone et/ou email)
if ($prenom == '' || $nom == '' || $email == '' || $telephone == '' || !(preg_match($phone,$telephone)) || $email == '' || !(preg_match($valid, $email)))
{
//Action à adopter
?>
<h3>Informations incomplètes</h3>
<p>Un (ou plusieurs) champ(s) obligatoire(s) n'a(ont) pas été correctement rempli(s).</p>
<?php
if ($prenom == '')
{
//Si le champ "prénom" est vide
print "<p>Vous n'avez pas entrer votre prénom</p>\n";
}
if ($nom == '')
{
//Si le champ "nom" est vide
print "<p>Vous n'avez pas entrer votre nom</p>\n";
}
if ($telephone == '')
{
//Si le champ "téléphone" est vide
print "<p>Vous n'avez pas entrer votre numéro de téléphone</p>\n";
}
if (($telephone) && !(preg_match($phone,$telephone)))
{
// Verifie si le numéro de telephone et valide
print "<p>Le numéro de téléphone doit comporter seulement des chiffres, de 6 à 10 chiffres sans espaces ni tirets</p>\n";
}
if(!$email)
{
//Si le champ "email" est vide
print "<p>Vous n'avez pas entrer d'email !</p>\n";
}
if(($email) && !(preg_match($valid, $email))) // Si il y a une adresse inscrite mais invalide
{
// Verifie si l'email et valide
print "<p>L'adresse électronique saisie est invalide.</p>\n";
}

//Si les vérifications ont généré des erreurs, affichage du formulaire contenant les données déjà saisies.
?>

<form action="
<?php echo($_SERVER['PHP_SELF']); ?>
" method="post">
<fieldset>
<label><span class="legende_elmt">Prénom : </span><span class="c2">*</span> <input type="text" name="prenom" maxlength="40" class="cases" value="
<?php echo $prenom ?>
" /></label><br />
<label><span class="legende_elmt">Nom : </span><span class="c2">*</span> <input type="text" name="nom" maxlength="40" class="cases" value="
<?php echo $nom ?>
" /></label><br />
<label><span class="legende_elmt">Téléphone : </span><span class="c2">*</span> <input type="text" name="telephone" maxlength="40" class="cases" value="
<?php echo $telephone ?>
" /></label><br />
<label><span class="legende_elmt">Email : </span><span class="c2">*</span> <input type="text" name="email" maxlength="40" class="cases" value="
<?php echo $email ?>
" /></label><br />
<div class="c3">
<input type="submit" class="verif" name="envoi" value="Envoyer" />&nbsp;<input type="reset" class="verif" value="Recommencer" />
</div>
</fieldset>
</form>

<?php
}
else
{
//Si aucun des champs obligatoire n'est vide et les données sont valides:
//Traitement des données :



$req = $bdd->prepare('INSERT INTO personnes (ID, nom, prenom, email, telephone) VALUES('', :nom , :prenom , :email , :telephone )');
$req->execute(array('nom' => $nom,'prenom' => $prenom,'email' => $email,'telephone' => $telephone));

$href_email = str_replace("@", "%40", $email);

// Affichage du message final des informations reçues
print "<h3>Merci ! Voici les informations que vous avez fournies</h3>\n";
print "<p>Informations sur le contact:</p>\n";
print "<p>". $prenom ." ". $nom ."<br />\n";
print "<p>".$telephone."<br />\n";
print "<p><a href=\"mailto:". $prenom ."%20". $nom ."%20%3c". $href_email ."%3e\">".$email."</a><br />\n";
print("<p><a href=\"". $_SERVER['PHP_SELF'] ."\" title=\"Retour vers le formulaire\">Retour vers le formulaire</a></p>");
}
}

//Si cette page s'ouvre pour la première fois sans que le bouton soumettant le formulaire n'ait été cliqué, alors on affiche le formulaire normalement
else
{
?>
<form action="
<?php echo($_SERVER['PHP_SELF']); ?>
" method="post">
<fieldset>
<label><span class="legende_elmt">Prénom : </span><span class="c2">*</span> <input type="text" name="prenom" maxlength="40" class="cases" value="" /></label><br />
<label><span class="legende_elmt">Nom : </span><span class="c2">*</span> <input type="text" name="nom" maxlength="40" class="cases" value="" /></label><br />
<label><span class="legende_elmt">Téléphone : </span><span class="c2">*</span> <input type="text" name="telephone" maxlength="40" class="cases" value="" /></label><br />
<label><span class="legende_elmt">Email : </span><span class="c2">*</span> <input type="text" name="email" maxlength="40" class="cases" value="" /></label><br />
<div class="c3">
<input type="submit" class="verif" name="envoi" value="Envoyer" />&nbsp;<input type="reset" class="verif" value="Recommencer" />
</div>
</fieldset>
</form>
<?php
}
?>
</div>
</body>
</html>


Merci d'avance.