8768 sujets

Développement web côté serveur, CMS

Bonjour,
Je manie à peu près l'html/js/css. Mais je dois faire UNE page en php. Je ne souhaite pas l'apprendre, j'aimerais seulement que vous m'aidiez à écrire le code de cette page php.

1) Peut-on insérer de l'html, du js et/ou du css dans une page .php ? Comment ?

2) Je dois faire un formulaire avec un champ adresse mail et un bouton envoyer. Lorsque l'on clique sur ce dernier, l'adresse mail et l'IP se stockent dans un fichier consultable seulement par moi-même (.ini ou je ne sais quoi...).

Merci pour votre aide, même partielle !
Modérateur
Bonjour,

Tu prends une page en html, tu remplaces dans le nom du fichier l'extention .html par .php, et voilà, t'as une page en php.

Amicalement,
Et comment on fait pour que "lorsque l'on clique sur ce dernier, l'adresse mail et l'IP se stockent dans un fichier consultable seulement par moi-même (.ini ou je ne sais quoi...)." ?
Merci !
Modérateur
Bonjour,

Il faut faire du code php( j'ai hésité à le mettre Smiley cligne ).

1) On suppose que c'est juste un exercice, donc rudimentaire,

2) On suppose que ton formulaire a une balise <input> pour l'email, et que cette balise a un attribut name="email" (c'est ce nom, "email", qui pourrait être n'importe quoi d'autre, qui permettra ensuite de récupérer l'email avec php),

3) On suppose que c'est la même page qui est exécutée quand on valide le formulaire, c'est à dire que la balise <form> n'a pas d'attribut "action" ou que l'attribut "action" a pour valeur l'url de la page du formulaire, et que quand on cliquera sur le bouton d'envoi du formulaire, c'est cette page qui sera ré-affichée. Mais on pourrait, si on le voulait, afficher une autre page (et dans ce cas, on mettrait l'url de cette autre page comme valeur de l'attribut action de la balise <form> du formulaire),

4) On suppose que l'on ne veut pas que les données se retrouve dans l'url. On ajoute donc à la balise <form> l'attribut method="post" (ceci est mieux sécurisé que d'utiliser l'attribut method="get" qui est la valeur par défaut pour les formulaires, et qui aurait pour effet que le serveur rajouterait ici un truc du genre ?email=xxx@yyy.zzz à l'url de la page : éventuellement, tu peux faire le test),

5) En début de page (par exemple juste après <body>, on rajoute quelques lignes de php qui vont :
- récupérer l'IP de l'utilisateur dans $_SERVER['REMOTE_ADDR'] (élément 'REMOTE_ADDR' du tableau php $_SERVER, qui est pré-rempli automatiquement par php)
- récupérer l'email qui sera dans $_POST["email"] s'il existe (élément "email" du tableau php $_POST qui est pré-rempli automatiquement si la page précédente contenait un formulaire qui a été validé par l'utilisateur et qui contenait un input ayant name="email")
- stocker ce qu'on a récupéré dans un fichier nommé "a.txt" (avec la fonction php file_put_contents()).
- afficher dans la page ce qu'on a récupéré juste pour contrôler (via l'instruction php echo).

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Miniform</title>
</head>
<body>
<?php
// on récupère l'IP
$s="IP: ".$_SERVER['REMOTE_ADDR']."\n";
// on récupère l'email
if(isset($_POST["email"])) $s.="Email: ".$_POST["email"];
// on stoke le résultat dans le fichier "a.txt"
file_put_contents("a.txt",$s);
// on affiche le résultat dans la page
echo nl2br($s);
?>
<form method="post">
<input type="text" name="email">
<input type="submit" value="OK">
</form>
</body>
</html>


Amicalement,
@parsimonhi Merci beaucoup !

J'avais quelques autres petites questions :

1) Là, à chaque fois, ça supprime le reste du a.txt. Comment faire pour que les nouvelles données s'ajoutent et ne remplacent pas les précédentes ?

2) Comment ajoute-t-on aussi une variable JS dans le fichier txt ? Quelle est la syntaxe pour rajouter Variable à a.txt ?

3) Je m'éloignes ici un pu du sujet mais j'ai vu sur un site, qu'il donnait la localisation approximative (ville) grâce à l'IP. Est-ce du php ? Comment faire ?

Merci beaucoup !
Modérateur
Bonjour,

js_html a écrit :
1) Là, à chaque fois, ça supprime le reste du a.txt. Comment faire pour que les nouvelles données s'ajoutent et ne remplacent pas les précédentes ?

On rajoute FILE_APPEND comme paramètre de la fonction file_put_contents.

$s="IP: ".$_SERVER['REMOTE_ADDR']."\n";
if(isset($_POST["email"])) $s.="Email: ".$_POST["email"]."\n";
file_put_contents("a.txt",$s, FILE_APPEND);
echo nl2br($s);


js_html a écrit :
2) Comment ajoute-t-on aussi une variable JS dans le fichier txt ? Quelle est la syntaxe pour rajouter Variable à a.txt ?

Je ne comprends pas la question ! Dans ton fichier, il n'y aura que du texte. Tu y mets ce que tu veux, mais ce ne sera pas "variable". Une variable javascript n'existe que dans la page où elle est déclarée.

Tu peux par contre rajouter automatiquement la valeur d'une variable javascript à un instant donné dans ton fichier via ton formulaire. Pour cela, on peut ajouter un <input> de type "hidden" à ton formulaire.

Exemple : page complète dans laquelle on rajoute la date du jour à un fichier. La date est calculée en javascript et se trouve dans un variable v1. On met ensuite v1 comme valeur de l'input du formulaire de nom "date", et enfin, la valeur de cet input sera transmise à php avec toutes les autres données lors de la validation du formulaire. Php récupère enfin cette valeur et la met dans le fichier.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mini form</title>
</head>
<body>
<?php
$s="IP: ".$_SERVER['REMOTE_ADDR']."\n";
if(isset($_POST["email"])) $s.="Email: ".$_POST["email"]."\n";
if(isset($_POST["date"])) $s.="Date: ".$_POST["date"]."\n";
file_put_contents("a.txt",$s, FILE_APPEND);
echo nl2br($s);
?>
<form method="post">
<input type="text" name="email">
<input type="hidden" name="date">
<input type="submit" value="OK">
</form>
<script>
var d=new Date();
var v1=d.getDate()+"-"+(d.getMonth()+1)+"-"+d.getFullYear();
document.querySelector('[name="date"]').value=v1;
</script>
</body>
</html>


js_html a écrit :
3) Je m'éloignes ici un pu du sujet mais j'ai vu sur un site, qu'il donnait la localisation approximative (ville) grâce à l'IP. Est-ce du php ? Comment faire ?

Il faut utiliser une base de données du genre de MaxMind.

Voir par exemple http://www.finalclap.com/faq/8-php-geolocalisation-ip (mais je n'ai jamais testé ça).

Amicalement,
1) FILE_APPEND : Merci !

2) Je voulais dire que dans mon fichier .php, j'ai par exemple <script>var x="y"</script>.
Comment faire pour mettre la valeur de y, lorsque l'on clique sur le bouton, dans a.txt?
Mais je ne sais pas si je me suis mieux fait comprendre comme ça.

Après, un champ de type hidden, je n'y avait pas pensé, c'est une bonne idée si on ne peut pas sélectionner directement une variable JS en php.

D'ailleurs, du coup, j'ai une autre question : faut-il mieux en css mettre hidden/visibility ou inline-block/none ? Je sais que là ce n'est pas le cas car c'est le type et non le style mais ça me fait repenser à cette question.

3) Je comprend pas bien ce qu'il faut mettre comme code.

Merci beaucoup !
Modérateur
Bonjour,
js_html a écrit :
Je voulais dire que dans mon fichier .php, j'ai par exemple <script>var x="y"</script>.
Comment faire pour mettre la valeur de y, lorsque l'on clique sur le bouton, dans a.txt?
Mais je ne sais pas si je me suis mieux fait comprendre comme ça.

C'est justement à cette question que j'ai répondu préventivement dans mon post précédent.

js_html a écrit :
Après, un champ de type hidden, je n'y avait pas pensé, c'est une bonne idée si on ne peut pas sélectionner directement une variable JS en php.

Le code javascript est exécuté par l'ordinateur de l'utilisateur lorsque l'internaute visite la page avec son navigateur. Le php, lui, est exécuté par le serveur avant d'envoyer une page à l'utilisateur.

Le code javascript situé dans la page de l'utilisateur ne peut pas "écrire" directement dans a.txt qui se trouve sur le serveur. Il ne peut que :

- soit, comme je l'ai proposé, stocker la variable dans un <input> d'un formulaire avec javascript, et à la validation du formulaire, ce qui est stocké dans le formulaire est conservé dans les tuyaux du web jusqu'à l'exécution de la page suivante, qui commence par l'exécution du php qui s'y trouve. Cette exécution est faite sur le serveur, et c'est à ce moment là qu'on peut écrire dans a.txt.

- soit éventuellement, dans le code javascript, on peut faire une requête en ajax, qui peut envoyer des données au serveur (via un mécanisme similaire aux formulaire en fait), et déclencher l'exécution d'un script php sur le serveur, qui va aller écrire dans a.txt.

js_html a écrit :
D'ailleurs, du coup, j'ai une autre question : faut-il mieux en css mettre hidden/visibility ou inline-block/none ? Je sais que là ce n'est pas le cas car c'est le type et non le style mais ça me fait repenser à cette question.

Il vaut mieux faire du code qui marche ! Et ça dépend complètement du contexte et de ce qu'on veut faire.

js_html a écrit :
Je comprend pas bien ce qu'il faut mettre comme code.

Tout est expliqué dans le lien que j'ai donné. Mais tu vas souffrir pour y arriver, c'est certain. Il n'y a pas d'autre choix ! Smiley cligne

Amicalement,
Re-bonjour,
Merci !

Dans le code suivant où "sites" obtient une valeur grâce à "$("#sites").val(sites)" (la variable sites existe aussi)

        <form method="post" id="add">
            <input type="email" name="email" required>
            <input type="submit" value="OK">
        </form>
		<input type="hidden" id="sites" name="sites">

        <?php
            $s="IP: ".$_SERVER['REMOTE_ADDR']." / ";
            if(isset($_POST["email"])) $s.="Email: ".$_POST["email"]." / ";
            if(isset($_POST["sites"])) $s.="Sites: ".$_POST["sites"]."\n";
            file_put_contents("sites.txt",$s,FILE_APPEND);
        ?>
, pourquoi, j’obtiens dans sites.txt : IP: 000.00.000.00 / IP: 000.00.000.00 / Email: adresse@mail.com /
? L'IP est bonne mais en double, l'email est bon et ça ne rentre rien dans "sites". L'erreur est-elle là ou dans le reste du code qui n'est pas ici ?
Comment remédier à ces deux erreurs ?
Merci !
Modérateur
Bonjour,

1) dans ton fichier sites.txt, l'IP est enregistré une première fois lorsque tu affiches ton formulaire pour la première fois avant même de l'avoir validé (et lors de ce premier tour, $_POST["email"] et $_POST["sites"] ne contiennent rien puisque tu n'as pas encore fait de validation de formulaire)

2) après avoir validé ton formulaire, la page est ré-affichée une 2e fois. C'est à ce moment là que l'IP est enregistrée un 2e fois, suivi de l'email. Par contre $_POST["sites"] est toujours vide puisque tu n'as pas d'input ayant name="sites" dans ton formulaire (tu l'as mis après </form>, il faut qu'il soit quelque part entre <form> et </form> pour être pris en compte).

Amicalement,
Merci beaucoup !
Donc, j'ai

<form method="post" id="add">
      <input type="email" name="email" required>
      <input type="submit" value="OK">
      <input type="hidden" id="sites" name="sites">
</form>


<?php
      $s="";
      if(isset($_POST["email"])) $s="IP: ".$_SERVER['REMOTE_ADDR']." / Email: ".$_POST["email"]." / Sites: ".$_POST["sites"]."\n";
      file_put_contents("sites.txt",$s,FILE_APPEND);
?>
Meilleure solution