J'ai un soucis avec mon code qui passe bien en local mais pas sur mon serveur OVH.
J'ai fait un site dans lequel on peut s'inscrire.
Voici la page inscription.php:
<?php require_once('Connections/memooh.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_memooh, $memooh);
$query_Rs_cnx = "SELECT pseudo, passe, statut FROM mem_membre";
$Rs_cnx = mysql_query($query_Rs_cnx, $memooh) or die(mysql_error());
$row_Rs_cnx = mysql_fetch_assoc($Rs_cnx);
$totalRows_Rs_cnx = mysql_num_rows($Rs_cnx);
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['pseudo'])) {
$loginUsername=$_POST['pseudo'];
$password2=$_POST['passe'];
$password = md5("8j1W7WYPo6frEh4".$_POST['passe']);
$MM_fldUserAuthorization = "statut";
$MM_redirectLoginSuccess = "page_membre.php";
$MM_redirectLoginFailed = "echoue.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_memooh, $memooh);
$LoginRS__query=sprintf("SELECT pseudo, passe, statut FROM mem_membre WHERE pseudo=%s AND passe=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$LoginRS = mysql_query($LoginRS__query, $memooh) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = mysql_result($LoginRS,0,'statut');
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/espace_membre.dwt.php" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Inscription</title>
<!-- InstanceEndEditable -->
<link href="css/mac.css" rel="stylesheet" type="text/css" />
<!-- InstanceBeginEditable name="head" -->
<!--**SCRIPT AJAX VERIF SPEUDO **-->
<script type="text/javascript">
<!--
function writediv(texte)
{
document.getElementById('pseudobox').innerHTML = texte;
}
function verifPseudo(pseudo)
{
if(pseudo != '')
{
if(pseudo.length<2)
writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop court</span>');
else if(pseudo.length>30)
writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop long</span>');
else if(texte = file('verifpseudo.php?pseudo='+escape(pseudo)))
{
if(texte == 1)
writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est deja pris</span>');
else if(texte == 2)
writediv('<span style="color:#1A7917"><b>'+pseudo+' :</b> ce pseudo est libre</span>');
else
writediv(texte);
}
}
}
function file(fichier)
{
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) return(xhr_object.responseText);
else return(false);
}
//-->
</script>
<!-- InstanceEndEditable -->
</head>
<body>
<div id="topDiv"><img src="images/logo.png" /></div>
<!-- InstanceBeginEditable name="EditNav" -->
<div id="navigation">
<!--debut navigation --><?php include("haut2.php"); ?>
<!--debut navigation -->
</div>
<!--fin navigation -->
<!-- InstanceEndEditable -->
<div id="outerWrapper2"><!--debut outerWrapper2 -->
<div id="contentWrapper2"><!-- debut contentWrapper2 --><!-- InstanceBeginEditable name="EditColonneGauche" -->
<div id="leftColumn1">
<!--debut gauche -->
</div>
<!--fin gauche -->
<!-- InstanceEndEditable --><!-- InstanceBeginEditable name="EditCentre" -->
<div id="content2">
<!--debut content -->
<?php
$time = time();
$ip = $_SERVER["REMOTE_ADDR"];
?>
<form action="traitement.php" method="post" name="form1" id="form1">
<table width="600" border="1" class="tblrepeat">
<tr>
<th>Pseudo :</th>
<th><input type="text" name="pseudo" id="pseudo" onkeyup="verifPseudo(this.value)" style="text-transform:capitalize;" /></th>
</tr>
<tr>
<th>Nom :</th>
<th><input type="text" name="nom" id="nom" style="text-transform:capitalize;" /></th>
</tr>
<tr>
<th>Prénom :</th>
<th><input type="text" name="prenom" id="prenom" style="text-transform:capitalize;" /></th>
</tr>
<tr>
<th>Mot de passe :</th>
<th><input type="password" name="password" id="password" /></th>
</tr>
<tr>
<th>Confirmer le mot de passe :</th>
<th><input type="password" name="confirm-password" id="confirm-password" /></th>
</tr>
<tr>
<th>E-mail :</th>
<th><input type="text" name="email" id="email" /></th>
</tr>
<tr>
<th>Vous êtes :</th>
<th>Homme : <input type="radio" name="sexe" value="Homme" />
Femme : <input type="radio" name="sexe" value="Femme" /></th>
</tr>
<tr>
<th>Autoriser de voir votre email :</th>
<th>Oui : <input type="radio" name="autemail" value="oui" />
Non : <input type="radio" name="autemail" value="non" /></th>
</tr>
<tr>
<th>Code de sécurité :</th>
<th><input type="text" name="verif" size="10" maxlength="6" /> <img src="captcha.php" alt="captcha" id="captcha" align="absmiddle" />
<!-- (JavaScript) Changer d'image à la volée si elle est illisible -->
<a style="cursor:pointer" onClick="document.images.captcha.src='captcha.php?id='+Math.round(Math.random(0)*1000)+1">Actualisé</a>
</th>
</tr>
<tr>
<th><input type="reset" value="Recommencer" /></th>
<th><input type="submit" title="Effectuer l'inscription" name="Effectuer l'inscription" value="Effectuer l'inscription" /></th></th>
</tr>
</table>
<input type="hidden" name="statut" id="statut" value="membre" />
<input type="hidden" name="time" id="time" value="<?php echo $time; ?>" />
<input type="hidden" name="ip" id="ip" value="<?php echo $ip; ?>" />
</form>
</div>
<!--fin content -->
<!-- InstanceEndEditable --><br class="clearFloat2" />
</div><!-- fin contentWrapper2 -->
<div id="footer2">
<p>© Copyright Goleobox © <a href="# target="_blank"></a> Tous droit réservés</p>
</div>
</div><!--fin outerWrapper2 -->
</body>
<script type="text/javascript">
<!--
function AjoutFavoris(theURL, theTITLE) {
window.external.AddFavorite(theURL, theTITLE);
}
-->
</script>
<!-- InstanceEnd --></html>
Comme on peut le voir, le formulaire renvoi vers traitement.php dont voici le code:<?php session_start(); //on initialise la session
require_once('Connections/memooh.php');
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_memooh, $memooh);
$query_Rs_cnx = "SELECT pseudo, passe, statut FROM mem_membre";
$Rs_cnx = mysql_query($query_Rs_cnx, $memooh) or die(mysql_error());
$row_Rs_cnx = mysql_fetch_assoc($Rs_cnx);
$totalRows_Rs_cnx = mysql_num_rows($Rs_cnx);
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
if (isset($_POST['pseudo'])) {
$loginUsername=$_POST['pseudo'];
$password2=$_POST['passe'];
$password = md5("8j1W7WYPo6frEh4".$_POST['passe']);
$MM_fldUserAuthorization = "statut";
$MM_redirectLoginSuccess = "page_membre.php";
$MM_redirectLoginFailed = "echoue.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_memooh, $memooh);
$LoginRS__query=sprintf("SELECT pseudo, passe, statut FROM mem_membre WHERE pseudo=%s AND passe=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
$LoginRS = mysql_query($LoginRS__query, $memooh) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = mysql_result($LoginRS,0,'statut');
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/espace_membre.dwt.php" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Document sans titre</title>
<!-- InstanceEndEditable -->
<link href="css/mac.css" rel="stylesheet" type="text/css" />
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
</head>
<body>
<div id="topDiv"><img src="images/logo.png" /></div>
<!-- InstanceBeginEditable name="EditNav" -->
<div id="navigation">
<!--debut navigation -->
<?php include("haut2.php"); ?>
</div>
<!--fin navigation -->
<!-- InstanceEndEditable -->
<div id="outerWrapper2"><!--debut outerWrapper2 -->
<div id="contentWrapper2"><!-- debut contentWrapper2 --><!-- InstanceBeginEditable name="EditColonneGauche" -->
<div id="leftColumn1">
<!--debut gauche -->
</div>
<!--fin gauche -->
<!-- InstanceEndEditable --><!-- InstanceBeginEditable name="EditCentre" -->
<div id="content2">
<!--debut content -->
<?php
$msg_erreur = "<img src='images/sitemenu/erreur.png' border='0' align='absmiddle'> <span class='redBold'> Les champs suivants présentent les erreurs suivantes :</span><br/><br/>";
$msg_ok = "<img src='images/sitemenu/yes.png' border='0' align='absmiddle'> <span class='blueBold'>Votre inscription a bien été prise en compte.<br><a href='index.php'>Cliquez ici pour vous authentifier</a> <!-- Votre compte devra être validé par l'administrateur--></span>";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE',$_POST["email"]);
define('MAIL_SUJET','Bienvenue sur Memooh');
// On définit chaque champ du formulaire.
if(isset($_POST['pseudo'])) $pseudo = $_POST["pseudo"];
if(isset($_POST['nom'])) $nom = $_POST["nom"];
if(isset($_POST['prenom'])) $prenom = $_POST["prenom"];
if(isset($_POST['confirm-password'])) $passe = $_POST["confirm-password"];
if(isset($_POST['statut'])) $statut = $_POST["statut"];
if(isset($_POST['email'])) $email = $_POST["email"];
if(isset($_POST['autemail'])) $autemail = $_POST["autemail"];
if(isset($_POST['sexe'])) $sexe = $_POST["sexe"];
if(isset($_POST['time'])) $time = $_POST["time"];
if(isset($_POST['ip'])) $ip = $_POST["ip"];
/* on vérifie que le code est toujours mémorisé en session et qu'il fait 5 caractères */
/*print_r($_SESSION);
echo('<br />');
print_r($_SESSION['code']);
echo('<br />');
print_r(md5($_POST['verif'])); */
if(!isset($_SESSION['captcha'])) die("Erreur !");
// on vérifie que la code entré est valide
if($_SESSION['captcha'] != md5($_POST['verif'])) die("<span class='redBold'><img src='images/sitemenu/erreur.png' border='0' align='absmiddle'> Erreur : le code de protection est invalide !</span><br>");
// vérification des champs
if (empty($_POST['pseudo']))
$message .= "<span class='redBold'>Vous devez saisir un pseudo</span><br/>";
if (empty($_POST['nom']))
$message .= "<span class='redBold'>Vous devez saisir votre nom</span><br/>";
if (empty($_POST['prenom']))
$message .= "<span class='redBold'>Vous devez saisir votre prenom</span><br/>";
if (empty($_POST['password']))
$message .= "<span class='redBold'>Vous devez saisir un mot de passe</span><br/>";
if (empty($_POST['confirm-password']))
$message .= "<span class='redBold'>Vous devez confirmer le mot de passe</span><br/>";
//vérification du mot de passe
if(!ereg("^[A-Za-z0-9]{4,}$", $_POST["password"]))
{
$message .= "<span class='redBold'>Votre mot de passe doit comporter au moins 4 caractères</span><br/>";
}
elseif($_POST["password"] != $_POST["confirm-password"])
{
$message = "<span class='redBold'>Votre mot de passe n'a pas été correctement confirmé</span><br/>";
}
//vérification de l'email
if(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$", $_POST["email"]))
{
$message .= "<span class='redBold'>Votre adresse e-mail n'est pas valide</span><br/>";
}
else
{
//vérification du couple pseudo et email
mysql_select_db($database_memooh, $memooh) or die("cannot select DB");
$sql="SELECT email FROM mem_membre WHERE pseudo = '" . $_POST["pseudo"] . "'
AND email='".$_POST['email']."' ";
$result=mysql_query($sql);
//si la requête ne retourne rien, cela signifie que le mail n'existe pas
if(mysql_num_rows($result) != 0)
{
$message .= "<span class='redBold'>Le couple Email - Pseudo existe deja</span><br/>";
}
}
if (empty($_POST['sexe']))
$message .= "<span class='redBold'>Vous devez cocher la case Homme ou Femme</span><br/>";
if (empty($_POST['autemail']))
$message .= "<span class='redBold'>Vous n'avez pas précisé la visibilité de votre Email</span><br/>";
// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {
echo $message;
// Si il y a une erreur le javascript réaffiche le formulaire d'inscription
?>
<script language="JavaScript">
setTimeout("window.location.href='./inscription.php ' ", 5000);
</script>
<?php
//sinon c'est ok
} else {
foreach($_POST as $index => $valeur) {
$$index = mysql_real_escape_string(trim($valeur));
}
//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['pseudo']} "
."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
// préparation du corps du mail
$mail_corps = "Bonjour $prenom et bienvenu sur le site de Memooh!\n";
$mail_corps .= "Vous pourrez mémoriser vos idée cadeau\n";
$mail_corps .= "Votre Pseudo : $pseudo\n";
$mail_corps .= "Votre mot de passe : $passe gardez le présieusement\n";
$mail_corps .= "A bientôt sur Memooh\n";
//$mail_corps .= $comments;
// Requête d'insertion dans la base si tout est ok
$sql = "INSERT INTO mem_membre VALUES ('', '".$pseudo."', '".$nom."', '".$prenom."', '".md5("8j1W7WYPo6frEh4".$passe)."',
'".$statut."', '".$email."', '".$autemail."', '".$sexe."',
'".$time."', '".$ip."', '".$lasttime."', '".$online."')";
$res = mysql_query($sql);
if($res) {
echo($msg_ok);
// envoi du mail
mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete);
} else {
echo mysql_error();
}
}
// on détruit les variables de session, désormais inutiles
session_unset();
session_destroy();
?>
</div>
<!--fin content -->
<!-- InstanceEndEditable --><br class="clearFloat2" />
</div><!-- fin contentWrapper2 -->
<div id="footer2">
<p>© Copyright Goleobox © <a href="# target="_blank"></a> Tous droit réservés</p>
</div>
</div><!--fin outerWrapper2 -->
</body>
<script type="text/javascript">
<!--
function AjoutFavoris(theURL, theTITLE) {
window.external.AddFavorite(theURL, theTITLE);
}
-->
</script>
<!-- InstanceEnd --></html>
Comme je l'ai dis, en test sous MAMP tout ce passe a merveille. En production sur mon serveur OVH, l'inscription me renvoie vers echoue.php (mais l'utilisateur est bien entré dans la base) au lieu de m'indiquer que l'utilisateur est bien enregistré.J'ai cependant, en test, un warning:
Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/memooh/traitement.php:51) in /Applications/MAMP/htdocs/memooh/traitement.php on line 79
Je me demande si mon soucis ne viens pas de ce fameux warning mais je n'arrive pas a comprendre pourquoi çà ne passe pas.
J'ai vérifier qu'il n'y avais pas d'espace qui trainait dans mon code et je n'en ai trouvé qu'un que j'ai supprimé et qui n'a pas résolu mon problème.
Une idée?
edit, je vois que les ligne ne sont pas afficher grace aux balise PHP donc pour info, la ligne 51:
$password2=$_POST['passe'];
La ligne 79:
header("Location: ". $MM_redirectLoginFailed );