Page 1 sur 1

Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 09:35
par diomos
Bonjour à tous,

Dans un formulaire de contact avec captcha, lors du lancement de la page initiale, lorsque je clique contact, en local, la captcha n'affichait rien, ni en local et ni en ligne !
J'ai modifié le chemin d'accès qui est maintenant absolue, mais le problème reste le même .
<h3>Code anti-spams</h3>
						<img src="http://qi98.free.fr//pages/contact/captcha.php"><br>
						<input type="text" name="captcha" style=""><br>
						<p>Tous les champs avec une <strong>*</strong> sont obligatoires</p>

Mais il y a d'important aussi,, c'est qu'aucune vérification des champ n'est faite, et je ne sais pas comment faire ! :oops:

Pour ce formulaire, il est conseillé de mettre dans "entete_inc.php" (header)
<?php
session_start();
?>
J'ai lu sur https://www.php.net/manual/fr/function. ... -start.php à quoi servait différentes session, heu ! :( pour tout vous avouer, j'ai pas trop compris son utilisation !

C'est nouveau pour moi comme code, et je me demande si c'est vraiment nécessaire , :?
<?php /* contact.php */ ?>
(...)
				<form method="POST" action="?page=verification">

					<div align="left">Votre nom : *</div>
						<input type="text" name="nom" id="nom" placeholder="Votre Nom">
					<br><br>

					<div align="left">Votre mail : *</div>
						<input type="email" name="email" id="email" placeholder="Votre Email">
					<br><br>

					<div align="left">Sujet : *</div>
						<input type="text" name="sujet" id="sujet" placeholder="Quel est votre sujet ?">
					<br><br>

					<div align="left">Message : *</div>
						<textarea id="message" name="message" rows="5" cols="33" placeholder="Votre Message"></textarea>
					<br><br>

						<h3>Code anti-spams</h3>
						<img src="http://qi98.free.fr//pages/contact/captcha.php"><br>
						<input type="text" name="captcha" style=""><br>
						<p>Tous les champs avec une <strong>*</strong> sont obligatoires</p>

					<p><input type="submit" value="Envoyez"></p>

				</form>
(...)
Et voici le code de vérification.:
<?php 
	session_start();
	$nom = utf8_decode($_POST['nom']);
	$mail = ($_POST['email']);
	$subject = utf8_decode($_POST['sujet']);
	$message = utf8_decode($_POST['message']);
	$headers = 'From: '.$nom.'<'.$mail.'>'."\r\n";
	$headers .= 'Reply-to: <'.$mail.'>'."\r\n";
	$to = 'mon_ [email protected]';
?>

(...)
				<?php
					if($_POST['captcha']==$_SESSION['captcha']){
						mail($to, $subject, $message, $headers);
						echo 'Votre message a bien été envoyé';}
					else{
						echo 'Tous les champs ne sont pas justes. <a href="?page=contact.php">Recommencez</a>';	
					}
				?>
(...)

Aidez-moi SVP !
Merci d'avance.

Re: Pas d'image captcha et pas d'envoi en ligne

Posté : 17 mars 2023, 10:20
par ynx
Bonjour,

Test ton lien http://qi98.free.fr//pages/contact/captcha.php directement dans la barre d'adresse de ton navigateur, tu devrais voir un message d'erreur indiquant que les sessions ne fonctionnent pas.
Chez Free, il faut à priori créer un répertoire sessions à la racine de ton FTP pour utiliser les sessions PHP.

Si le chemin vers le fichier verification.php n'est pas correct, tu peux corriger le chemin dans l'attribut action de la balise form (<form method="POST" action="http://qi98.free.fr/pages/contact/verification.php"> par exemple).

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 12:50
par diomos
Si j'ai mis le chemin absolu, c'est parce qu'il est référencé dans contact.php
h3>Code anti-spams</h3>
						<img src="http://qi98.free.fr/pages/contact/captcha.php"><br> 
						<!--<img src="captcha.php"><br>-->
						<input type="text" name="captcha" style=""><br>
De toute manière, je suis complètement largué parce que c'est une "<img src...> et dedans c'est une extension .PHP, complexe pour moi ! :cry:

Captcha.php est :
<?php
 session_start();

$_SESSION['captcha'] = rand(1000,9999);
/* défini la largeur et la hauteur des chiffres */
$img = imagecreatetruecolor(80,40);
$fill_color = imagecolorallocate($img,230,230,230);
imagefilledrectangle($img,0,0,80,40,$fill_color);

$text_color = imagecolorallocate($img, 10,10,10);
$font = './acidic.ttf';
/* défini la position du texte */
imagettftext($img,23,0,5,30,$text_color,$font,$_SESSION['captcha']);

header("Content-type:image/jpeg");
imagejpeg($img);
imagedestroy($img);

?>
Bon, je vois qu'il y a de nombreux "session_start", mais pourquoi en mettre dans 2 fichiers (entete_inc.php et verification.php), et d'ailleurs, je ne comprends pas du tout son utilité !

Re: Pas d'image captcha et pas d'envoi en ligne

Posté : 17 mars 2023, 12:59
par two3d
Chez Free, il faut à priori créer un répertoire sessions à la racine de ton FTP pour utiliser les sessions PHP.
Crée un dossier sessions, et reviens sur le problème de session_start() si il est encore là.

session_start() sert à sauvegarder en mémoire les $_SESSION

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 13:11
par diomos
J'ai créé le répertoire vide "session" chez Free, mais j'ai toujours le même problème :

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/154/sdb/9/3/qi98/sessions/sess_ae649d87fb9ba53ce154b5b297834a96, O_RDWR) failed: No such file or directory (2) in /mnt/154/sdb/9/3/qi98/entete_inc.php on line 3 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/154/sdb/9/3/qi98/entete_inc.php:3) in /mnt/154/sdb/9/3/qi98/entete_inc.php on line 3 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sdb/9/3/qi98/entete_inc.php:3) in /mnt/154/sdb/9/3/qi98/entete_inc.php on line 3

Et la ligne incriminée :
<?php /* entete_inc.php */ ?>
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
(...)
Peut-être qu'il faille attendre un peu !

Mais au fait, dans le répertoire "session", il faut mettre quelque chose ?

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 13:14
par Saian
seSSionS avec 2 S au milieu et un S à la fin. Il vaut mieux bien sur respecter la casse : sessions.
Rien à mettre dedans c'est php qui va enregistrer les données de $_SESSION dans des fichiers par visiteur (de la forme sess_{session_id} comme on peut le voir dans le message d'erreur qi98/sessions/sess_ae649d87fb9ba53ce154b5b297834a96).

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 13:19
par diomos
Merci Saian, ça va nettement mieux.
two3d avait pourtant bien orthographié, mais j'ai mal lu, faute d'inattention, "mea culpa" !

Merci à tous pour votre aide.

Bonne journée.

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 13:30
par diomos
Là, il y a un autre problème.

Je teste en local et tout va bien, mais en ligne, bien que tous les champs soient complétés, il y a toujours le message d'erreur disant de "recommencer" !
Pourtant, c'est exactement les mêmes fichiers en local et chez Free !

Dois-je attendre un peu ?

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 13:43
par Saian
Soit le captcha ne correspond pas, soit la session ne fonctionne pas mais les messages d'erreurs sont masqués. As-tu vérifié la présence du dossier sessions sur le serveur de prod ? si oui, vérifie les droits sur le répertoire.

PS : je pensais aussi tu peux avoir un problème avec la session si les scripts ne sont pas sur le même serveur.

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 16:07
par diomos
Le captcha fonction bien, puisque qu'en local, il n'y a aucun problème, je pencherais plutôt pour l'histoire de sessions comme tu le note !
Le répertoire "sessions" est bien sur le serveur.
http://qi98.free.fr/temp/droit-acces.jpg
J'ai pas pensé aux droits du répertoire, je vais voir ça !
Pour infos, je ne peux pas modifier "Permissions de groupe" et "permissions publiques", et oui, c'est Free !

C'est toujours pareil. Pourtant, tout est correct.
http://qi98.free.fr/temp/essai-contact.jpg
J'ai du mal à comprendre pourquoi ça va en local et pas en ligne.
http://qi98.free.fr/temp/essai-contact2.jpg

Et non, il n'y a qu'un seul serveur "Free", et tous les scripts y sont !

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 17:13
par diomos
J'ai fait des essais en ligne, et me suis aperçu que quand le captcha n'est pas rempli, le contact est expédié, mais dans le cas ou je complète le captcha, l'envoi ne se fait pas.
<?php
 /*session_start(); */

$_SESSION['captcha'] = rand(1000,9999);
/* défini la largeur et la hauteur des chiffres */
$img = imagecreatetruecolor(80,40);
$fill_color = imagecolorallocate($img,230,230,230);
imagefilledrectangle($img,0,0,80,40,$fill_color);

$text_color = imagecolorallocate($img, 10,10,10);
$font = './acidic.ttf';
/* défini la position du texte */
imagettftext($img,23,0,5,30,$text_color,$font,$_SESSION['captcha']);

header("Content-type:image/jpeg");
imagejpeg($img);
imagedestroy($img);

?>
Est-ce que vous voyez ce qui ne va pas parce que moi, je ne vois rien ?

PS : Avec ou sans session_start, c'est toujours pareil.

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 18:05
par Saian
Le session_start est indispensable. Je penche pour un problème avec la session. C'est dans le script de vérification qu'il faudrait vérifier $_SESSION avant le if($_POST['captcha']==$_SESSION['captcha']){ avec par exemple un var_dump($_SESSION);
Je parie que la session est vide. Si c'est le cas, il y a bien un problème de session.

PS : éventuellement pour vérifier le fichier de session, après le session_start(); tu peux faire un echo session_id(); pour récupérer l'id de session et vérifier que le fichier de session est bien présent dans le répertoire sessions (fichier sess_{session_id}).

Tu peux également contrôler le contenu du fichier qui est en fait un serialize de $_SESSION. Tu peux déserialiser son contenu pour qu'il soit plus lisible avec par exemple le formulaire à cette adresse : https://www.unserialize.com/

Re: Pas d'image captcha et à quoi sert session_start

Posté : 17 mars 2023, 19:17
par diomos
Merci de ces infos Saian, mais pour "unserialize", c'est pas gagné parce que c'est nouveau pour moi et je n'ai jamais confronté à ça.

Pour le captcha, je suis paumé avec "session_start" !
En fait, je ne sais pas vraiment où mettre ça !

C'est un bon conseil de faire un "echo session_id();".
J'ai mis ça dans verification.php, mais quand je veux envoyer un message, j'ai l'erreur
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/154/sdb/9/3/qi98/entete_inc.php:15) in /mnt/154/sdb/9/3/qi98/pages/contact/verification.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sdb/9/3/qi98/entete_inc.php:15) in /mnt/154/sdb/9/3/qi98/pages/contact/verification.php on line 4
1db7ed6e9ab870b3fb58b27ea781f572
C'est pour ça que je te disais que c'est ardu pour moi, je ne sais pas où mettre session_start.

Re: [RESOLU] Pas d'image captcha et à quoi sert session_start

Posté : 18 mars 2023, 15:57
par Saian
Comme précisé dans la doc : Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur.

Hors le message d'erreur indique que la sortie (output) a commencé à la ligne de 15 de entete_inc.php (avant le session_start()).