Problème avec formulaire d'inscription.

Eléphanteau du PHP | 37 Messages

17 nov. 2014, 18:26

Bonjour à tous, j'espère que vous allez bien :D ?

Je viens vers vous aujourd'hui car j'ai un formulaire d'inscription qui, quand je l'envoie, me donne les erreurs suivantes:

Code : Tout sélectionner

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/xxxx/public_html/xxx/inscription.php:1) in /home/xxxx/public_html/xxxx/inscription.php on line 25

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by (output started at /home/xxxx/public_html/xxxx/inscription.php:1) in /home/xxx/public_html/xxxx/inscription.php on line 27
J'ai beau avoir ces erreurs, l'utilisateur s'ajoute dans la base de données et il peut se connecté. Voici mon formulaire inscription.php:
<?php

// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	// on teste l'existence de nos variables. On teste ꨡlement si elles ne sont pas vides
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
	// on teste les deux mots de passe
	if ($_POST['pass'] != $_POST['pass_confirm']) {
		$erreur = 'Les 2 mots de passe sont différents.';
	}
	else {
	
		$base = mysql_connect ('localhost', 'xxx', 'xxx');
		mysql_select_db ('xxx', $base);

		// on recherche si ce login est dꫠ utilis顰ar un autre membre
		$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$data = mysql_fetch_array($req);

		if ($data[0] == 0) {
		$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string(md5($_POST['pass'])).'")';
		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

		session_start();
		$_SESSION['login'] = $_POST['login'];
		header('Location: membre.php');
		exit();
		}
		
		else {
		$erreur = 'Un membre possède déjà ce login.';
		}
	}
	}
	else {
	$erreur = 'Au moins un des champs est vide.';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<title>Inscription</title>
</head>

<body>
<?php if (isset($erreur)) echo $erreur; ?>
<form action="inscription.php" method="post">
<table>
<tr>
<td>Nom d'utilisateur</td> <td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td>
</tr>
<tr>
<td>Mot de passe</td><td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
</tr>
<tr>
<td>Répéter le mot de passe</td><td><input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"></td>
</tr>
<tr><td><input type="submit" name="inscription" value="Inscription"></td></tr>
</table>
</form>
</body>
</html>
Qui pourrait éclaircir ma lanterne ? Il faut savoir aussi que j'ai lu qui fallait mettre la session start au début. Ce que j'ai fait, mais qui plante tout mon code.

MERCI BEAUCOUP D'AVANCE :D!!
Modifié en dernier par moogli le 19 nov. 2014, 22:50, modifié 1 fois.
Raison : anonymisation

Nestecha
Invité n'ayant pas de compte PHPfrance

18 nov. 2014, 02:40

Es tu sûr d'avoir copié collé ton code de façon correcte ?

Vu ton erreur, le problème est la ligne 1. C'est à dire <?php.

Donc soit :

Tu as mal copié collé ton code, et en réalité tu n'as pas :
<?php

// on teste si le visiteur a soumis le formulaire
Mais plutôt :
 <?php

// on teste si le visiteur a soumis le formulaire
Note l'espace présent juste avant <?php. Si quoi que ce soit est écrit avant <?php, ça ne fonctionnera pas.

Sinon, une autre possibilité (plus rare) est que tu aies un UTF 8 Byte Order Mark. Pour faire simple, c'est un petit espace que certains IDE ne montrent pas, donc qu'on ne voit pas.

Pour régler ça, le plus simple est de sauvegarder en UTF-8(no BOM).

En tout cas oui il est préférable d'avoir le session_start() avant tout le reste du code.

Eléphanteau du PHP | 37 Messages

18 nov. 2014, 13:11

Bonjour Nestecha, je te remercie de ta réponse :D!

Alors désolé, mon copié collé est mauvais car dans mon code je n'ai pas cette espace. Pour la solution du UTF-8 sans BOM cela fonctionne à la perfection maintenant. J'avais ce problème lorsque le membre ce connectait aussi et le problème c'est envolé. Maintenant, quand un membre s'inscrit on le voit bien et il est redirigé à l'accueil.

JE TE REMERCIE GRANDEMENT !! :mrgreen:

Nestecha
Invité n'ayant pas de compte PHPfrance

18 nov. 2014, 17:30

Clique sur résolu alors ;) Et ton copié collé est bon si tu n'as pas l'espace, mais content d'avoir pu t'aider.