formulaire case à cocher

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 : formulaire case à cocher

par d0m » 02 août 2007, 16:25

dans une des boucles apparement $valeur serait un tableau.

Pour vérifier debugue en affichant le contenu de $valeur :
foreach($_POST as $index => $valeur) { 
  echo $valeur;
  //$index = mysql_real_escape_string(trim($valeur)); 
}

par Truc » 02 août 2007, 16:20

Modération :
ju3979, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

par ju3979 » 02 août 2007, 16:14

ça ne change rien

par Pierig » 02 août 2007, 15:44

Voici ta ligne 40
$$index = mysql_real_escape_string(trim($valeur));
Pour moi le problème c'est qu'il y a deux fois $ . non ? :)
Peut être devrait tu utiliser notepad++ ou autre pour la coloration syntaxe ça te faciliterai la tâche.

par ju3979 » 02 août 2007, 14:39

En fait j'ai fait une erreur de copié collé de mon code

Le voici et la ligne 40 n'est donc pas la même
<?php
// Parametres mysql à remplacer par les vôtres
define('DB_SERVER', 'localhost'); // serveur mysql
define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
define('DB_SERVER_PASSWORD', ''); // mot de passe
define('DB_DATABASE', 'base1'); // base1
// Connexion au serveur mysql
$connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, 
DB_SERVER_PASSWORD) 
or die('Impossible de se connecter : ' . mysql_error());
// sélection de la base de données
mysql_select_db(DB_DATABASE, $connect);
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
// vérification des champs 
if (empty($_POST['civilite'])) 
  $message .= "Votre civilité<br/>";
if (empty($_POST['nom'])) 
  $message .= "Votre nom<br/>";
if (empty($_POST['prenom'])) 
  $message .= "Votre prenom<br/>";
if (empty($_POST['adresse'])) 
  $message .= "Votre adresse<br/>";
if (empty($_POST['ville'])) 
  $message .= "Votre ville<br/>";
if (empty($_POST['codepostal'])) 
  $message .= "Votre Code Postal<br/>";


// si un champ est vide, on affiche le message d'erreur 
if (strlen($message) > strlen($msg_erreur)) {

  echo $message;

// sinon c'est ok 
} else {

  foreach($_POST as $index => $valeur) {
    $$index = mysql_real_escape_string(trim($valeur));
  }

  $documentsafournir = $_POST['documentsafournir'];
  $sqldocumentsafournir = '';
  for ($i=0; $i<count($documentsafournir); $i++)
  {
    $sqldocumentsafournir .= $documentsafournir[$i];
    $sqldocumentsafournir .= ', ';
  }


$sql = "INSERT INTO livraisons VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$ville."', '".$codepostal."', '".$telephone."', '".$sqldocumentsafournir."', '".$conseiller."', '".$rendezvous."', '".$remarque."', now())";
  $res = mysql_query($sql);

  if ($res) {
    echo $msg_ok;
  } else {
    echo mysql_error();
 }

}
?>

<FORM>
<INPUT TYPE="button" 
	VALUE="Back"
	onClick="reset">
</FORM>

Merci pour votre aide

par Sékiltoyai » 02 août 2007, 13:07

Regarde attentivement ligne 40, tu as une égalité douteuse, du stype
$machin .= $machin[$i];
En fait, si tu fais cela, en plus dans une boucle, tu concatènes une chaine à un tableau, ce qui oblige php à transformer ton tableau en chaine, ce qui n'est pas propre (sauf si tu le fait explicitement en connaissant les conséquences). Et le problème, c'est que ton $machin[$i]; après la trnaformation n'a plus du tout le même comportement vu qu'il travaille maintenant sur une chaine.
Il faut donc que tu renommes la chaine de caractères pour que cela fonctionne.
Fait attention à de telles erreurs.

par ju3979 » 02 août 2007, 12:22

oui j'avais oublié dexu l pour faire sql
j'ai refais un test la j'ai bien les valeurs des case coher qui apparaissent dans ma base sql

Par contre j'ai toujours l'erreur suivant quand je valide mon formulaire

Notice: Array to string conversion in c:\program files\easyphp1-7\www\traitement.php on line 40

De quoi cela peut venir ?

Merci pour votre aide

par Calimero » 02 août 2007, 12:18

Bonjour,

les balises php, ça aide quand on poste du code source ;-)

Bon sinon, tu as une erreur là (mais sans conséquence pour ton script), il manque un l dans le nom de la variable :
 $sqdocumentsafournir = ''; 
Question : quand tu testes ton formulaire et que tu obtiens une virgule, as-tu bien coché des cases ou tu les as toutes laissées vides ?

formulaire case à cocher

par ju3979 » 02 août 2007, 12:08

Bonjour

J'ai fais un formlaire avec differents champs et des cases à cocher

Quand je valide mon formulaire tous les champs arrivant bien dans base de donnée sauf les cases à cocher

Voici mon script php:


<?php
// Parametres mysql à remplacer par les vôtres
define('DB_SERVER', 'localhost'); // serveur mysql
define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
define('DB_SERVER_PASSWORD', ''); // mot de passe
define('DB_DATABASE', 'base1'); // base1
// Connexion au serveur mysql
$connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
DB_SERVER_PASSWORD)
or die('Impossible de se connecter : ' . mysql_error());
// sélection de la base de données
mysql_select_db(DB_DATABASE, $connect);
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
// vérification des champs
if (empty($_POST['civilite']))
$message .= "Votre civilité<br/>";
if (empty($_POST['nom']))
$message .= "Votre nom<br/>";
if (empty($_POST['prenom']))
$message .= "Votre prenom<br/>";
if (empty($_POST['adresse']))
$message .= "Votre adresse<br/>";
if (empty($_POST['ville']))
$message .= "Votre ville<br/>";
if (empty($_POST['codepostal']))
$message .= "Votre Code Postal<br/>";


// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

echo $message;


$documentsafournir = $_POST['documentsafournir'];
$sqdocumentsafournir = '';
for ($i=0; $i<count($documentsafournir); $i++)
{
$documentsafournir .= $documentsafournir[$i];
$sqldocumentsafournir .= ', ';
}


$sql = "INSERT INTO livraisons VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$ville."', '".$codepostal."', '".$telephone."', '".$sqldocumentsafournir."', '".$conseiller."', '".$rendezvous."', '".$remarque."', now())";
$res = mysql_query($sql);

if ($res) {
echo $msg_ok;
} else {
echo mysql_error();
}

}
?>

<FORM>
<INPUT TYPE="button"
VALUE="Back"
onClick="reset">
</FORM>


Voila les erreurs qu'il me donne:

Notice: Array to string conversion in c:\program files\easyphp1-7\www\traitement.php on line 40

Notice: Undefined variable: sqldocumentsafournir in c:\program files\easyphp1-7\www\traitement.php on line 50
Votre demande a bien été prise en compte.

Dans ma base dans le champ documentsafournir j'ai une virgule c'est tout

Pouvez vous m'aider sur ce problème ça fait déja plusieurs jours que je suis dessus sans solution

D'avance un grand merci