Travail sur les formulaires (N°4) Associé à un aller/retour sur Python !! :

Fonctionnalités : Si le formulaire est partiellement rempli, les champs remplis restent et l'on demande les autres ;
Si on clique sur effacer, tous les champs s'effacent ;
Uniquement lorsque les 3 champs requis sont remplis, le message apparait.

Nom : *
@mail : *
Site Web :
Commentaire :
Genre : Féminin Masculin Autre *

---------------------------------------------------------
Voici du code php intervenant dans ce visuel :

Toutes les balises entrantes ont été remplacées par un # : Source : https://www.w3schools.com/php/php_form_url_email.asp

Particularité : 1 variable revenant du formulaire PHP est traitée en Python puis revient en PHP !!
Re-définition des variables reinit à zéro et FormOk à 1 : Soit, par défaut, on n'a pas appuyé sur le bouton Effacer et le formulaire est OK
#?php
$reinit=0;
$FormOk = 1;
Test si le bouton Effacer a été activé en méthode POST avec le name s1
if(isset($_POST['s1']))
{
$reinit=1; La variable globale $reinit est placée à 1 ce qui effacera localement dans le formulaire toutes les variables globales retenues.
}
Toutes variables envoyées en méthodes POST sont préalablement testées si elles sont vides puis traitées par notre méthode test_input()
enfin elles sont testées si elles contiennent quelques caractéristiques propres
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$FormOk = 1; Au préalable, le formulaire est bon..
if (empty($_POST['name'])) { On teste si la variable envoyée en POST est vide
$nameErr = "Vous devez écrire un nom "; On enregistre chaque message d'erreur si la variable postée est vide
$FormOk = 0; Comme la variable postée est vide, alors le formulaire n'est plus bon et le message n'apparaîtra pas.
} else {
$name = test_input($_POST["name"]); La variable est envoyée en test_input (vérifier absence de balises malveillantes..), puis retour,
Puis, on vérifie que le nom contient uniquement des lettres et des espaces.
if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
$nameErr = "Seules des lettres et des espaces sont autorisées."; Dans le cas contraire, on enregistre le message d'erreur.
$FormOk = 0; Dès lors, le formulaire n'est pas bon et le message n'apparaîtra pas.
}
}
if (empty($_POST["email"])) {
$emailErr = "Vous devez écrire un mail valide : ";
$FormOk = 0;
} else {
$email = test_input($_POST["email"]);
On vérifie que le mail est bien écrit avec la méthode filter_var() et le !
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "@mail non valide !";
$FormOk = 0;
}
}
if (empty($_POST["website"])) {
$rien = 2;
} else {
$website = test_input($_POST["website"]);
On vérifie si la syntaxe de l'URL est valide (permet des slashes dans l'URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "URL non valide !";
$FormOk = 0;
}
}
if (empty($_POST["comment"])) {
$rien = 2;
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Vous devez signifier votre genre : ";
$FormOk = 0;
} else {
$gender = test_input($_POST["gender"]);
}
if ($FormOk == 1 && $reinit !=1) { C'est ici que l'on teste si le formulaire envoyé en Post est validé et que le bouton Effacer n'est pas activé..
Seulement dans ces 2 cas, le message est affiché !
echo "Bonjour " .$_POST["name"] ."";
echo "Un @mail vous a été adressé à cette adresse : " . $_POST["email"] ;
echo "";
echo "Voici une transformation d'informations revenant d'un script python :";
$command = escapeshellcmd('python Pythonphp2.py ' . $name );
$output = shell_exec($command);
echo $output;
} else {
$FormOk = 0;
}
}
Fonction test_input()
function test_input($data) {
$data = trim($data); Retire les caractères non nécessaires (extra espace, tab, nouvelles lignes)
$data = stripslashes($data); Retire les antislashes.
$data = htmlspecialchars($data); Retire les caractères spéciaux comme les balises.
return $data;
}
?>
#h2>#u>Travail sur les formulaires : N°4 en HTML/PHP :
#h4>#i>#span style="color:DodgerBlue";>#u>Fonctionnalités : Si le formulaire est partiellement rempli, les champs remplis restent et l'on demande les autres ;
Si on clique sur effacer, tous les champs s'effacent ;
Uniquement lorsque les 3 champs #span style="color:Red";>requis sont remplis, le message apparait.

#form action="#?php echo htmlspecialchars($_SERVEUR['PHP_SELF']);?>" method="post" >Création du formulaire en méthode Post avec envoie sur la même page.

Nom : #input type="text" name="name" value="#?php
if ($reinit==1) {
$name = "";
$nameErr = "";
} else {
echo $name;
}
?>" > * #?php echo $nameErr;?>

@mail : #input type="text" name="email" value="#?php
if ($reinit==1) {
$email = "";
$emailErr = "";
} else {
echo $email;
}
?>" > * #?php echo $emailErr;?>

Site Web : #input type="text" name="website" value="#?php
if ($reinit==1) {
$website = "";
} else {
echo $website;
}
?>">

Commentaire : #textarea name="comment" rows="5" cols="40" >#?php
if ($reinit==1) {
$comment = "";
} else {
echo $comment;
}
?>#/textarea>

Genre : #input type="radio" name="gender" value="female" >Féminin
#input type="radio" name="gender" value="male" >Masculin
#input type="radio" name="gender" value="other">Autre * #?php
if ($reinit==1) {
$gender = "";
$genderErr = "";
} else {
echo $genderErr;
}
?>
#?php $reinit=0; ?>
#input type="submit">

#button type="submit" name="s1">Effacer
#/form>

Script Python !! : Pythonphp2.py (placé dans le même dossier que le fichier PHP)

#!/usr/bin/env python
import sys
name = sys.argv[1]
nam = []
nom=""
len_name=len(name)
for i in range(0,len_name):
nam.append(name[i])
nam.reverse()
for i in range(0,len_name):
nom=nom+nam[i]
print("coucou ",nom," !.. (en Verlan Python)")