20 Novembre 2017 à 14:28:18

Auteur Sujet: Faire un formulaire HTML, CSS, PHP (1 sur 3)  (Lu 124877 fois)

Mehdi

  • Intarissable
  • *****
  • Messages: 2504
  • Points gagnés: 0
    • Voir le profil
    • Tutoriel informatique
Re : Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #75 le: 21 Mars 2007 à 19:30:18 »
Bonsoir,

Je ne comprend pas trop l'intérêt de la question car le script a l'air bon comme ça...

La boucle suivante sécurisé tous vos champs :
<?php foreach($_POST as $index => $valeur//Chaque valeur sera indexée
{
$$index mysql_real_escape_string(trim($valeur)); //On nettoie chaque valeur indexée en enlevant les espaces avec un trim et en évitant les injections sql avec un real_escape_string//
?>

Et la requête INSERT INTO suivante insérè tous vos champs en base de données, ce qui insérera une chaine vide à chaque champ qui ne sera pas rempli.

Vous avez donc tout non ?  8)


Tu devrais faire un autre tuto?
Aide informatique
Nous n'avons trouvé aucun problème, mais nous allons continuez à vous aider !

abdou82

  • Nouveau membre
  • *
  • Messages: 2
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #76 le: 23 Mars 2007 à 09:29:06 »
Bonjour à tous,

En premier lieu merci pour ce tutoriel qui m'a beaucoup aidé à comprendre comment fonctionne les formulaires.

Mais malheureusement ce que je dois faire et un tout petit peu plus compliqué que ca, et comme je suis nouveau en php j'aimerai bien un peu d'aide et quelques explications  :D

Voila je vous explique. Ce que je dois faire c un formulaire sur plusieurs pages et chaque page doit etre relié à une table de ma base de données et ces tables sont reliés entre elles.

Je vous donne un exemple avec seulement deux tables pour simplifier l'explication. une table client et une table contact. La table client a comme clé étrangere l'id de la table client.

maintenant dans le formulaire j'aimerai avoir dans la premiere page les données du client ensuite en appuyant sur envoyer la page de contact doit s'afficher pour rentrer les infos de contact mais aussi l'id de client doit etre lu sur cette page comme ca on peut l'inclure dans la table client.

j'espere que j'ai été assez clair.

Merci.

boilatas

  • Nouveau membre
  • *
  • Messages: 1
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #77 le: 25 Mars 2007 à 23:47:49 »
Bonsoir à tous,

Voilà, je me lance à l'assaut de l'HTML, du CSS. J'avance petit à petit mais assez bien à mes yeux.
Par contre en PHP, c'est la croix et la bannière.

En effet, ma question est simple, faut-il être déjà héberger sur un serveur pour qu'une requête PHP fonctionne, à savoir transmettre les données d'un formulaire à une boîte mail ?

J'ai testé les code HTML et PHP du tuto (en prenant soin de remplacer le mail destinataire par mon mail perso) mais mon envoi est un echec.

Voilà, ma question est simple et un peu bête mais là, j'ai un gros doute.

Boilatas

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #78 le: 26 Mars 2007 à 12:25:32 »
A abdou82 :

Je ne sais pas si j'ai bien compris, mais pour exemple je dirais qu'il faut faire comme cela :

1/ une page avec le formulaire client. Exemple : client.php

2/ dans l'action du formulaire client, vous mettez par exemple contact.php comme fichier

3/ une page avec le formulaire de contact, par exemple contact.php.  Elle va récupérer les données client (puisque vous l'avez mise en action du formulaire précédent) et les insérer en base de données.

4/ A la suite de cette insertion en base de données, vous allez récupérer le numéro identifiant automatique de l'enregistrement client que vous venez de créer avec mysql_insert_id()

5/ Ensuite cette page va afficher le second formulaire (contact). Et si dans ce formulaire il vous faut mettre des données du client que vous venez d'enregistrer, vous pouvez soit les récupérer directement dans les variables $_POST[] ou faire une requête dans la base de données puisque vous avez le numéro id du champ client.



A boilatas :

Pour que PHP fonctionne, il faut être sur un serveur apache qui va comprendre ce language de développement. Jusque là je suppose que ça ne vous pose pas de problème, apparemment vous en avez installer un en local sur votre pc.

Pour que la fonction PHP mail() (que j'ai utilisée) fonctionne, il faut par contre en plus un serveur mail configuré avec PHP. Cela peut ête un serveur mail externe, ou un serveur sendmail, postfix ou autre installé sur la même machine. Dans tous les cas c'est à configurer dans votre fichier php.ini et ce n'est pas toujours évident.
Par contre si vous testez ça chez un hébergeur quelconque qui supporte le PHP, ils sont le plus souvent déjà configurés pour que cette fonction marche correctement. Donc là vous n'avez rien à faire de spécial et le script marchera directement.
Cordialement,
Damien

Tutoriels informatique

abdou82

  • Nouveau membre
  • *
  • Messages: 2
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #79 le: 26 Mars 2007 à 14:06:26 »
Merci de ta réponse damien, au fait j'avais réussi finalement à faire ce que je voulais. Mais ta réponse est a peu près similaire avec ce que j'ai fait juste moi pour recupérer l'id du dernier Client enregistré j'ai fait:

mysql_query("select max(IDC) from customer");

C'est vrai que c bien d'utiliser aussi mysql_insert_id() je pense que c mieux.

Merci en tout cas de ta reponse  :)
« Modifié: 26 Mars 2007 à 14:08:12 par abdou82 »

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #80 le: 26 Mars 2007 à 15:57:00 »
Oui d'une manière générale, c'est mieux d'utiliser les fonctions PHP natives qui sont prévues. Ca mange moins de ressources que de faire une requête mysql supplémentaire pour rien sur ton exemple :)

Enfin tant mieux si c'est réglé ;)
Cordialement,
Damien

Tutoriels informatique

poky

  • Nouveau membre
  • *
  • Messages: 9
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #81 le: 28 Mars 2007 à 16:09:45 »
Bonjour,

Petit problème avec le formulaire sous php, je l'utilise pour un site mais j'ai fais un mix de plusieurs trucs et il doit y avoir une erreur. Alors plusieurs questions à vous poser.
Voici le lien du site qui mène au formulaire.
http://legarrit.free.fr/reservation.php/

1)J'ai remarqué que toutes les données du formulaire doivent être remplies pour que les données soient enregistrées dans la base de données.
Alors que j'ai demandé certaines données obligatoires donc ça derait marcher que seulement ces dernières sont remplies.
2) Dernière question : Est-ce possible d'éviter d'être envahi de données remplies automatiquement par des robots ou je ne sais quoi.
Voilà merci à tous pour cet excellent forum et le tuto pour le formulaire.Je vous mets le code du traitement du formulaire.
<?php
mysql_connect
("sql.free.fr","XXX","XXX");
mysql_selectdb("XXX");

$civilite $_POST['civilite'];
$nom $_POST['nom'];
$prenom $_POST['prenom'];
$adresse $_POST['adresse'];
$codepostal $_POST['codepostal'];
$ville $_POST['ville'];
$dep $_POST['dep'];
$pays $_POST['pays'];
$tel$_POST['tel'];
$yes $_POST['yes'];
$com$_POST['com'];
$email$_POST['email'];
$site $_POST['site'];



$requete "insert into formulaire (civilite,
                    nom,
      prenom,
         adresse,
      codepostal,
    ville,
    dep,
      pays,
    tel,
    yes,
    com,
        email,
    site)"
;
$requete .= " values ('$civilite',
                      '
$nom',
                      '
$prenom',
                      '
$adresse',
                       
$codepostal,
                      '
$ville',
                      '
$dep',
                      '
$pays',
                      '
$tel',
                       
$yes ,
                      '
$com',
                      '
$email',
          '
$site')";
  

$resultat mysql_query$requete );

// vérification des champs 
if (empty($_POST['nom'])) 
  
$message .= "Veuillez indiquer votre nom<br/>";
if (empty(
$_POST['email'])) 
  
$message .= "Veuillez renseigner le champ email<br/>";
if (empty(
$_POST['tel'])) 
  
$message .= "Veuillez renseigner le champ téléphone<br/>";
if (empty(
$_POST['com'])) 
  
$message .= "Veuillez taper votre message<br/>";



if (
strlen($message) > strlen($msg_erreur)) {

  echo 
$message;

} else echo 
"Nous vous répondrons très prochainement, merci de votre visite et à très bientôt.";


  


?>
Cordlt
CN
« Modifié: 28 Mars 2007 à 16:34:24 par damien »

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #82 le: 28 Mars 2007 à 16:45:37 »
Bonjour,

Pour le 1) c'est normal car vous avez enlever du code par rapport au tutoriel original donc vous ne vous servez plus de ma variable $msg_erreur originale.
Par contre pour savoir s'il y a une erreur de champ non rempli vous vérifiez toujours par rapport à cette variable,ce qui fait que la condition doit toujours être fausse.

Faites plutôt quelque chose comme ça dans votre cas, prenant soin d'initialiser $message = ""; au début de votre script  :
if (!empty($message)) {

  // n'affiche $message d'erreur que s'il est non vide
  echo $message;

} else echo "Nous vous répondrons très prochainement, merci de votre visite et à très bientôt.";


Pour le 2) c'est vrai que c'est embêtant, et je pense que la meilleure technique pour éviter ces pollutions de formulaire reste d'ajouter un champ code de sécurité à recopier manuellement par l'utilisateur (et de ne pas envoyer le formulaire s'il est faux). Vous devriez trouver des scripts permettant de créer ça assez facilement.
Un exemple de code de sécurité si vous n'avez pas compris de quoi je parle : http://www.conseillemoi.com/contact.php
Cordialement,
Damien

Tutoriels informatique

poky

  • Nouveau membre
  • *
  • Messages: 9
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #83 le: 28 Mars 2007 à 17:38:00 »
Merci beaucoup Damien, comme toujours réponse très rapide, mais même souci, il faut tout remplir sinon les données ne sont pas enregistrées.
Pourtant, le formulaire est quand même validé. Aucune erreur ou warning !!!
Je desespère avec ce truc et puis à force de bidouiller on fait des bêtises.
Merci
Poky

poky

  • Nouveau membre
  • *
  • Messages: 9
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #84 le: 29 Mars 2007 à 10:16:44 »
Bonjour,

Alors, j'ai fait un copier coller de la feuille de traitement des données mais obligée de supprimer le champ intérêt car je ne l'ai pas dans mon formulaire.
Seulement, j'ai dû faire encore une bêtise.
J'ai un message d'erreur à l'envoi du formulaire.
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /mnt/122/sdb/f/f/legarrit/traitement.php on line 217

Pouvez-vous me dire s'il manque quelque chose.
<?php
// Parametres mysql à remplacer par les vôtres
define('DB_SERVER''XXX'); // serveur mysql
define('DB_SERVER_USERNAME''XXX'); // nom d'utilisateur
define('DB_SERVER_PASSWORD''XXX'); // mot de passe
define('DB_DATABASE''XXX'); // nom de la base

// Connexion au serveur mysql
$connect mysql_connect(DB_SERVERDB_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['nom'])) 
  
$message .= "Votre nom<br/>";
if (empty(
$_POST['email'])) 
  
$message .= "Votre e-mail<br/>";
if (empty(
$_POST['tel'])) 
  
$message .= "Votre N° de téléphone<br/>";
if (empty(
$_POST['com'])) 
  
$message .= "Votre message<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));
  }

  
$sql "INSERT INTO formulaire VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$codepostal."', '".$ville."', '".$pays."', '".$tel"', '".$yes."', '".$com."', '".$dep."', '".$email."' '".$site."' 'now())";
  
$res mysql_query($sql);

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

}
?>
« Modifié: 29 Mars 2007 à 12:34:23 par damien »

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #85 le: 29 Mars 2007 à 12:39:06 »
Bonjour,

Oui il y a des erreurs sur la fin de votre requête "INSERT" en base de données. Vous mettez :
  $sql = "INSERT INTO formulaire VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$codepostal."', '".$ville."', '".$pays."', '".$tel"', '".$yes."', '".$com."', '".$dep."', '".$email."' '".$site."' 'now())";
Mais il manque des virgules et il y a une apostrophe en trop. Vous devriez avoir :
  $sql = "INSERT INTO formulaire VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$codepostal."', '".$ville."', '".$pays."', '".$tel"', '".$yes."', '".$com."', '".$dep."', '".$email."', '".$site."', now())";
( now() ne prend pas d'apostrophe car ce n'est pas une chaine de caractères, c'est une fonction reconnue par mysql )
Cordialement,
Damien

Tutoriels informatique

poky

  • Nouveau membre
  • *
  • Messages: 9
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #86 le: 29 Mars 2007 à 13:09:01 »
Salut Damien,

Parfait, entre temps, j'avais trouvé ces erreurs, le formulaire marche nickel. Ah ces virgules, apostrophe...
Vraiment parfait, merci encore.
Par contre, j'aurais voulu rajouter 2 champs en fait, mais je n'ose plus y toucher.
Période de location du "Champ date " au "Champ date" à remplir par les utilisateurs.
En varchar, ce sera correct, ou faut-il quelque chose d'autre si c'est pour insérer des formats de date.
Poky

jacghit

  • Nouveau membre
  • *
  • Messages: 6
  • Points gagnés: 0
    • Voir le profil
Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #87 le: 28 Mai 2007 à 11:23:47 »
Bonjour Damien,
J'ai découvert ce site un peu par hasard, mais que le hasard fait bien les choses : chaque tutorial est très bien fait et pédagogique.
J'ai installé mon site sur mon site les fichiers : abstractSFCP.html, formulaire.css et traitement.php.
Tout fonctionne normalement avec en particulier un bon enregistrement dans ma base de données MySQL.
C'est déjà énorme puisqu'il y a 48 heures, je ne connaissais rien aux languages css et php.
Mon soucis est le suivant, je suis dans l'incapacité d'envoyer les données vers mon adresse email (FAI = wanadoo).
Je viens de lire les questions et réponses de ce forum et je ne trouve pas de solution à ce problème.
A noter que je travaile sur MacBook Pro (intel).

Je vous communique mon fichier "traitement.php" en étant désolé si c'est trop long :

<?php


$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['adresse'])) 
  
$message .= "Votre adresse<br/>";
if (empty(
$_POST['codepostal'])) 
  
$message .= "Votre code postal<br/>";
if (empty(
$_POST['ville'])) 
  
$message .= "Votre ville<br/>";
if (empty(
$_POST['comments'])) 
  
$message .= "Votre message<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 trim($valeur);
  }

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

 
// Informations d'entête du mail:
$headers  ="MIME-Version: 1.0\r\n";
$headers .='From: ' EXPEDITEUR_NOM;
$headers .=' <' EXPEDITEUR_EMAIL ">\r\n";
$headers .='Reply-To: 'EXPEDITEUR_EMAIL ."\r\n";
$headers .='Content-Type: text/plain; ';
$headers .='charset="iso-8859-1"'."\r\n";
$headers .="Content-Transfer-Encoding: 8bit\r\n";
$headers .='X-Mailer:PHP/' phpversion() . "\r\n";

// sujet du mail
$sujet "Formulaire du site";

// corps du mail
$message "Civilite : $civilite \n Nom : $nom \n adresse : $adresse \n code postal :  $codepostal \n ville : $ville \n pays : $pays \n interets : $sqlinterets \n commentaires :  $comments";



$retval mail("jacques.guitard@wanadoo.fr",$sujet,$message,$headers);
}
// si le mail a bien été envoyé...
if ($retval) echo $msg_ok;
?>


Encore bravo pour votre travail et votre disponibilté.
Jacques
« Modifié: 28 Mai 2007 à 15:07:53 par damien »
Cordialement.
Jacghit

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #88 le: 28 Mai 2007 à 15:06:56 »
Période de location du "Champ date " au "Champ date" à remplir par les utilisateurs.
En varchar, ce sera correct, ou faut-il quelque chose d'autre si c'est pour insérer des formats de date.
Poky

Dans MySQL il y a des types prévus pour les dates qui feraient "plus propres". Même si en varchar ça fonctionnera, mais tu ne pourras pas utiliser certaines fonctions de date sql et tu risques de prendre plus d'octets qu'il y en a besoin.
Les types qui existent sont "date" pour une date au format "2007-05-28", et datetime pour stocker l'heure aussi, format : "2007-05-28 14:48:00"
Cordialement,
Damien

Tutoriels informatique

Damien

  • Rédacteur Admin
  • Intarissable
  • *****
  • Messages: 2988
  • Points gagnés: 7
    • Voir le profil
    • aide informatique
Re : Re : Faire un formulaire HTML, CSS, PHP (1 sur 3)
« Réponse #89 le: 28 Mai 2007 à 15:18:01 »
Bonjour jacghit et bienvenue sur le forum,

Mon soucis est le suivant, je suis dans l'incapacité d'envoyer les données vers mon adresse email (FAI = wanadoo).

Votre code a l'air presque bon, il manque juste des "define" je pense. Je m'explique : dans l'en-tête du mail vous avez les constantes "EXPEDITEUR_NOM" et "EXPEDITEUR_EMAIL" qui ne sont définies nul part donc le système ne sait pas quel est l'expéditeur (son et son adresse email).
Pour régler le problème vous pouvez soit définir ceux-ci tout en haut de votre code en ajoutant :

define('EXPEDITEUR_NOM','Formulaire de mon site');
define('EXPEDITEUR_EMAIL','contact@monsite.com');

Le problème en faisant ça, c'est que vous ne pourrez pas répondre à la personne qui a remplit le formulaire parce que l'adresse email de l'expéditeur sera toujours la même (contact@monsite.com sur mon exemple).

Pour avoir l'email et le nom de la personne qui a remplit le formulaire, il faut faire comme dans le 3. du tutoriel Formulaire PHP et envoi par email et donc dans votre code remplacez :

// Informations d'entête du mail:
$headers  ="MIME-Version: 1.0\r\n";
$headers .='From: ' . EXPEDITEUR_NOM;
$headers .=' <' . EXPEDITEUR_EMAIL . ">\r\n";
$headers .='Reply-To: '. EXPEDITEUR_EMAIL ."\r\n";
$headers .='Content-Type: text/plain; ';
$headers .='charset="iso-8859-1"'."\r\n";
$headers .="Content-Transfer-Encoding: 8bit\r\n";
$headers .='X-Mailer:PHP/' . phpversion() . "\r\n";

Par :

//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
Cordialement,
Damien

Tutoriels informatique