[PHP] Session qui ne veut pas démarrer

Bref, j’ai ajouté le support de connection d’utilisateur. L’inscription se passe nickel. Mais dès que je veux vérifier si l’utilisateur est connecté en ce moment même. J’obtiens au final un message d’erreur à propos de session_start();

le message d’erreur :

[quote]Warning: session_start(): open(/var/www/free.fr/2/5/nebulastar/sessions/sess_828f42eeb4265fc30b822c92b2a54f1e, O_RDWR) failed: No such file or directory (2) in /var/www/free.fr/2/5/nebulastar/check_login.php on line 5

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/free.fr/2/5/nebulastar/check_login.php:5) in /var/www/free.fr/2/5/nebulastar/check_login.php on line 5

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/2/5/nebulastar/check_login.php:5) in /var/www/free.fr/2/5/nebulastar/check_login.php on line 5

Warning: Unknown(): open(/var/www/free.fr/2/5/nebulastar/sessions/sess_828f42eeb4265fc30b822c92b2a54f1e, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/free.fr/2/5/nebulastar/sessions) in Unknown on line 0[/quote]

check_login.php

[code]<?php

/* check login script, included in db_connect.php. */

session_start();

if (!isset($_SESSION[‘username’]) || !isset($_SESSION[‘password’])) {
$logged_in = 0;
return;
} else {
if(!get_magic_quotes_gpc()) {
$_SESSION[‘username’] = addslashes($_SESSION[‘username’]);
}
…[/code]

db_connect.php

[code]<?php
$host=“blabla”;
$base=“ma_base”;
$pass=“pass_de_la_base”;

$link = @mysql_connect($host,$base,$pass) or die(“Impossible de se connecter à la base de données”);

$select_base = @mysql_select_db($base, $link) or die(“Impossible de se connecter à la base de données”);

include(‘check_login.php’);
?>[/code]

What’s wrong ?

T’as pensé à créer un répertoire session à la racine de ton site ? :stuck_out_tongue: :stuck_out_tongue:

Nan. Il fallait ? On m’a rien dit :stuck_out_tongue: (session avec s ou sans s à la fin ?)

Edit : Problème résolu, maintenant j’ai un autre problème situé dans check_login.php

[code]session_start();

if (!isset($_SESSION[‹ username ›]) || !isset($_SESSION[‹ password ›])) {
$logged_in = 0;
return;
} else {

// remember, $_SESSION['password'] will be encrypted.

if(!get_magic_quotes_gpc()) {
	$_SESSION['username'] = addslashes($_SESSION['username']);
}


// addslashes to session username before using in a query.
$pass_select = "SELECT password FROM user WHERE pseudo = '".$_SESSION['username']."'";
$pass = mysql_query($pass_select, $link);	// problem de la ligne 21

// if(DB::isError($pass) || $pass->numRows() != 1) {
if(mysql_numrows($pass) != 1) {			  // probleme de la ligne 24
	$logged_in = 0;
	unset($_SESSION['username']);
	unset($_SESSION['password']);
	// kill incorrect session variables.
}

// $db_pass = mysql_fetchrow($pass);
$db_pass = mysql_fetch_array($pass);	  // et enfin le dernier probleme.

// now we have encrypted pass from DB in 
//$db_pass['password'], stripslashes() just incase:

$db_pass['password'] = stripslashes($db_pass['password']);
$_SESSION['password'] = stripslashes($_SESSION['password']);[/code]

Message d’erreur :

[quote]Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 21

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 24

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 32[/quote]

Ah dernier truc, en allant dans ma page principale, j’ai ce message qui apparait :

La ligne 5 fait référence à « session_start() ».

C’est quoi ce “, $link” à la ligne 21 ?
Ca fait référence à quoi ?

[quote=« Reuns, post:5, topic: 27036 »]C’est quoi ce « , $link » à la ligne 21 ?
Ca fait référence à quoi ?[/quote]

$link référence ceci (situé dans le fichier db_connect.php) :

$link = @mysql_connect($host,$base,$pass) or die("Impossible de se connecter à la base de données");

J’ai lu en vitesse, et je pense que la réponse est sous ton nez : à la ligne 7 de ton fichier index.php, tu as déja commencé à générer le corps de ta page (si ce n’est pas le cas, vérifié s’il n’y a pas un espace ou un retour chariot qui traine hors du corps du bloc PHP, ca peut arriver…)

Si tu essai par la suite de définir des éléments d’entêtes, ca ne fonctionne pas ! Il faut le faire avant de produire le moindre octet dans le flux de sortie.

My 2 cents … :stuck_out_tongue:

Yep c’est ca. J’avais fait 4 tabulations avant de mettre la balise php. Sinon, en me déconnectant du site, j’ai un problème de header. En gros, à la destruction de la session, je veux faire une redirection automatique vers la page principale (index.php) et j’obtiens le message suivant :

logout.php

[code]<?php

require ‹ db_connect.php ›; // database connect script.

if ($logged_in == 0) {
die(‹ Vous n êtes pas connectés, donc vous ne pouvez pas vous déconnecter. ›);
}

unset($_SESSION[‹ username ›]);
unset($_SESSION[‹ password ›]);
// kill session variables
$_SESSION = array(); // reset session array
session_destroy(); // destroy session.
header(« Location: index.php »);
// redirect them to anywhere you like.
?>[/code]

EDIT : Problème résolu.

[quote=“MetalDestroyer, post:3, topic: 27036”]Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 21

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 24

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/2/5/nebulastar/check_login.php on line 32[/quote]

verifie si ta connexion est active , la première erreur est sans doute du a une defaut de connexion a mysql
les autres erreurs , decoule de la première

PS : Problème résolu… Je viens de voir que j’ai fermé la connexion avec la BDD une fois l’user connecté… :stuck_out_tongue:

[quote=« aliaz, post:9, topic: 27036 »]verifie si ta connexion est active , la première erreur est sans doute du a une defaut de connexion a mysql
les autres erreurs , decoule de la première[/quote]

En fait toutes mes autres connections avec la BDD fonctionne nickel. La création d’un user se passe sans problème. Je peux aussi me loguer/me déloguer SAUF que si je me logue, j’ai ce message d’erreur. Je vois l’user en ligne, mais après, je ne sais pas à quoi correspond ces messages.

En fait, l’erreur signalé se situe à ce niveau là :

[code]$liste_news = « SELECT n.titre_news, n.date_news, n.article_news, u.pseudo
FROM news n, user u
WHERE n.num_user = u.num_user
ORDER BY n.date_news »;

	  $result = mysql_query($liste_news, $link);
	  $nb = mysql_numrows($result);  // récupère le nbre d'enregistrement
	  while($value = mysql_fetch_array($result))
	  {
		$sql_titre = $value["titre_news"];
		$sql_date = $value["date_news"];
		$sql_article = $value["article_news"];
		$sql_auteur = $value["pseudo"];

		$Affichage = "$Affichage <table class='news'>";
		$Affichage = "$Affichage <tr><td class='news_title'>$sql_titre</td></tr>";
		$Affichage = "$Affichage <tr><td class='news_author'>by $sql_auteur, $sql_date</td></tr>";
		$Affichage = "$Affichage <tr><td class='news_corps'>$sql_article</td></tr>";
		$Affichage = "$Affichage </table><br>"; 
 	}[/code]

Or ce code, me permet d’afficher mes news. Si je suis en mode Invité, la news s’affiche. Mais dès que je me connecte sous un compte utilisateur, la news disparait au profit de ces 3 messages d’erreurs.
Du coup, je ne comprend pas trop d’où vient le problème. Autant, j’ai réussit à corriger tous les autres bugs, autant celui là, je ne sais vraiment pas quoi faire.

la fonction c’est mysql_num_rows pas mysql_numrows :stuck_out_tongue:
puis pour le reste, tu as testé ta requete avec phpmyadmin par exemple ?
un or die(mysql_error()) ça dit quoi sinon ?

[quote=« fser, post:11, topic: 27036 »]la fonction c’est mysql_num_rows pas mysql_numrows :stuck_out_tongue:
puis pour le reste, tu as testé ta requete avec phpmyadmin par exemple ?
un or die(mysql_error()) ça dit quoi sinon ?[/quote]

Je n’ai pas fait gaffe pour le message du « mysql_error() » ^^. A mon avis ca doit etre le même message que lorsque la requête est erronée. (donc dire l’emplacement de l’erreur).

En fait pour l’histoire du mysql_numrows, c’est que celui ci est une deprecated contrairement à mysql_num_rows. Mais ca marche.

Je suis le seul à trouver ce @ … crade ?

Si tu ne veux pas que les erreurs s’affichent sur ton site, tu utilises error_reporting(value); (avec une constante, histoire de pouvoir le changer rapidement entre le site réel sans erreurs et le site de dev avec erreurs), qui va s’en charger tout seul, mais ne masque pas d’un @ toutes tes fonctions susceptibles de foirer … Si tu as un problème sans message d’erreur, tu fais comment, tu enlève tes 300 @ un par un jusqu’à trouver la fonction qui ne fonctionne pas correctement ?

[quote=“Azera, post:13, topic: 27036”]Je suis le seul à trouver ce @ … crade ?

Si tu ne veux pas que les erreurs s’affichent sur ton site, tu utilises error_reporting(value); (avec une constante, histoire de pouvoir le changer rapidement entre le site réel sans erreurs et le site de dev avec erreurs), qui va s’en charger tout seul, mais ne masque pas d’un @ toutes tes fonctions susceptibles de foirer … Si tu as un problème sans message d’erreur, tu fais comment, tu enlève tes 300 @ un par un jusqu’à trouver la fonction qui ne fonctionne pas correctement ?[/quote]

Ah tu m’apprends un truc là. Je ne savais pas du tout que le @ masquer les erreurs. Mon prof de php nous avez dit, mettez du @mysql_connect($host,$base,$pass). Du coup, je fais avec @. Sinon, à quel endroit précisément faut il utiliser “error_reporting(value)” ?? C’est que ca m’intéresse ^^

Où tu veux dans ton code, c’est un peu une manière de dire “à partir de là, tu n’indique que les erreurs de ce type :”.

Plus d’info (et les macro disponibles) là :
http://fr3.php.net/manual/en/function.error-reporting.php

@ devant une fonction permet en effet de masquer les erreurs eventuelles qu’elle pourrait afficher.
Mais comme je l’ai dit, pour debbuguer, il vaut mieux ne pas utiliser @, mais jouer avec differentes valeurs d’error_reporting selon que le site soit en developpement ou en production.