php Formulaire d'inscription newsletter côté serveur

Ziggy

Membre
Salut à tous,

Dans le cadre de la formation avec FreeCodeCamp on nous demande de créer un formulaire quelconque (en HTML et CSS) pour valider une partie de la certification. Avec le cours qui précédait ça ne m'a pas posé énormément de problème, j'au soumis "mon devoir" et je suis passé aux challenges suivants.

Mais en fait le formulaire est un peu comme une coquille vide puisqu'il n'y a pas de code côté serveur pour réellement soumettre les données renseignées dans le formulaire (avec PHP) et également pour les stocker (avec SQL).

Donc voilà, je voulais m'attaquer à ce challenge perso pour faire réellement fonctionner un formulaire d'abonnement à une newsletter.
Je pense que cela pourrait être un exercice sympa pour débuter en PHP et SQL.
Si des membres du forum veulent m'accompagner ce serait pas mal de réfléchir ensemble à ça et de poster chacun nos idées et nos bouts de codes pour faire avancer le schmilblick, sinon je le ferais en solo mais c'est un peu moins fun dirons nous...

A vos éditeurs les courageux !

ps: si vous voulez je peux partager mon code html/css du formulaire sinon on peut en créer un nouveau ce n'est pas très compliqué ni long à faire.
 

WWWest

Membre
C'est bien cool tout ça ! yule tu dis tout est relatif mais t'es capable de bidouiller un formulaire PHP en quelques heures si j'en crois les horaires de tes 2 messages, sachant que tu es surement aller manger entre-temps ! :)

Si on prend ce bout de code
$name = isset($_POST['name']) ? $_POST['name'] : NULL;
Est-ce que tu pourrais le traduire sommairement ?

isset
Détermine si une variable est déclarée et est différente de NULL. La variable c'est ce qui est entré dans le champ Name du formulaire c'est bien ça ?
Je connais un peu JS et en JS il y a les conditions ternaire et on se sert de ? pour remplacer ELSE, c'est le cas aussi ici ?
 

Wazz9

Membre
Mort de rire !

Sinon dans le code $name = isset($_POST['name']) ? $_POST['name'] : NULL; qu'est-ce qui rend l'entrée obligatoire ?
Parce que si ? c'est ELSE alors cela permet d'avoir le champ NULL et comme dans HTML le champ est required cela ne fait pas un conflit ?

(j'ai bien vérifié et la réponse n'est pas dans ma question, je ne souffre pas de schizophrénie comme @WWideWest !)
 

yule

Membre
@Wazz9 , à ce stade du projet, ce n'est pas le code php présent qui va rendre l'entrée obligatoire mais bien le required dans l'input

Si tu veux effectuer un contrôle php, c'est ainsi qu'il faudrait procéder (simplifié..)

PHP
<php?
if ($name =="") // si le nom est vide....
{      
echo"Pas bien... il manque ton nom"; // Alors affiche ce message
}
else {  // Si le name n'est pas vide
echo" Très bien on peut continuer..."; // affiche ce message puis on continue...
....
}
?>

Le code que tu mentionnes est uniquement présent pour déclarer la variable name envoyée par le visiteur
Si je fais ceci sans le isset : $name = $_POST['name'] ; le résultat est le même concernant la récupération de cette variable mais avec une erreur.. enfin plutôt une notice (voir ci-dessous) Aussi, parce que le code php est exécuté avant le formulaire dans notre exemple. Dès lors , la variable doit être déclarée à vide (La valeur NULL représente une variable sans valeur.)

Notice: Undefined index: name in ................\yule\scriptphp\formulaire\form.php on line 23 (la ligne 23 est le code ci-dessus)

Comme je suis pas un pro, je peux concevoir que je suis pas toujours clair, si je reprends cette partie du code

$name = isset($_POST['name']) ? $_POST['name'] : NULL;

Il est égal à ça
PHP
<?php
    if( isset($_POST['name']) ){
    $name = $_POST['name'];
} else {
    $name = null;
}
?>

Bonne bonne
Yule
NB : J'ai juste remplacer le formulaire html par un php mais en rendant le test online possible
 
Dernière édition:

Wazz9

Membre
Aussi, parce que le code php est exécuté avant le formulaire dans notre exemple. Dès lors , la variable doit être déclarée à vide (La valeur NULL représente une variable sans valeur.)
Ok je crois comprendre, pour ne pas avoir de message/notice d'erreur, et comme le code PHP est interprété en premier, on fait croire à PHP que le champ name est rempli avec la variable NULL. En attendant qu'il reçoive la "vraie" valeur du champ HTML.

PHP est lu en premier par le serveur parce que c'est PHP ou bien parce qu'il est écrit en premier dans form.php ?
 

Jack

Membre
Le serveur PHP va lire le fichier index.php et va interpréter le code PHP avant de le renvoyer vers le navigateur, donc à priori peu importe dans quel ordre le code php est écrit dans le fichier il sera lu en premier.
C'est la même chose avec un fichier html, le serveur lit le fichier html, s'il trouve du code php il renvoie le fichier avec le code php interprété vers le navigateur, s'il ne trouve pas de code php il le renvoie tel quel.
Tout ça si mes souvenirs sont bons...
 

yule

Membre
Ok je crois comprendre, pour ne pas avoir de message/notice d'erreur, et comme le code PHP est interprété en premier, on fait croire à PHP que le champ name est rempli avec la variable NULL. En attendant qu'il reçoive la "vraie" valeur du champ HTML.
Exactement (y)

@Jack , pour moi il y a un ordre, si je déclare les variables à vide avant d'afficher le formulaire, c'est pour éviter une notice dans tous les imput puisque j'y mentionne une valeur (value). Si la valeur est null, il va afficher le placeholder (si j'enlève cette "value", le nom indiqué par le visiteur ne sera jamais affiché)

HTML
<div class="form-group">
        <label id="name-label" for="name">Name</label>
        <input type="text" value="<?php echo $name; ?>" class="form-control" name="name" id="name" placeholder="Enter your name" required>
 </div>

Bonne bonne
Yule
 

Cascadeur

Membre
Salut à tous,

@yule si tu colles ce code juste avant </body>
PHP
<?php
$choix = !empty($_GET['choix']) ? $_GET['choix'] : NULL;

$name = isset($_POST['name']) ? $_POST['name'] : NULL;
$email = isset($_POST['email']) ? $_POST['email'] : NULL;
$age = isset($_POST['age']) ? $_POST['age'] : NULL;
$role = isset($_POST['role']) ? $_POST['role'] : NULL;
$recommend = isset($_POST['recommend']) ? $_POST['recommend'] : NULL;
$mostLike = isset($_POST['mostLike']) ? $_POST['mostLike'] : NULL;
$prefer = isset($_POST['prefer']) ? $_POST['prefer'] : NULL;
$comment = isset($_POST['comment']) ? $_POST['comment'] : NULL;
?>
Tu auras une notice dans chaque input ?
Jack semble dire que de toutes façons, peu importe où se trouve le code php, le serveur le lira en premier.
 

yule

Membre
Pour tester mon explication ci-dessus

Avec la version avant le formulaire

Avec la version après le formulaire

Il faut évidement choisir une sortie HTML de ce test online...
html.png


Bonne bonne

NB: pour apprendre, rien de tel que de mettre en pratique ses questions et ses réponses
 

Jack

Membre
Ouais donc mes souvenirs n'étaient pas bons.
J'étais pourtant certain de la priorisation de lecture des langages par les serveurs.

Donc nouvelle question,
Si on crée 2 fichiers, un form.html et un form.php avec le html qui appelle le php. Comment cela va t-il se passer ? Si le serveur lit le HTML en premier on aura les notices qui s'afficheront non ?

..........C'est tout en écrivant que la mémoire revient... est-ce que justement la priorisation ne s'effectue pas là ? le serveur lit d'abord les fichiers PHP puis les HTML ? :)
Dans le cas d'un fichier .php il lit le contenu dans l'ordre d'écriture.
 

yule

Membre
..........C'est tout en écrivant que la mémoire revient... est-ce que justement la priorisation ne s'effectue pas là ? le serveur lit d'abord les fichiers PHP puis les HTML ? :)
Dans le cas d'un fichier .php il lit le contenu dans l'ordre d'écriture.
Je ne pense pas, il y aura toujours les notices. Je travail uniquement avec des fichiers php, mes includes sont également des fichiers php, je n'ai donc aucune pratique d'ouvrir en cascade avec du php puis du HTML. Comme HTML n'est pas interpréter par le serveur mais par l'explorateur, PHP est forcément priorisé puisque c'est le seul langage serveur dans mon fichier .

Après il me semble que vous allez trop loin, je m'explique. On peut mettre toute la priorisation possible, si des variables doivent être affichées, elles ne peuvent pas être déclarées après leurs affichages, elles doivent bien être envoyées - récupérées . Par contre , si tu n'as pas de variables a afficher, ton code php peut être après le formulaire, c'est pas un pb.

A+
 
Je rappelle qu'un fichier à 99% codé en HTML et avec 1% de code PHP dedans doit avoir l'extension .php sous peine de ne pas être lu par le serveur. Comme le dit yule un fichier HTML est interprété directement par le navigateur sans aucune autre étape.
Un fichier se lit dans le sens du haut vers le bas et de gauche à droite ! 🤪
 

Anthony

Membre
Et donc ? La suite c'est quoi ? Est-ce qu'on essaie de le lier à une base de données pour le faire fonctionner "vraiment" ou bien on en reste là ?
Parce qu'en changeant le HTML et un peu le CSS il pourrait servir au forum plus tard.

Tant qu'à faire.
 

Ziggy

Membre
En tout cas ça a bien avancé et le formulaires et opé côté PHP.
Pour répondre à @Anthony et @Wazz9 on peut aussi chacun l'héberger localement et partager le code qui permet de stocker les données dans la BDD.

Là par contre je ne saurais même pas par où commencer. Est-ce qu'il faut écrire du SQL ? Dans quel fichier ? Ou bien ça reste du PHP qui communique avec la nase de données SQL ? Il n'y a pas une histoire de GET/POST un truc comme ça ?
 

Hamza

Membre
Des structures de contrôle : Imposer des choix aux visiteurs
[*]Créer une table Mysql
[*]Créer des includes pour la connexion à la BDD, éventuellement pour un header et un footer si répétitif (plusieurs pages différentes dans le script)
[*]Ajouter les éléments dans la table
[*]Afficher la liste des inscrits, modifier ou effacer des inscrits etc...
La suite du programme est quelque peu floue...
 

Wazz9

Membre
qui communique avec la nase de données SQL ?
La nase de données je sais pas mais la base de données on peut le faire avec PHP en utilisant la fonction PDO.
Il faut activer l'extension dans le php.ini en fonction du type de BDD (mySQL, Postgres...).

Après avec une ligne de code php on se connecte à la base
PHP
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
?>
 

Ces discussions pourraient vous intéresser...

Bonjour à tous, J'essaie de déployer une application sur mon serveur live via Docker mais j'ai du faire une mauvaise configuration car l'application s'est installé en local. Il y a un fichier à configurer : docker-compose.yml notamment cette section server: image...
Hello, J'ai créé un formulaire avec Bootstrap mais j'ai un problème de mise en forme. Les <input> prennent chacun leur propre ligne alors que j'aimerais que certains soit côte à côte. Je ne parviens pas du tout à faire ce que je veux et je ne trouve rien dans la documentation...
Salut, Je suis en train de tester bootstrap sur mon localhost et j'ai un problème d'affichage. Je m'explique : Je veux afficher 4 colonnes qui contiennent chacune d'entre elles du texte mais j'ai beau chercher je ne comprends pas pourquoi elles s'affichent une au dessus des autres...
Haut