8796 sujets

Développement web côté serveur, CMS

Bonjour,

J’ai deux page index.html et contact.php, quand je vais sur la page .php je réécris l’url en .html

Mais quand je suis sur la page contact.php (contact.html) et que je clique sur le bouton envois du formulaire, l’url redevient .php



session_start();
header('Location: '.htmlspecialchars($_SERVER['PHP_SELF']));


dans mon .htacces :
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^contact\.html$  /dossier/contact.php [L]

Comment faire pour que la page garde l’extension .html, lors de l'envoi du formulaire?
Modifié par 3arly3F (30 Aug 2010 - 16:42)
Si tu arrives sur une certaine page lors de l'envoi d'un formulaire, c'est parce que c'est toi qui l'a demandé...

L'attribut "action" consiste à donner l'adresse de la page vers laquelle le formulaire sera transmis. A toi de l'adapter pour y mettre "contact.html" au lieu de "contact.php"
J'suis pas sûr de comprendre ce que t'essais de faire avec ce code :
session_start(); 
header('Location: '.htmlspecialchars($_SERVER['PHP_SELF']));
..mais je doute que ca ait un rapport avec ton url rewriting.

Pour le reste tu dis "quand je vais sur la page .php je réécris l’url en .html" c'est incorrect, l'url rewriting c'est plutot : quand je demande une page .html le serveur va chercher une page .php, ...c'est pas pareil.
Dans ton code :
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^contact\.html$  /dossier/contact.php [L]

Ca veut dire que quand on demande [i]contact.html
le serveur va chercher /dossier/contact.php. Mais ton navigateur lui ne voit rien de tout ça.

Donc verifie que que ta balise form est ecrite comme ça : <form action="contact.html" ...>...</form>.

[/i]
Modifié par dhjapan (30 Aug 2010 - 17:50)
Non, je m'explique mal.

je ne redirige pas la page du formulaire vers une autre page, exemple du code de la page de contact :
<?php 
session_start(); // Uniquement pour afficher -éventuellement- les infos du mail qui a été envoyé 
 
// Initialisation ou récupération des variables 
$email = !empty($_POST['email']) ? trim($_POST['email']) : ''; 
$message = !empty($_POST['message']) ? trim($_POST['message']) : ''; 
 
$erreurs = array(); 
 
function VerifierAdresseMail($mail)   
{   
   $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';   
   if(preg_match($Syntaxe,$mail))   
      return true;   
   else   
     return false;   
} 
 
if($_SERVER['REQUEST_METHOD']=='POST') { 
    // email obligatoire 
    if(empty($email)) { 
        $erreurs[] = 'Email obligatoire.'; 
    } else if(!VerifierAdresseMail($email)) { 
        $erreurs[] = 'Email invalide.'; 
    } 
    // message obligatoire 
    if(empty($message)) { 
        $erreurs[] = 'Message obligatoire.'; 
    } 
    // Aucune erreur... 
    if(empty($erreurs)) { 
        // envoi du mail... 
        $_SESSION['email'] = $email; 
        $_SESSION['message'] = $message; 
        header('Location: '.htmlspecialchars($_SERVER['PHP_SELF'])); // Redirection vers la même page 
        exit(); 
    } 
} 
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
<style type="text/css" media="screen"> 
.alerte { 
    color: #FF0033; 
    font-weight: bold; 
} 
</style> 
</head> 
<body> 
<?php 
if(!empty($erreurs)) { 
    foreach($erreurs as $erreur) { 
        echo '<p class="alerte">'.$erreur."</p>\n"; 
    } 
} 
?> 
<?php if(!empty($_SESSION['email'])) : ?> 
<p>Message envoyé :</p> 
<p><strong>Email :</strong> <?php echo htmlspecialchars($_SESSION['email']); ?></p> 
<p><strong>Message :</strong> <?php echo nl2br(htmlspecialchars($_SESSION['email'])); ?></p> 
<?php 
unset($_SESSION['email']); 
unset($_SESSION['message']); 
 
else: 
?> 
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'] ?>">
	    Email: (pflichtfeld)<br/>
<input type="text" name="email" value="<?php echo $email ?>" /><br/>
  Nachricht: (pflichtfeld)<br/>
		
		<textarea rows="10" cols="50" name="message"><?php echo $message ?></textarea><br/>
		<input type="submit" value="Senden" />
	</form>
<?php endif; ?> 
</body> 
</html>
C'est
<?php echo $_SERVER['SCRIPT_NAME'] ?>
qui te retourne ta page en .php .. il faudrait que tu mettes l'url de ta page en dur.
Oui dans les cas de non validation sa fonctionne, mais si le formulaire est rempli correctement il me reste le problème du renvois des informations :
<p>Message envoyé :</p>  
<p><strong>Email :</strong> <?php echo htmlspecialchars($_SESSION['email']); ?></p>  
<p><strong>Message :</strong> <?php echo nl2br(htmlspecialchars($_SESSION['email'])); ?></p>  
<?php  
unset($_SESSION['email']);  
unset($_SESSION['message']); 

J'ai en tout 6 page 2FR, 2DE, 2EN, et toutes avec .html, sauf le formulaire validé qui me renvois le .php, j'ai une redirection selon la langue du navigateur mais sa n'influence pas l'URL Rewriting.
dhjapan a écrit :
C'est
<?php echo $_SERVER['SCRIPT_NAME'] ?>
qui te retourne ta page en .php .. il faudrait que tu mettes l'url de ta page en dur.
Ben htmlspecialchars($_SERVER['PHP_SELF']) aussi même si c'est plus simple de mettre $_SERVER['SCRIPT_NAME'].

Et si ce bout de code est inclus dans toutes les pages il ne faut pas mettre l'url en dur.

@3arly3F > pas sûr d'avoir tout compris mais si tu as besoin de récupérer la valeur qui est dans la barre d''adresse tu peux faire :
$parse_url = parse_url($_SERVER['REQUEST_URI']);
$href = $parse_url['path'];
Heyoan a écrit :


@3arly3F > pas sûr d'avoir tout compris mais si tu as besoin de récupérer la valeur qui est dans la barre d''adresse tu peux faire :
$parse_url = parse_url($_SERVER['REQUEST_URI']);
$href = $parse_url['path'];


Olà, Oula Smiley eek

Je comprend pas la marche à suivre, si tu pouvais développer, histoire que je comprenne ce que je fais Smiley lol
$_SERVER['SCRIPT_NAME'] et $_SERVER['PHP_SELF'] retournent le nom de la page en cours alors que tu veux récupérer ce qui est dans l'URL... ce que fait mon code. Il suffit ensuite de faire
header( 'Location: '. $href );