Aller au contenu

Syntaxe php


Sujets conseillés

Posté

Salut a ts !

j'ai un script qui date de 4ans que j'utilisé il ya longtemps et là quand j'ai décidé de le reprendre, tout remarche nickel ! sauf que pour se loguer sur login.php.. il ne renvoie pas sur la page de membre (index.php avc loggin par cookie), mais renvoie vers index.php comme si c'etait un visiteur non logué ! donc le problême est pour se loguer, sachant que les variables sont OK, et que la connexion a la db est OK, et vu que je suis nul en php :( ! alors que pour s'inscrire et le reste, tt marche nickel !

Si quelqu'un veut bien m'aider, j'en serais vraiment reconnaissent je suis vraiment bloqué ! vous pouvez voir le script ici : https://206.225.91.72:8443/sitepreview/http...i.com/login.php

Ici le haut de la page login.php :

<? 
include("$inc"."conf.php");
include("$inc"."funct.php");
connexiondb();
if($Submit) {
$req=mysql_query("select * from $db_tabl1 where email=\"$email\" and pass=\"$pass\"");
if(mysql_num_rows($req)=="0")
{
$messag="Votre mot de passe n'est pas valide !";
}
else
{
setcookie("pyscripts","$email/$pass");
header("location: index.php");
exit;
}
}
if($Mail)
{
$query = mysql_query("SELECT pass FROM $db_tabl1 WHERE email='$email'");
list($passwd) = mysql_fetch_row($query);
$nb=mysql_num_rows($query);
if($nb<1)
{ $message="Aucun membre ne correspond à cette adresse."; }
else
{
$date = date("d-m-Y");
$heure = date("H:i");
$sujet = 'Votre Mot de passe';
$message = "Le $date à $heure, vous avez demmandé votre mot de passe. Le voici :\n\nMot de passe : $passwd \n---------------------------------------\nMerci de vos visites sur $nomsitew !\n$urlsitew\n";
mail ($email, $sujet, $message,"From: $mailmasterw");
$message="Votre mot de passe vous a été envoyé à l'adresse <u>".$email."</u>";
}
}
include("$inc"."avant.php");
?>

En attendant vos réponses,

Posté

Dans le code que tu viens de donner, il y a un espace avant <?... Si c'est réellement le cas dans ton script, le setcookie ne marchera pas, et donc personne ne sera logué effectivement !

Posté

une remarque sur ton formulaire d'inscription:

On peut y entrer n'importe quel informations

exemple: test

Votre nom :test

Votre prénom :test

Adresse e-mail :test

Titre de votre site :test

Adresse de votre site :test

et ca passe! :D

Pas de cotorolr de la validité ni du mail ni du site.

à revoir. ;)

sinon bonne idée.

have a fun.

Posté

sarc > non ce n'est pas le cas ! il n'ya pas d'espace avant <? du début de page !

nfotech > step by step.. l'important pour moi est qu'on puisse se loguer, le reste c'st facile ! lol

Posté

J'aimerais que tu me dises ce qu'est supposé faire ce code:

list($passwd) = mysql_fetch_row($query);

;) Dan

Posté

A vrai dir je ne sais aps trop ! vu que le script d'origine le contient ! entoutcas je l'ai simplement enlvé, et cela na rien changé !

entout cas le Cookie n'est pas créé ! ce qui me pousse a croire a un problême de syntaxe.

Voici l'erreure que ça me donne quand j'essaye de me connecter a la page de membres :

[client 206.225.91.72] PHP Warning:  setcookie() expects parameter 3 to be long, string given in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13
[client 206.225.91.72] PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14

Si quelqu'un veut bien jeter un coup d'euil dessus ce serait vraiment sympa ! :rolleyes:

Posté

Bonjour,

Essaye en remplaçant

setcookie("pyscripts","$email/$pass");

par

setcookie("pyscripts",$email."/".$pass, time());

Posté

[client 206.225.91.72] PHP Warning:  setcookie() expects parameter 3 to be long, string given in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13
[client 206.225.91.72] PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14

Deux erreurs ici :

  • La première indique le setcookie attend un nombre "long" comme 3ème paramètre. Ce qui est étrange vu que tu n'en spécifie pas.
    la solution de Norseb devrait arranger çà. De toute façon il faut toujours spécifier une durée de vie à un cookie, ne serait-ce que pour en contrôler l'utilisation.
  • La seconde est très claire : tu ne pourras pas envoyé ton cookie parce que dans config.php à la ligne 18 tu as déjà envoyé des données (un echo possible ?) et par conséquent il a envoyé les entêtes. Le cookie devant être placé dans l'entête, c'est un peu comme s'il avait raté le train.

Pour solutionner le deuxième problème, tu peux, ou eviter tout echo / print ... avant l'envoi de setcookie() et header(). Ou alors mettre en tampon les données par un ob_start au début de ton script puis ob_flush à la fin pour envoyer les données.

cf. Bufferisation de sortie

Posté
La seconde est très claire : tu ne pourras pas envoyé ton cookie parce que dans config.php à la ligne 18 tu as déjà envoyé des données (un echo possible ?) et par conséquent il a envoyé les entêtes. Le cookie devant être placé dans l'entête, c'est un peu comme s'il avait raté le train.

En fait, la seconde erreur découle de la première. L'affichage du premier warning empèche l'envoi d'entète (puisque celui-ci doit être fait avant tout affichage).

La résolution de la première erreur devrait tout résoudre d'un seul coup ;)

Posté

Merci de vos réponses, cela dit en remplaçant comme m'a dit de faire NorSeb la ligne de setcookie() Les erreures d'avant ne viennent plus ! par contre elles sont remplacées par d'autres erreures.

[client 206.225.91.72] PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13
[client 206.225.91.72] PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14

Posté

Cette erreur vient du fait que tu envoi une information autre que l'entète au navigateur avant l'envoi des entètes (où sont créés les cookies, ...).

Il faut donc virer les lignes en trop avant le code php, les echo ""; , les balise html, etc...

Poste ton code complet si tu veux...

Posté

Il n'ya pas de balise html, ou d'echos dans la page login.php avant le setcookie d'apres ce que je crois. Enfin tu peux voir ici, voici la page compléte :


<?
include("$inc"."conf.php");
include("$inc"."funct.php");
connexiondb();
if($Submit) {
$req=mysql_query("select * from $db_tabl1 where email=\"$email\" and pass=\"$pass\"") or die('Erreur de connexion');
if(mysql_num_rows($req)=="0")
{
$messag="Votre mot de passe n'est pas valide !";
}
else
{
setcookie("pyscripts",$email."/".$pass, time());
header("location: index.php");
exit;
}
}
if($Mail)
{
$query = mysql_query("SELECT pass FROM $db_tabl1 WHERE email='$email'");
list($passwd) = mysql_fetch_row($query);
$nb=mysql_num_rows($query);
if($nb<1)
{ $message="Aucun membre ne correspond à cette adresse."; }
else
{
$date = date("d-m-Y");
$heure = date("H:i");
$sujet = 'Votre Mot de passe';
$message = "Le $date à $heure, vous avez demmandé votre mot de passe. Le voici :\n\nMot de passe : $passwd \n---------------------------------------\nMerci de vos visites sur $nomsitew !\n$urlsitew\n";
mail ($email, $sujet, $message,"From: $mailmasterw");
$message="Votre mot de passe vous a été envoyé à l'adresse <u>".$email."</u>";
}
}
include("$inc"."avant.php");
?>

<form method="post" action="login.php">
<div align="left">Pour pouvoir vous identifier, veuillez saisir vos e-mail et
mot de passe :<br>
<? if($messag) { echo"<p align=\"center\"><b>".$messag."</b><br></p>"; }?>
<br>
</div>
<table width="100%" border="0" cellpadding="0" align="center" cellspacing="0" height="70">
<tr bgcolor="#FFFFFF">
<td width="35%">
<div align="right"><b><font size="2"> Adresse e-mail :</font></b></div>
</td>
<td width="43%">
<div align="center">
<input type="text" name="email">
</div>
</td>
<td width="22%">
<div align="center"> </div>
</td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="35%">
<div align="right"><b><font size="2"> Mot de passe :</font></b></div>
</td>
<td width="43%">
<div align="center">
<input type="password" name="pass" value="">
</div>
</td>
<td width="22%">
<div align="center">
<input type="submit" name="Submit" value="Envoyer">
</div>
</td>
</tr>
</table>
</form>
<div align="center">
<hr width="100%" color=#000000 size=1>
<form method="post" action="login.php">
<div align="left">
<p>Mot de passe perdu ? Indiquez votre adresse e-mail et nous vous l'enverrons
par e-mail : </p>
<? if($message) { echo"<p align=\"center\"><b>".$message."</b><br></p>"; }?>
</div>
<table width="100%" border="0" cellpadding="0" align="center" cellspacing="0" height="35">
<tr bgcolor="#FFFFFF">
<td width="35%">
<div align="right"><b><font size="2"> Adresse e-mail :</font></b></div>
</td>
<td width="43%">
<div align="center">
<input type="text" name="email">
</div>
</td>
<td width="22%">
<div align="center">
<input type="submit" name="Mail" value="Envoyer">
</div>
</td>
</tr>
</table>
</form>
<p> </p>
<p>
<?
include("$inc"."apres.php");
mysql_close();
?>
</p>
</div>

Posté

Il y a une ligne vide au dessus de la balise php '<?' Ca vient peut-être de là.

Sinon ca vient peut-être des 2 fichiers inclus au début du script.

Posté

il n'ya pas de ligne vide au debut du code source ! ^^

J'aimerais que tu en-juge par toi même des deux fichiers !

les deux fichiers conf.php :

<?
$db_host="localhost";
$db_b="base";
$db_pass="pass";
$db_login="login";

$db_tabl1="membres";
$db_tabl2="modules";

$nomsitew="Plouf";
$urlsitew="https://206.225.91.72:8443/sitepreview/http/ploufi.com";
$urldossier="https://206.225.91.72:8443/sitepreview/http/ploufi.com/index.php";
$nomw="Nom";
$mailmasterw="mail_AT_yahoo.fr";
$adminp="adminpass";
?>

et le fichier funct.php :

<?
$local="1";
function verif_session()
{if(!session_is_registered('login'))
{
Header("Location: index.php?t=login");
exit;
}}
function connexiondb()
{
global $db_host, $db_login, $db_pass, $db_b;
if(!($db = mysql_connect($db_host,$db_login,$db_pass))) {
echo "Erreur lors de la connexion";
exit;
}
if(!mysql_select_db($db_) {
echo "Erreur lors de la sélection de la base";
exit;
}
}
// Vérifie si un champ est vide
function est_vide($champ,$message)
{
if(empty($champ))
{
echo"<script language=\"Javascript\">alert(\"$message\");history.back();</script>";
exit;
}}

//Vérifie adresse e-mail
function verif_email($email)
{
$email = addslashes(stripslashes(strtolower(trim($email))));
if (!ereg(".@.{5}", $email))
{
echo"<script language=\"Javascript\">alert(\"Vous avez mal saisi l'adresse e-mail !\");history.back();</script>";
exit;
}
list($user, $domaine_user) = split("@", $email, 2); // vérif si email existe réellement
$email_ok = checkdnsrr($domaine_user, "MX");
if ($email_ok != 1)
{
echo"<script language=\"Javascript\">alert(\"L'adresse e-mail n'est pas valide ou n'existe pas !\");history.back();</script>";
exit;
}}
function hexa_correct($code_hexa) {
$code_hexa = strtolower($code_hexa);
if (!(ereg("^[0-9a-f]{6}$",$code_hexa)) )
{
$message = "Votre code hexadécimal $code_hexa n'est pas correct !";
$message .= "<br>Il doit être du type : <b>FFFFFF</b>, ou encore <b>000000</b><br><br>\n";
$message .= "<a href=\"java script:history.go(-1);\">Retour au formulaire</a>\n";
die ($message);
}
return true;
}
?>

Vraiment, ce script est important pour moi, et là il arrête pas de me faire l'erreur :gueule:

Posté

Comme proposé précèdement, il y a une solution qui peut te permettre de continuer en attandant de trouvé d'où viens le problème.

Il s'agit de La Bufferisation de sortie.

Avec un ob_start() au tout début de ton script (=au fichier demandé, pas les fichiers qu'il inclus) tu pourra mettre en cache les données avant de les envoyer, tout en pouvant envoyer des entêtes.

Pour libéré le cache et l'envoyer au client : ob_flush à la fin du script. (Cette fonction est appelée par défaut à la fin d'un script, elle est donc "facultative" bien que préférable)

Si toute fois ceci ne fonctionne pas, cela peut vouloir dire qu'il y a des données envoyées hors des balises php.

PS: cette solution peut-être conservée définitivement, elle est très pratique et permet même un meilleur contrôle de l'affichage. Exemple, si une seule erreur se produit on efface le cache et on renvoi vers une page d'erreur ...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...