Attention Warning !!!

Fermé
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 19 févr. 2020 à 10:07
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 5 mars 2020 à 15:52
Bonjour,

Depuis quelques temps j'ai remarqué un dysfonctionnement aléatoire pour écrire dans un chat sur mon site de jeux d'échecs.
J'en ai bien sûr chercher la cause lorsque celui ci se produisait.
Et j'ai réussi à la trouver.
Celle ci provient d'un arobase présent en début de code d'un script situé en ligne:
9

<?php
$parts = pathinfo($_SERVER['REQUEST_URI']);
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	//$path .= '/'.$parts['jeuxechecs_fr'];
	$path .= '/index.php';
}
$path = str_replace('\\', '/', $path).'/';
@session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
session_start();

//Inhibé les lignes 1120 à 1125 inclus
// note to developers :
// before each section, there is a header that begins with somthing like

	//**********************************************************************
	//  this is the header
	//**********************************************************************

// and after the respective section there is an entity like

	//*/

// together these entities create a switchable comment block. - ensemble, ces entités créent un bloc de commentaires commutable.
// when used together, all you need to do is remove one of the forward slashes ( / )
// from either of the lines containing asterisks ( * ) to make a line like - à partir des lignes contenant des astérisques (*) pour créer une ligne comme

	/***********************************************************************

	... everything in here is commented out with one easy character change ...
//*/

// by finding a commented block of code, all you need to do is add the missing /
// to the line that is missing one. ( i usually remove the slash from the lower of
// the two lines )
//
// i specifically use various comment styles to denote what kind of comment it is.
// for instance, i use // to denote a 'real' comment, where i am commenting on a
// piece of code, i use /* */ to comment out blocks of code that i don't wish to run
// and i use # to temporarily comment out single lines or small sections of code.
//
// ... although there may be other comments elsewhere that other people created that
// do not follow this protocol


// set the session cookie parameters so the cookie is only valid for this game

// load settings
require_once 'config.inc.php';
require 'login.inc.php';
require_once 'html.inc.php';
require_once 'html.tables.php';

// reset any shared data we may have collected
$_SESSION['shared'] = false;

// run some things first for the menu and data below
// open the PGN dir
$pgnDir = opendir("./pgn");
$fullFiles = array( );

// collect the game IDs for the games already exported
while (false !== ($file = readdir($pgnDir)))
{
	if (('..' != $file) && ('.' != $file) && ('index.php' != $file))
	{
		// collect the complete filename
		$fullFiles[] = $file;

		// collect just the game id for searching below
		if (preg_match('/game_(\\d++)/i', $file, $match))
		{
			$pgnFiles[] = $match[1];
		}
	}
}

// count the files for menu display
$numFiles = count($fullFiles);

// run a switch so that all the stuff being run here is not run all at once
// when viewing the page, it makes it so that the index page takes FOREVER
// to load

// make sure we have something to look at
$page = (isset($_GET['page'])) ? $_GET['page'] : 'mygames';
switch ($page)
{
// =========================================================================
	case 'mygames' :

		break;

// =========================================================================
	case 'current' :

		//******************************************************************
		//  cleanup dead games
		//******************************************************************

		// if we want to delete old games
		if (0 != $CFG_EXPIREGAME)
		{
			// find out which games are older
			$query = "
				SELECT *
				FROM ".T_GAME."
				WHERE g_last_move < DATE_SUB(NOW( ), INTERVAL {$CFG_EXPIREGAME} DAY)
			";
			$result = $mysql->fetch_array($query, __LINE__, __FILE__);

			// and for every old game...
			foreach ($result as $old_game)
			{
				// if the game is in progress...
				if ('' == $old_game['g_game_message'])
				{
					// find out who's turn it was...
					$query = "
						SELECT COUNT(*)
						FROM ".T_HISTORY."
						WHERE h_game_id = '{$old_game['g_id']}'
					";
					$old_moves = $mysql->fetch_value($query, __LINE__, __FILE__);

					// if it's black's turn...
					if (0 == ($old_moves % 2))
					{
						$player1 = $old_game['g_white_player_id']; // give white a win
						$player2 = $old_game['g_black_player_id']; // give black a loss
					}
					else // it was white's turn...
					{
						$player1 = $old_game['g_black_player_id']; // give black a win
						$player2 = $old_game['g_white_player_id']; // give white a loss
					}

					// require a file
					require_once './includes/chessdb.inc.php';

					adjust_stats($player1, $player2, 1, 0);
				}

				// ...clear the history...
				$query = "
					DELETE FROM ".T_HISTORY."
					WHERE h_game_id = '{$old_game['g_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// ...and the messages...
				$query = "
					DELETE FROM ".T_MESSAGE."
					WHERE m_game_id = '{$old_game['g_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// ...and the chat...
				$query = "
					DELETE FROM ".T_CHAT."
					WHERE c_game_id = '{$old_game['g_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// ...and finally the game itself from the database
				$query = "
					DELETE FROM ".T_GAME."
					WHERE g_id = '{$old_game['g_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);
			}
		}
		

		break;

// =========================================================================
	case 'finished' :
		require_once 'chessutils.inc.php';
		require_once 'gui.inc.php';

		//******************************************************************
		//  Export finished games to PGN directory
		//******************************************************************

		// save the current session vars
		if (isset($_SESSION['game_id']))
		{
			$prevSessionGameID = $_SESSION['game_id'];
		}

		if (isset($_SESSION['id960']))
		{
			$prevSessionId960 = $_SESSION['id960'];
		}

		// save the list to exclude them below
		$pgnFiles = isset($pgnFiles) ? implode(',', $pgnFiles) : '0';

		// get all the games that are finished, but not yet exported to PGN
		$query = "
			SELECT G.*
				, P1.p_username AS white_username
				, P2.p_username AS black_username
			FROM ".T_GAME." AS G
				LEFT JOIN ".T_PLAYER." AS P1
					ON P1.p_id = G.g_white_player_id
				LEFT JOIN ".T_PLAYER." AS P2
					ON P2.p_id = G.g_black_player_id
			WHERE G.g_id NOT IN ({$pgnFiles})
				AND G.g_game_message IN ('Draw','Player Resigned','Checkmate')
			ORDER BY G.g_id
		";
		$result = $mysql->fetch_array($query, __LINE__, __FILE__);

		// save those games to PGN
		foreach ($result as $game)
		{
			$_SESSION['game_id'] = $game['g_id'];
			$_SESSION['id960']   = $game['g_id960'];

			ob_start( );

			// get the FEN data from the database
			$i = 0;
			$query = "
				SELECT h_fen
				FROM ".T_HISTORY."
				WHERE h_game_id = '{$_SESSION['game_id']}'
				ORDER BY h_time
			";
			$result = $mysql->fetch_array($query, __LINE__, __FILE__);

			unset($FENarray);
			foreach ($result as $FEN)
			{
				$FENarray[$i] = $FEN[0];
				$i++;
			}

			FENtomoves( ); // (chessutils.inc.php)

			returnGameInfo($_SESSION['game_id']);
			echo getPGN( ); // (gui.inc.php)

			$pgnFile = "./pgn/WebChess2_Game_{$game['g_id']}_".str_replace('-', '', substr($game['g_last_move'], 0, 10 )).'.pgn';

			$fh = fopen($pgnFile, "w")
				or die("Impossible d\'ouvrir le fichier {$pgnFile}.  Vérifiez les permissions d\'accès au fichier\n");
			fwrite($fh, ob_get_contents( ))
				or die("Impossible d\'écrire dans le fichier $pgnFile. Vérifiez les permissions d\'accès au fichier\n");
			fclose($fh);
			ob_end_clean( );
		}

		// reinstate the saved session vars
		if (isset($prevSessionGameID))
		{
			$_SESSION['game_id'] = $prevSessionGameID;
		}

		if (isset($prevSessionId960))
		{
			$_SESSION['id960'] = $prevSessionId960;
		}
		//*/


		//******************************************************************
		//  send email notice for nearly dead games
		/******************************************************************

		// get 2/3 of expire length
		$targetDate = mktime(0,0,0, date('m'), date('d') - ($CFG_EXPIREGAME * (2/3)), date('Y'));

		$query = "
			SELECT *
			FROM ".T_GAME."
			WHERE g_last_move < '{$targetDate}'
		";
		$result = $mysql->fetch_array($query, __LINE__, __FILE__);

		foreach ($result as $game)
		{
			$query = "
				SELECT p_email
				FROM ".T_PLAYER."
				WHERE p_id = '{$game['g_white_player_id']}'
			";
			$whiteEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

			$query = "
				SELECT p_email
				FROM ".T_PLAYER."
				WHERE p_id = '{$game['g_black_player_id']}'
			";
			$blackEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

			webchessMail("deletewarning",$whiteEmail,0,0,$game['g_id']);
			webchessMail("deletewarning",$blackEmail,0,0,$game['g_id']);
		}
		//*/

		break;

// =========================================================================
	case 'invite' :
		require_once 'newgame.inc.php';
		require_once 'webchessmail.inc.php';

		//******************************************************************
		//  send invitation for a new game
		//******************************************************************

		if (isset($_POST['opponent']))
		{
			// prevent multiple invites from the same originator
			$P = sani($_POST);
			$query = "
				SELECT g_id
				FROM ".T_GAME."
				WHERE g_game_message = 'Player Invited'
					AND
					(
						(
							g_message_from = 'white'
							AND g_white_player_id = '{$_SESSION['player_id']}'
							AND g_black_player_id = '{$P['opponent']}'
						)
						OR
						(
							g_message_from = 'black'
							AND g_white_player_id = '{$P['opponent']}'
							AND g_black_player_id = '{$_SESSION['player_id']}'
						)
					)
			";
			$mysql->query($query, __LINE__, __FILE__);

			if (0 == $mysql->num_rows( ))
			{
				// set the color to a random color if 'random', otherwise, set the color given
				$color = ('random' == $P['color']) ? ((1 == mt_rand(0, 1)) ? 'white' : 'black') : $P['color'];

				$query = "
					INSERT INTO ".T_GAME."
						(g_id960, g_white_player_id, g_black_player_id, g_game_message, g_message_from, g_date_created, g_last_move)
					VALUES ('";

				// set the C960 ID
				if ( ! isset($P['txtId960']) || '' === $P['txtId960'] )
				{
					$query .= "518','";
				}
				else
				{
					$query .= (int) trim($P['txtId960']) . "','";
				}

				// put the players in the right order
				if ('white' == $color)
				{
					$query .= $_SESSION['player_id'] . "','" . $P['opponent'];
				}
				else
				{
					$query .= $P['opponent'] . "','" . $_SESSION['player_id'];
				}

				$query .= "','Player Invited','{$color}',NOW( ),NOW( )) ";
				$mysql->query($query, __LINE__, __FILE__);

				// if email notification is activated...
				if ($CFG_USEEMAIL)
				{
					// if opponent is using email notification...
					$query = "
						SELECT p_email
						FROM ".T_PLAYER."
						WHERE p_id = '{$_POST['opponent']}'
					";
					$opponentEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

					if (0 < $mysql->num_rows( ))
					{
						if ('' != $opponentEmail)
						{
							// notify opponent of invitation via email
							call("webchessMail('invitation',$opponentEmail,'',{$_SESSION['username']},'')");
							webchessMail('invitation',$opponentEmail,'',$_SESSION['username'],'');
						}
					}
				}
			}
		}
		//*/


		//******************************************************************
		//  respond to invitation
		//******************************************************************

		if (isset($_POST['respond']))
		{
			if ('accepted' == $_POST['respond'])
			{
				// update game data
				$query = "
					UPDATE ".T_GAME."
					SET g_game_message = ''
						, g_message_from = ''
					WHERE g_id = '{$_POST['game_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// get the opponents ID for email
				$query = "
					SELECT *
					FROM ".T_GAME."
					WHERE g_id = '{$_POST['game_id']}'
				";
				$game = $mysql->fetch_assoc($query, __LINE__, __FILE__);

				$oppID = ($game['g_white_player_id'] == $_SESSION['player_id']) ? $game['g_black_player_id'] : $game['g_white_player_id'];

				// setup new board
				$_SESSION['game_id'] = $_POST['game_id'];
				createNewGame($_POST['game_id'],$game['g_id960']); // (newgame.inc.php)
#				saveGame( ); // (chessdb.inc.php)

				// if email notification is activated...
				if ($CFG_USEEMAIL)
				{
					// if opponent is using email notification...
					$query = "
						SELECT p_email
						FROM ".T_PLAYER."
						WHERE p_id = '{$oppID}'
					";
					$opponentEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

					if (0 < $mysql->num_rows( ))
					{
						if ('' != $opponentEmail)
						{
							// notify opponent of invitation via email
							call("webchessMail('accepted',$opponentEmail,'',{$_SESSION['username']},'')");
							webchessMail('accepted',$opponentEmail,'',$_SESSION['username'],'');
						}
					}
				}
			}
			else
			{
				$query = "
					UPDATE ".T_GAME."
					SET g_game_message = 'Invite Declined'
						, g_message_from = '{$_POST['message_from']}'
					WHERE g_id = '{$_POST['game_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// get the opponents ID for email
				$query = "
					SELECT *
					FROM ".T_GAME."
					WHERE g_id = '{$_POST['game_id']}'
				";
				$game = $mysql->fetch_assoc($query, __LINE__, __FILE__);
								$oppID = ($game['g_white_player_id'] == $_SESSION['player_id']) ? $game['g_black_player_id'] : $game['g_white_player_id'];

				// if email notification is activated...
				if ($CFG_USEEMAIL)
				{
					// if opponent is using email notification...
					$query = "
						SELECT p_email
						FROM ".T_PLAYER."
						WHERE p_id = '{$oppID}'
					";
					$opponentEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

					if (0 < $mysql->num_rows( ))
					{
						if ('' != $opponentEmail)
						{
							// notify opponent of decline via email
							call("webchessMail('declined',$opponentEmail,'',{$_SESSION['username']},'')");
							webchessMail('declined',$opponentEmail,'',$_SESSION['username'],'');
						}
					}
				}
			}
		}
		//*/


		//******************************************************************
		//  withdraw invitation
		//******************************************************************

		if (isset($_POST['withdrawl']))
		{
			// get opponent's player ID
			$query = "
				SELECT g_white_player_id
				FROM ".T_GAME."
				WHERE g_id = '{$_POST['game_id']}'
			";
			$opponentID = $mysql->fetch_value($query, __LINE__, __FILE__);

			if (0 < $mysql->num_rows( ))
			{
				if ($opponentID == $_SESSION['player_id'])
				{
					$query = "
						SELECT g_black_player_id
						FROM ".T_GAME."
						WHERE g_id = '{$_POST['game_id']}'
					";
					$opponentID = $mysql->fetch_value($query, __LINE__, __FILE__);
				}

				$query = "
					DELETE FROM ".T_GAME."
					WHERE g_id = '{$_POST['game_id']}'
				";
				$mysql->query($query, __LINE__, __FILE__);

				// if email notification is activated...
				if ($CFG_USEEMAIL)
				{
					// if opponent is using email notification...
					$query = "
						SELECT p_email
						FROM ".T_PLAYER."
						WHERE p_id = '{$opponentID}'
					";
					$opponentEmail = $mysql->fetch_value($query, __LINE__, __FILE__);

					if (0 < $mysql->num_rows( ))
					{
						if ($opponentEmail != '')
						{
							// notify opponent of invitation via email
							call("webchessMail('withdrawal', $opponentEmail, '', {$_SESSION['username']}, {$_POST['game_id']})");
							webchessMail('withdrawal', $opponentEmail, '', $_SESSION['username'], $_POST['game_id']);
						}
					}
				}
			}
		}
		//*/

		break;

// =========================================================================
	case 'stats' :
	require_once 'chessutils.inc.php';

		//******************************************************************
		//  run the games data for the stats
		//******************************************************************

		// collect current stats from database
		$query = "
			SELECT s_id
				, s_moves
				, s_days
			FROM ".T_STAT."
			WHERE
				(
					s_moves IS NOT NULL
					AND s_moves != 0
				)
				OR
				(
					s_days IS NOT NULL
					AND s_days != 0
				)
		";
		$statsdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		// parse stats data into an array for easier searching
		foreach ($statsdata as $stat)
		{
			$curstats[$stat['s_id']]['moves'] = $stat['s_moves'];
			$curstats[$stat['s_id']]['days']  = $stat['s_days'];
		}

		// collect any finished game data from the database
		$query = "
			SELECT COUNT(h_game_id) AS moves
				, DATEDIFF(g_last_move, g_date_created) AS days
				, h_game_id AS id
			FROM ".T_HISTORY."
				, ".T_GAME."
			WHERE ".T_HISTORY.".h_game_id = ".T_GAME.".g_id
				AND g_game_message IN ('Draw', 'Player Resigned', 'Checkmate')
			GROUP BY h_game_id
		";
		$gamedata = $mysql->fetch_array($query, __LINE__, __FILE__);

		// parse through each, compare with current, and add stats as needed
		foreach ($gamedata as $game)
		{
			// clear any previous query
			$query = '';

			if ( ! isset($curstats[$game['id']]))
			{
				$query = "
					INSERT INTO ".T_STAT."
						(s_id, s_days, s_moves)
					VALUES
						('{$game['id']}', '{$game['days']}', '{$game['moves']}')
				";
			}
			elseif ($curstats[$game['id']]['moves'] != $game['moves'] || $curstats[$game['id']]['days'] != $game['days'])
			{
				$query = "
					UPDATE ".T_STAT."
					SET s_moves = '{$game['moves']}'
						, s_days  = '{$game['days']}'
					WHERE s_id = '{$game['id']}'
				";
			}

			// run the query
			if ('' != $query)
			{
				$mysql->query($query, __LINE__, __FILE__);
			}
		}
		//*/

		// stats -----------------------------------------------------------

		$query = "
			SELECT distinct concat('#',g_id,'  ',(select p_username from ".T_PLAYER." WHERE p_id = g_white_player_id),' - ',(select p_username from ".T_PLAYER." WHERE p_id = g_black_player_id)) as joueurs
				, s_days
			FROM ".T_STAT."
			JOIN ".T_GAME." ON g_id = s_id
			WHERE s_days IS NOT NULL
			ORDER BY s_days DESC
			LIMIT 0,5
		";

		$daysLdata = $mysql->fetch_array($query, __LINE__, __FILE__);


		$query = "
			SELECT distinct concat('#',g_id,'  ',(select p_username from ".T_PLAYER." WHERE p_id = g_white_player_id),' - ',(select p_username from ".T_PLAYER." WHERE p_id = g_black_player_id)) as joueurs
				, s_days
			FROM ".T_STAT."
			JOIN ".T_GAME." ON g_id = s_id
			WHERE s_days IS NOT NULL
			ORDER BY s_days ASC
			LIMIT 0,5
		";
		$daysSdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		$query = "
			SELECT distinct concat('#',g_id,'  ',(select p_username from ".T_PLAYER." WHERE p_id = g_white_player_id),' - ',(select p_username from ".T_PLAYER." WHERE p_id = g_black_player_id)) as joueurs
				, (s_moves - 1) as s_moves
			FROM ".T_STAT."
			JOIN ".T_GAME." ON g_id = s_id
			WHERE s_moves IS NOT NULL
			ORDER BY s_moves DESC
			LIMIT 0,5
		";
		$movesLdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		$query = "
			SELECT distinct concat('#',g_id,'  ',(select p_username from ".T_PLAYER." WHERE p_id = g_white_player_id),' - ',(select p_username from ".T_PLAYER." WHERE p_id = g_black_player_id)) as joueurs
				,(s_moves - 1) as s_moves
			FROM ".T_STAT."
			JOIN ".T_GAME." ON g_id = s_id
			WHERE s_moves IS NOT NULL
			ORDER BY s_moves ASC
			LIMIT 0,5
		";
		$movesSdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		$query = "
			SELECT s_id
				, MAX(ABS(s_streak)) AS s_streak
				, p_username
			FROM ".T_STAT."
				LEFT JOIN ".T_PLAYER."
					ON p_id = s_id
			WHERE s_streak IS NOT NULL
			GROUP BY s_id
			ORDER BY s_streak DESC
			LIMIT 0,5
		";
		$streakdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		$query = "
			SELECT *
			FROM ".T_PLAYER."
			ORDER BY p_rating DESC
		";
		$playerdata = $mysql->fetch_array($query, __LINE__, __FILE__);

		$query = "
			SELECT p_username,
			(p_wins + p_draws + p_losses) as nb_p
			FROM ".T_PLAYER."
			WHERE p_wins + p_draws + p_losses != 0
			ORDER BY nb_p DESC
			LIMIT 0,5
		";
		$statspartiejouees = $mysql->fetch_array($query, __LINE__, __FILE__);

		break;

// =========================================================================
	case 'messages' :

		if (isset($_POST['action'])) {
			try {
				switch ($_POST['action']) {
					case 'read' :
						$Message->set_message_read($_POST['ids']);
						break;

					case 'unread' :
						$Message->set_message_unread($_POST['ids']);
						break;

					case 'delete' :
						$Message->delete_message($_POST['ids']);
						break;

					default :
						break;
				}
			}
			catch (Exception $e) { }
		}

		break;

// =========================================================================
	case 'send' :

		if (isset($_POST['submit'])) {
			// clean the data
			$subject = $_POST['subject'];
			$message = $_POST['message'];
			$user_ids = (array) ife($_POST['user_ids'], array( ), false);
			$send_date = ife($_POST['send_date'], false, false);
			$expire_date = ife($_POST['expire_date'], false, false);

			try {
				$Message->send_message($subject, $message, $user_ids, $send_date, $expire_date);
			}
			catch (Exception $e) {
			}

			header('Location: index.php?page=messages');
			exit;
		}

		$message = array(
			'subject' => '',
			'message' => '',
		);

		if (isset($_GET['id'])) {
			try {
				if (isset($_GET['type']) && ('fw' == $_GET['type'])) { // forward
					$message = $Message->get_message_forward((int) $_GET['id']);
				}
				elseif (isset($_GET['type']) && ('rs' == $_GET['type'])) { // resend
					$message = $Message->get_message((int) $_GET['id']);
				}
				else { // reply
					$message = $Message->get_message_reply((int) $_GET['id']);
					$reply_flag = true;
				}
			}
			catch (Exception $e) { }
		}

		// grab a list of the players
		$query = "
			SELECT `p_id`
				, `p_username`
			FROM `".T_PLAYER."`
			ORDER BY `p_username`
		";
		$list = $mysql->fetch_array($query);

		$recipient_options = '';
		if (is_array($list)) {
			// send global messages if we can
			if ($_SESSION['is_admin']) {
				$recipient_options .= '<option value="0">GLOBAL</option>';
			}

			$recipient_id = (isset($message['recipients'][0]['from_id']) && ! empty($reply_flag)) ? $message['recipients'][0]['from_id'] : 0;

			foreach ($list as $player) {
			
				// remove ourselves from the list
				if ($player['p_id'] == $_SESSION['player_id']) {
					continue;
				}
					if ($player['p_id'] == 1){ $sel = 'selected';}else{$sel="";} // envoie à l'admin à défaut, il faut un destinataire à défaut.
					$recipient_options .= '<option '.$sel.' value="'.$player['p_id'].'"'.get_selected($recipient_id, $player['p_id']).'>'.$player['p_username'].'</option>';
				
			}
		}

		break;

// =========================================================================
	case 'read' :

		if (isset($_POST['type']) && ('' != $_POST['type'])) {
			switch ($_POST['type']) {
				case 'delete' :
					$Message->delete_message((int) $_POST['message_id']);
					header('Location: index.php?page=messages');
					exit;
					break;

				default :
					break;
			}
		}

		if ( ! isset($_GET['id'])) {
			session_write_close( );
			header('Location: index.php?page=messages');
			exit;
		}

		try {
			$message = $Message->get_message($_GET['id'], $_SESSION['is_admin']);
			$message['message'] = str_replace("\t", '    ', $message['message']);
			$message['message'] = str_replace('  ', '  ', $message['message']);
			$message['message'] = htmlentities($message['message'], ENT_QUOTES, 'UTF-8', false);
			$message['message'] = nl2br($message['message']);

			$message['subject'] = htmlentities($message['subject'], ENT_QUOTES, 'UTF-8', false);

			// find out if we're reading an inbox message, or an outbox message
			if ($message['inbox']) {
				$list = $Message->get_outbox_list( );
			}
			elseif ($message['allowed']) {
				$list = $Message->get_inbox_list( );
			}
			else {
				$list = $Message->get_admin_list( );
			}
		}
		catch (Exception $e) { }

		// grab data for our prev | next links
		$prev = false;
		$next = false;
		$current = false;
		$prev_item = false;
		foreach ($list as $item) {
			if ($current) {
				$current = false;
				$next = $item['message_id'];
			}

			if ($item['message_id'] == $_GET['id']) {
				$current = true;
				$prev = $prev_item['message_id'];
			}

			$prev_item = $item;
		}

		break;

// =========================================================================
	case 'prefs' :

		//******************************************************************
		//  update your preferences
		//******************************************************************

		if (isset($_POST['selHistory']))
		{
			call("UPDATE PREFS");
			// set auto-reload preference
			$reload = (is_numeric($_POST['txtReload']) && ( intval($_POST['txtReload']) >= $CFG_MINAUTORELOAD) ) ? $_POST['txtReload'] : $CFG_MINAUTORELOAD;

			$lastMove = isset($_POST['boxLastMove']) ? 1 : 0;

			// Theme
			$query = "
				UPDATE ".T_PLAYER."
				SET p_theme         = '{$_POST['rdoTheme']}'
					, p_history     = '{$_POST['selHistory']}'
					, p_auto_reload = '".sani($reload)."'
					, p_max_games   = '".sani($_POST['txtmaxGames'])."'
					, p_show_last_move = '{$lastMove}'
				WHERE p_id = '{$_SESSION['player_id']}'
			";
			$mysql->query($query, __LINE__, __FILE__);

			// update current session vars with a page refresh
			header('Location: index.php?page=prefs');
			exit;
		}
		//*/

		break;

// =========================================================================
	case 'personal' :
	    	//print_r(array($_SESSION['username']));

		//******************************************************************
		//  Mise à jour infos perso à partir du menu "Espace perso."
		//******************************************************************

		if (isset($_POST['txtFirstName'])) //Prénom
		{
			$query = "
				SELECT p_password
				FROM ".T_PLAYER."
				WHERE p_id = '{$_SESSION['player_id']}'
			";
			$dbPassword = $mysql->fetch_value($query, __LINE__, __FILE__);

			if ((isset($_POST['pwdPassword']) && ('' != $_POST['pwdPassword'])) && ! password_test($_POST['pwdOldPassword'], $dbPassword))//pwdPassword correspond au nouveau mot de passe. pwdOldPassword correspond au mot de passe actuel. 
			
			{
				$errMsg = "Désolé, le mot de passe est incorrect!";
			}
			else
			{
				$doUpdate = true;

				if ($CFG_CHANGEUSERNAME)
				{
					$query = "
						SELECT p_id
						FROM ".T_PLAYER."
						WHERE p_username = '".sani($_POST['txtUsername'])."'
							AND p_id != '{$_SESSION['player_id']}'
					";//txtUsername = $_SESSION['username']
					$mysql->query($query, __LINE__, __FILE__);

					if (0 < $mysql->num_rows( ))
					{
						$errMsg = "Désolé, ce nom d\'utilisateur est déjà utilisé.";
						$doUpdate = false;
					}
				}

				// if it's set, then it's allowed - si Ok =>ligne suivante.
				$email = isset($_POST['txtEmail']) ? $_POST['txtEmail'] : '';//$email prend pour valeur l'e-mail entré dans le champ "Votre adresse email" 

				if ($doUpdate)
				{
					// update DB
					$query = "
						UPDATE ".T_PLAYER."
						SET p_first_name  = '".sani($_POST['txtFirstName'])."'
							, p_last_name = '".sani($_POST['txtLastName'])."'
				 			, p_email     = '".sani($email)."'
					"; // Mise à jour Prénom, nom et e-mail effectuée.

					if (isset($_POST['pwdPassword']) && ('' != $_POST['pwdPassword']))
					{
						$query .= " , p_password = '".password_make($_POST['pwdPassword'])."' "; // continued...
					}

					if ((false != $CFG_CHANGEUSERNAME) && ('' != $_POST['txtUsername']))
					{
						$_SESSION['username'] = $_POST['txtUsername'];
						$query .= " , p_username = '".sani($_POST['txtUsername'])."' "; // continued...
					}

					$query .= " WHERE p_id = '{$_SESSION['player_id']}' ";
					$mysql->query($query, __LINE__, __FILE__);

					// update current session vars with a page refresh - mettre à jour les variables de la session en cours avec un rafraîchissement de page.
					header('Location: index.php?page=personal');
					exit;
				}
			}
		}
		//*/


		//******************************************************************
		//  test your email address
		//******************************************************************
		
		if (isset($_POST['testmail']) && (false != $CFG_USEEMAIL))
		{
			webchessMail('test', $_SESSION['email'], '', '', '');
		}
        //*/

		break;

// =========================================================================
	case 'admin' :
		require_once 'webchessmail.inc.php';

		//******************************************************************
		//  run administration functions
		//******************************************************************

		if (isset($_POST))
		{
			// set all admin flags to 0...
			$query = "
				UPDATE ".T_PLAYER."
				SET p_is_admin = '0'
				WHERE 1
			";
			$mysql->query($query, __LINE__, __FILE__);

			// set the current user to admin
			// because if they accessed this, they are admin
			$query = "
				UPDATE ".T_PLAYER."
				SET p_is_admin = '1'
				WHERE p_id = '{$_SESSION['player_id']}'
				LIMIT 1
			";
			$mysql->query($query, __LINE__, __FILE__);

			// update admin before deleting
			if ( isset($_POST['admin']) )
			{
				foreach ( $_POST['admin'] as $user )
				{
					// ...then adminify all the checked ones
					$query = "
						UPDATE ".T_PLAYER."
						SET p_is_admin = '1'
						WHERE p_id = '{$user}'
						LIMIT 1
					";
					$mysql->query($query, __LINE__, __FILE__);
				}
			}

			// reset passwords before deleting as well
			if ( isset($_POST['resetpass']) )
			{
				foreach ( $_POST['resetpass'] as $user )
				{
					// reset the password to change!me
					$pass = password_make('change!me');
					$query = "
						UPDATE ".T_PLAYER."
						SET p_password = '{$pass}'
						WHERE p_id = '{$user}'
						LIMIT 1
					";
					$mysql->query($query, __LINE__, __FILE__);
				
					$query = "
						SELECT p_email
						FROM ".T_PLAYER."
						WHERE p_id = '{$user}'
					";
					$email = $mysql->fetch_value($query, __LINE__, __FILE__);
					
					call("webchessMail('passupdate',$email,'','','')");
					webchessMail('passupdate',$email,'','','');
				}
			}

			$i = 0;
			if ( isset($_POST['delete']) )
			{
				foreach ( $_POST['delete'] as $user )
				{
					$query = "
						SELECT p_username
						FROM ".T_PLAYER."
						WHERE p_id = '{$user}'
					";
					$name = $mysql->fetch_value($query, __LINE__, __FILE__);

					// protect the root admin, just in case
					if ($CFG_ROOT_ADMIN != $name)
					{
						// find all the games that user was playing
						$query = "
							SELECT g_id
							FROM ".T_GAME."
							WHERE g_black_player_id = '{$user}'
								OR g_white_player_id = '{$user}'
						";
						$list = $mysql->fetch_value_array($query, __LINE__, __FILE__);
						call('list');
						$list[] = 0;
						$games = implode(',', $list);

						// delete all database entries related to those games
						$query = "
							DELETE FROM ".T_CHAT."
							WHERE c_game_id IN ({$games})
						";
						$mysql->query($query, __LINE__, __FILE__);

						$query = "
							DELETE FROM ".T_HISTORY."
							WHERE h_game_id IN ({$games})
						";
						$mysql->query($query, __LINE__, __FILE__);

						$query = "
							DELETE FROM ".T_MESSAGE."
							WHERE m_game_id IN ({$games})
						";
						$mysql->query($query, __LINE__, __FILE__);

						$query = "
							DELETE FROM ".T_GAME."
							WHERE g_id IN ({$games})
						";
						$mysql->query($query, __LINE__, __FILE__);						

						// Supprimer le joueur
						$query = "
							DELETE FROM ".T_PLAYER."
							WHERE p_id = {$user}
							LIMIT 1
						";
						$mysql->query($query, __LINE__, __FILE__);
						$i++;
					}
				}
			}
			if ( isset($i) && $i )
			{
				$errMsg = "! {$i} users deleted !";
			}
		}

		// admin -----------------------------------------------------------

		$query = "
			SELECT *
				, UNIX_TIMESTAMP(p_created) AS u_created
			FROM ".T_PLAYER."
			WHERE p_id != '{$_SESSION['player_id']}'
				AND p_username != '{$CFG_ROOT_ADMIN}'
			ORDER BY p_username
		";
		$admin = $mysql->fetch_array($query, __LINE__, __FILE__);

		break;

// ====================================================
	default :
		// send them to the login page, if they are logged in
		// it will send them back to the index with proper data
		header('Location: login.php');
		exit;
		break;
} // the big switch


//******************************************************************************
//  run the queries (needed outside for the menu)
//******************************************************************************

// active ------------------------------------------------------------------

$query = "
	SELECT G.*
		, UNIX_TIMESTAMP(G.g_date_created) AS u_date_created
		, UNIX_TIMESTAMP(G.g_last_move) AS u_last_move
		, COUNT(H.h_time) - 1 AS num_moves
		, P1.p_username AS white_username
		, P2.p_username AS black_username
	FROM ".T_GAME." AS G
		LEFT JOIN ".T_HISTORY." AS H
			ON H.h_game_id = G.g_id
		LEFT JOIN ".T_PLAYER." AS P1
			ON P1.p_id = G.g_white_player_id
		LEFT JOIN ".T_PLAYER." AS P2
			ON P2.p_id = G.g_black_player_id
	WHERE G.g_game_message = ''
		AND (
			G.g_white_player_id = '{$_SESSION['player_id']}'
			OR G.g_black_player_id = '{$_SESSION['player_id']}'
		)
	GROUP BY G.g_id
	ORDER BY G.g_date_created
";
$active = $mysql->fetch_array($query, __LINE__, __FILE__);
$numActive = $mysql->num_rows( );

// messages ----------------------------------------------------------------
list($numMsgs, $newMsgs) = Message::get_count($_SESSION['player_id']);

// invites -----------------------------------------------------------------
$query = "
	SELECT G.*
		, UNIX_TIMESTAMP(G.g_date_created) AS u_date_created
		, P1.p_username AS white_username
		, P2.p_username AS black_username
		, 'invite' AS invite
		, 0 AS num_moves
	FROM ".T_GAME." AS G
		LEFT JOIN ".T_PLAYER." AS P1
			ON P1.p_id = G.g_white_player_id
		LEFT JOIN ".T_PLAYER." AS P2
			ON P2.p_id = G.g_black_player_id
	WHERE G.g_game_message = 'Player Invited'
		AND (
			(
				G.g_white_player_id = '{$_SESSION['player_id']}'
				AND G.g_message_from = 'black'
			)
			OR (
				G.g_black_player_id = '{$_SESSION['player_id']}'
				AND G.g_message_from = 'white'
			)
		)
	ORDER BY G.g_date_created
";
$invites = $mysql->fetch_array($query, __LINE__, __FILE__);
$numInvites = $mysql->num_rows( );

// outvites ----------------------------------------------------------------

// if game is marked playerInvited and the invite is from the current player
// OR game is marked inviteDeclined and the response is from the opponent
$query = "
	SELECT G.*
		, UNIX_TIMESTAMP(G.g_date_created) AS u_date_created
		, P1.p_username AS white_username
		, P2.p_username AS black_username
		, 'outvite' AS outvite
		, 0 AS num_moves
	FROM ".T_GAME." AS G
		LEFT JOIN ".T_PLAYER." AS P1
			ON P1.p_id = G.g_white_player_id
		LEFT JOIN ".T_PLAYER." AS P2
			ON P2.p_id = G.g_black_player_id
	WHERE
		(
			G.g_game_message = 'Player Invited'
			AND (
				(
					G.g_white_player_id = '{$_SESSION['player_id']}'
					AND G.g_message_from = 'white'
				)
				OR (
					G.g_black_player_id = '{$_SESSION['player_id']}'
					AND G.g_message_from = 'black'
				)
			)
		)
		OR (
			G.g_game_message = 'Invite Declined'
			AND (
				(
					G.g_white_player_id = '{$_SESSION['player_id']}'
					AND G.g_message_from = 'black'
				)
				OR (
					G.g_black_player_id = '{$_SESSION['player_id']}'
					AND G.g_message_from = 'white'
				)
			)
		)
	ORDER BY G.g_date_created
";

$outvites = $mysql->fetch_array($query, __LINE__, __FILE__);
$numOutvites = $mysql->num_rows( );


// others ------------------------------------------------------------------

// generate a list of games with at least one move in it
$query = "
	SELECT DISTINCT h_game_id
		, COUNT(*) AS h_moves
	FROM ".T_HISTORY."
	GROUP BY h_game_id
";
$result = $mysql->fetch_array($query, __LINE__, __FILE__);

foreach ($result as $game)
{
	$others[] = $game['h_game_id'];
	$count[$game['h_game_id']] = $game['h_moves'];
}

$list = isset($others) ? implode(',',$others) : 0;

// now select all current games from that list
$query = "
	SELECT G.*
		, UNIX_TIMESTAMP(G.g_date_created) AS u_date_created
		, UNIX_TIMESTAMP(G.g_last_move) AS u_last_move
		, COUNT(H.h_time) - 1 AS num_moves
		, P1.p_username AS white_username
		, P2.p_username AS black_username
	FROM ".T_GAME." AS G
		LEFT JOIN ".T_HISTORY." AS H
			ON H.h_game_id = G.g_id
		LEFT JOIN ".T_PLAYER." AS P1
			ON P1.p_id = G.g_white_player_id
		LEFT JOIN ".T_PLAYER." AS P2
			ON P2.p_id = G.g_black_player_id
	WHERE G.g_game_message = ''
		AND G.g_id IN ({$list})
		AND G.g_white_player_id != '{$_SESSION['player_id']}'
		AND G.g_black_player_id != '{$_SESSION['player_id']}'
	GROUP BY G.g_id
	ORDER BY G.g_date_created
";
$others = $mysql->fetch_array($query, __LINE__, __FILE__);
$numOthers = $mysql->num_rows( );

// done --------------------------------------------------------------------
$query = "
	SELECT G.*
		, UNIX_TIMESTAMP(G.g_date_created) AS u_date_created
		, UNIX_TIMESTAMP(G.g_last_move) AS u_last_move
		, COUNT(H.h_time) - 1 AS num_moves
		, P1.p_username AS white_username
		, P2.p_username AS black_username
	FROM ".T_GAME." AS G
		LEFT JOIN ".T_HISTORY." AS H
			ON h_game_id = G.g_id
		LEFT JOIN ".T_PLAYER." AS P1
			ON P1.p_id = G.g_white_player_id
		LEFT JOIN ".T_PLAYER." AS P2
			ON P2.p_id = G.g_black_player_id
	WHERE G.g_game_message NOT IN ('','Player Invited','Invite Declined')
	GROUP BY G.g_id
	ORDER BY G.g_id
";
$done = $mysql->fetch_array($query, __LINE__, __FILE__);
$numDone = $mysql->num_rows( );

// other various bits ------------------------------------------------------
// get number of players
$query = "
	SELECT COUNT(*)
	FROM ".T_PLAYER."
";
$numPlayers = $mysql->fetch_value($query, __LINE__, __FILE__);

// get number of active games
$query = "
	SELECT COUNT(*)
	FROM ".T_GAME."
	WHERE g_game_message = ''
";
$numGames = $mysql->fetch_value($query, __LINE__, __FILE__);

// get number of total games
$query = "
	SELECT MAX(g_id)
	FROM ".T_GAME."
";
$totGames = $mysql->fetch_value($query, __LINE__, __FILE__);

$numMyturn = get_num_mine($active);
?>


Pour trouver la raison de cette anomalie le site me renvoie l'erreur suivante:
Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/index.inc.php on line 9 Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/login.inc.php on line 121 Warning: Cannot modify header information - headers already sent by (output started at /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/index.inc.php:9) in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/login.inc.php on line 125

Le vaccin est trouvé.
Ainsi serait il possible de m'orienter pour trouver le remède?
Moralité:
Ne jamais laisser "trainer" les arobases en début de ligne !!!

Merci d'avance
Configuration: Windows / Opera Next 36.0.2130.80

18 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 févr. 2020 à 11:34
Bonjour,

Le message
Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active

Donne les informations utiles à la résolution de ton souci.

En gros... il te dit que tu ne peux pas utiliser cette fonction si tu as déjà fais un session_start
Tu peux éventuellement vérifier si la session est déjà démarrée ou non avant de faire cette instruction et de démarrer la session
un truc du genre
if (session_status() == PHP_SESSION_NONE) {
    session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
    session_start();
}

0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
19 févr. 2020 à 11:35
Bonjour,

En gros, la première erreur indique que tu appelles session_set_cookie_params à un moment interdit (parce que la session est déjà active). Elle a probablement déjà été ouverte précédemment.
Du coup pour corriger le problème, je te suggère d'effectuer un test sur l'état de la session :
if (session_status() !== PHP_SESSION_ACTIVE)
{
    session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
    session_start();
}


Les autres erreurs sont me semble-t-il des conséquences de cette première erreur, et devraient disparaître avec elle.

Xavier
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 févr. 2020 à 12:05
Merci de prendre en considération mon problème.

J'ai donc mis en application les deux codes que vous m'avez proposé et dont voici la partie utile du fichier php:

<?php
$parts = pathinfo($_SERVER['REQUEST_URI']);
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	//$path .= '/'.$parts['jeuxechecs_fr'];
	$path .= '/index.php';
}
$path = str_replace('\\', '/', $path).'/';

/*if (session_status() == PHP_SESSION_NONE) {
    session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
    session_start();
    echo "bonjour";
}*/

if (session_status() !== PHP_SESSION_ACTIVE)
{
    session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
    session_start();
    echo "bonjour";
}

//@session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
//session_start();


//Inhibé les lignes 1120 à 1125 inclus
// note to developers :
// before each section, there is a header that begins with somthing like

	//**********************************************************************
	//  this is the header
	//**********************************************************************

// and after the respective section there is an entity like

	//*/

// together these entities create a switchable comment block. - ensemble, ces entités créent un bloc de commentaires commutable.
// when used together, all you need to do is remove one of the forward slashes ( / )
// from either of the lines containing asterisks ( * ) to make a line like - à partir des lignes contenant des astérisques (*) pour créer une ligne comme

	/***********************************************************************

	... everything in here is commented out with one easy character change ...

	//*/

// by finding a commented block of code, all you need to do is add the missing /
// to the line that is missing one. ( i usually remove the slash from the lower of
// the two lines )
//
// i specifically use various comment styles to denote what kind of comment it is.
// for instance, i use // to denote a 'real' comment, where i am commenting on a
// piece of code, i use /* */ to comment out blocks of code that i don't wish to run
// and i use # to temporarily comment out single lines or small sections of code.
//
// ... although there may be other comments elsewhere that other people created that
// do not follow this protocol


// set the session cookie parameters so the cookie is only valid for this game

// load settings
require_once 'config.inc.php';
require 'login.inc.php';
require_once 'html.inc.php';
require_once 'html.tables.php';


J'ai d'abord en premier lieu mis en place le script indiqué par Jordane45 afin d'observer le résultat.
Puis celui de Reivax962 qui présente le même résultat.

C'est à dire que la condition est false.
Je m'en suis totalement assuré avec la ligne:
echo "bonjour";

Donc le message Bonjour n'apparait pas sur la page où se trouvait le message warning.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 févr. 2020 à 12:16
En supplément d'information,
lorsque j'applique le script de Jordane45 ou de Reivax962, je n'ai plus de message warning mais je ne peux pas écrire de message dans le chat.
Ce qui démontrerait de surcroit que je n'entre pas dans la condition en question.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 févr. 2020 à 13:08
les modifications proposées ne devraient pas influencer le comportement du site. elles ont le même effet que l'arobase.
en fait, qu'est-ce qui te fait croire que ton problème aléatoire de chat est lié à l'avertissement?
d'autant plus que l'avertissement ne me semble pas aléatoire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 févr. 2020 à 12:19
bonjour, je me demande tout de même pourquoi la page principale (celle qui fait appel à la page index.inc.php) a déjà fait un session_start(). c'est peut-être cela qu'il faut corriger.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 févr. 2020 à 12:32
Effectivement, cette page que je présente et que j'ai oublié de nommer correspond à un fichier appelé index.inc.php.
Mais comment l'avez vous deviné?
Maintenant si ce que vous écrivez peut être ce qui mènerait à la solution,
comment puis je savoir quel est le fichier (sans doute PHP) qui fait appel à index.inc.php ?
Sur le moment comme ça je n'en ai pas d'idée.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 févr. 2020 à 12:43
je n'ai pas deviné, le nom du fichier est dans le message d'avertissement.
c'est bien un fichier PHP qui fait appel, c'est peut-être celui qui correspond à l'adresse affichée sur le navigateur.
je viens de tester ton site, je vois que index.php cause cette erreur.

Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/index.inc.php on line 9

Warning: Cannot modify header information - headers already sent by (output started at /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/includes/index.inc.php:9) in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/login.inc.php on line 177

tu progresses, ce n'est plus une erreur aléatoire.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 févr. 2020 à 12:50
Moi je dirais: moralité, il ne faut jamais mettre d'arobase en début de ligne sans avoir bien compris ce qui provoquait l'avertissement, et sans ajouter de commentaire décrivant tout cela, et aussi quand cette arobase a été ajouté, et par qui.

est-il trop tard pour déterminer tout cela?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 févr. 2020 à 14:14

J'ai donc mis en application les deux codes que vous m'avez proposé

Sachant que Reivax et moi même t'avons donné le même code...
Donc que tu prennes mon code ou l'autre ... ou celui de reivax ou l'autre ... ou l'un ou l'autre ou l'autre ou l'un.... bref.... c'est tout pareil.
Bien entendu, comme tu ne fais pas que copier bêtement le code et que tu prends la penne de le lire et d'essayer de le comprendre tu as ( aurais...) dû t'en rendre compte.


les modifications proposées ne devraient pas influencer le comportement du site. elles ont le même effet que l'arobase.

Oui mais non...
Car dans le code qu'on propose on gère également le démarrage de session qui lui n'était pas préfixé par un arobase.
L'arobase servant uniquement à masquer les éventuelles erreurs alors que nous... nous empêchons l'erreur en question.

Je précise également que les instructions genre "session_start" sont à placer TOUT au début de ton code.... AVANT tout autre code...
Et vu que la page en question est "inclue" depuis une autre page.... c'est dans cette autre page que tu dois placer notre code...



0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 févr. 2020 à 14:21
L' arobase à été placé par moi il y a au moins 2 ou 3 ans.
A l'époque il est vrai que c'était une solution de facilité.Mais si j' avais découvert la cause du Warning, il n'y aurait plus eut lieu pour moi d'utiliser cet arobase.
Mais je me demande si le fait de passer à PHP7 il y a 1an et demi n'a pas déclenché ces problèmes aléatoires?

Quoi qu'il en soit, voici le fichier index.php qui appelle index.inc.php:

<?php
session_start();
require 'includes/index.inc.php';
require 'voir_membres.php';
 
if ( ! isset($page))
{
	header('Location: login.php');
	exit;
}
//echo $_COOKIES['WelChessData'];
$contents = (isset($errMsg) && ('' != $errMsg)) ? '<div class="warning">'.$errMsg.'</div>' : '';
// generate the page based on which page we are looking at
switch ($page)
{
// ====================================================

	case 'mygames' :
	    $membre=$_SESSION['membres'];	   		
		$contents .= '
			<form name="games" action="chess.php" method="post"><br>
			<h3>Pour inviter un joueur il faut cliquer sur le bouton <span style="text-decoration: underline; color:#e30000;font-size:18px">Invitations</span> situé à gauche.<br /><br />
			<p style="text-align: center;color:#000;font-size:18px">Mes parties.</p>
				';
				
		$label  = '';
		//require_once 'chat.php';
		$no_data_label = 'Vous n\'avez actuellement aucune de parties en cours.';
		$contents .= get_game_table($label, $no_data_label, $active, $type = 'mine');

		$contents .= '
		
				<div>
					<br />
					<span style="color:blue;font-size:18px;">Les 2 joueurs joueront-ils à partir du meme pc ?</span>
					<label><input name="rdoShare" type="radio" value="yes" />Oui</label> |
					<label><input name="rdoShare" type="radio" value="no" checked="checked" />Non</label>
					
					
				</div>
				<input type="hidden" name="game_id" value="" />
			</form>
		';
		
		$expire = (0 != $CFG_EXPIREGAME) ? 'Les parties seront effacées après '.$CFG_EXPIREGAME.' jours d\'inactivité.' : '';

		$hint = array(
			"<h3>Selectionnez une partie dans la liste et commencez à jouer en cliquant n'importe ou sur la ligne.</h3> ",
			"<h3>Les lignes colorées indiquent que c'est à votre tour de jouer. <h3>",
			$expire ,
		);

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'current' :
		$contents .= '
			<form name="games" action="watchgame.php" method="post"><br>
				<h2>Parties en cours</h2>
				';

		$label  = '';
		$no_data_label = 'Il n\'y a actuellement aucune autre partie en cours.';

		$contents .= get_game_table($label, $no_data_label, $others, $type = 'others');

		$contents .= '
				<input type="hidden" name="game_id" value="" />
				<input type="hidden" name="rdoShare" value="non" />
				<input type="hidden" name="rdoShare" value="non" /> <!-- Deux sont nécessaires pour simuler deux boutons radio -->
			</form>
		';

		$hint = array(
			'Selectionnez une partie dans la liste en cliquant n\'importe ou sur la ligne.' ,
			'Ou <a href="./pgn">selectionnez une partie à voir</a> et téléchargez le fichier pgn dans votre logiciel d\'echecs favori.' ,
			'Des logiciels gratuits pour visionner les fichiers pgn peuvent etre téléchargés sur : <a href="http://www.tim-mann.org/xboard.html">XBoard et WinBoard</a>' ,
		);

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'finished' :
		$contents .= '
			<form name="games" action="watchgame.php" method="post"><br>
				<h2>Voir toutes les parties terminées</h2>
				';

		$label  = '';
		$no_data_label = 'Il n\'y a actuellement aucune partie terminée.';

		$contents .= get_game_table($label, $no_data_label, $done, $type = 'finished');

		$contents .= '
				<input type="hidden" name="game_id" value="" />
				<input type="hidden" name="rdoShare" value="non" />
				<input type="hidden" name="rdoShare" value="non" /> <!-- Deux sont nécessaires pour simuler deux boutons radio -->
			</form>
		';

		$hint = array(
			'Selectionnez une partie a voir dans la liste en cliquant n\'importe ou sur la ligne.' ,
			'Ou <a href="./pgn">selectionnez une partie à voir</a> et téléchargez le fichier pgn dans votre logiciel d\'echecs favori.' ,
			'Des logiciels gratuits pour visionner les fichiers pgn peuvent etre téléchargés sur : <a href="http://www.tim-mann.org/xboard.html">XBoard et WinBoard</a>' ,
		);	

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'invite' :
		$contents .= '
			<form name="response" action="index.php?page=invite" method="post"><br/>
			<h2 style="text-align: center">Vos invitations en attente</h2>
				';

		$label  = 'Invitations envoyées par d\'autres joueurs:';
		$no_data_label = 'Aucun joueur ne vous a invité pour le moment.';

		$contents .= get_game_table($label, $no_data_label, $invites, $type = 'invite')."<br>";

		$contents .= '
					<input type="hidden" name="respond" value="" />
					<input type="hidden" name="message_from" value="" />
					<input type="hidden" name="game_id" value="" />
				</form>
				<hr class="fancy" />
				<form name="withdraw" action="index.php?page=invite" method="post">
					';
		
		$label  = '<h2>Invitations envoyées par vous:</h2>';
		$no_data_label = 'Aucune de vos invitations n\'est restée sans réponse.';

		$contents .= get_game_table($label, $no_data_label, $outvites, $type = 'invite');

		$contents .= '
				<input type="hidden" name="game_id" value="" />
				<input type="hidden" name="withdrawl" value="yes" />
			</form>
			<br /><br />
			<form name="challenge" action="index.php?page=invite" method="post">
			<fieldset>
				<h2>Inviter un adversaire</h2>
				Sélectionnez un joueur:<br />
				<select name="opponent">
					';

					$query = "
						SELECT P.*
							, (
								SELECT COUNT(*)
								FROM ".T_GAME."
								WHERE (
										g_white_player_id = P.p_id
										OR g_black_player_id = P.p_id
									)
									AND g_game_message IN ('', 'Player Invited')
							) AS num_games
						FROM ".T_PLAYER." AS P
						WHERE p_id != '{$_SESSION['player_id']}'
						ORDER BY p_username
					";
					$players = $mysql->fetch_array($query, __LINE__, __FILE__);

					foreach ($players as $player)
					{
							if (($player['num_games']-5) > $player['p_max_games'])	
						{
							continue;
						}

						$contents .= "<option value=\"{$player['p_id']}\"> ({$player['p_rating']}) {$player['p_username']} </option>";
					}
			
			$contents .= '
				</select><br />
				<br />
				Votre couleur:<br />
				<label for="colorR"><input name="color" id="colorR" type="radio" value="random" checked="checked" />Au hasard</label> |
				<label for="colorW"><input name="color" id="colorW" type="radio" value="white" />Blancs</label> |
				<label for="colorB"><input name="color" id="colorB" type="radio" value="black" />Noirs</label><br />
				<br />';
				$contents .= '<input type="button" value="Inviter" class="button" onclick="validateInvite( );" />
			</form><br/><br/>';	
								
			if (false != $CFG_CHESS960)
			{
				 $contents .= '
				 <div id="gamebuttons">
				 <h2>Chess960 ID </h2>
				 <span id="castle">Connaître Chess960 -->
					<a href="./help/c960.html" class="help" onclick="window.open("./help/c960.html","help","resizable,scrollbars,width=550,height=500,top=50,left=50","_blank");return false;"><FONT COLOR="#0000ff"> ?</FONT></a></span>
				    </div>
				 (laissez vide pour une partie normal): 
				 <input name="txtId960" type="text" maxlength="3" /> <input type="button" name="randomid960" value="Au hasard" onclick="txtId960.value = Math.floor(Math.random( ) * 960);" /><br>
				 Ou entrez un nombre entre 0 et 959 pour jouer à Chess960, ou appuyez sur \'Au hasard\' pour créer une partie au hasard.<br />
				 ';
			}

			$contents .= '<input type="button" value="Inviter" class="button" onclick="validateInvite( );" />
			</form></fieldset>
		';
		
		$hint = array(
			'Ceci est un apercu de toutes vos invitations en attente.' ,
			'Vous pouvez Accepter ou Refuser n\'importe quelle invitation, ou vous pouvez annuler vos invitations à d\'autres joueurs.' ,
			'Vous pouvez aussi sélectionner un adversaire et lui envoyer une inviatation pour jouer une nouvelle partie.' ,
		);

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'stats' :
		$contents .= '
			<br><h2>Statistiques</h2>
		';

        $contents .= get_stats_table('Partie la plus longue (jours)', $daysLdata, 'days_long');
		$contents .= get_stats_table('Partie la plus longue (coups)', $movesLdata, 'moves_long');
		$contents .= get_stats_table('Partie la plus courte (jours)', $daysSdata, 'days_short');
		$contents .= get_stats_table('Partie la plus courte (coups)', $movesSdata, 'moves_short');	
		$contents .= get_stats_table('Le plus de parties jouées', $statspartiejouees, 'nb_game');

		$table_id = get_table_id( );
		$contents .= '
				<table style="" class="sort-table" id="'.$table_id.'">

					<caption style="text-align:left;"><h2>Liste des joueurs</h2></caption>
					<thead>
						<tr>
							<th title="Pseudo">Joueur</th>
							<th></th>
							<th title="Les points de départ sont initialisés à '.$CFG_RATING_START.' quand le joueur s\'inscrit sur le site et est calculé au moyen d\'un algorithme utilisant
								'.$CFG_RATING_STEP.' comme variation maximum des points par partie.">Points</th>
						</tr>
					</thead>
					<tbody>
						';
					$i = 0;

		foreach ($playerdata as $tmpGame){
				//affichage des médailles dans la liste des joueurs
				// fonction dans chessutils.inc
			$medal = get_medal($tmpGame['p_username']);

									$alt = (0 == ($i % 2)) ? ' class="alt"' : '';

									$contents .= "

									<tr{$alt}>
										<td>{$tmpGame['p_username']}</td>
										<td>{$medal}</td>
										<td>{$tmpGame['p_rating']}</td>
									</tr>";

									++$i;
								}

							$contents .= '
								</tbody>
							</table>
					';

		$contents .= get_sorttable_script($table_id, 'StringCI,Number,Number,Number,Number');

		$hint = array(
			'Vous voyez ici les 5 meilleures parties (normales et Chess360).' ,
			'Vous pouvez revoir n\'importe quelle partie en notant le n° de partie et en cliquant \'Watch Game\'.  Dans la page qui s\'ouvre <a href="./pgn/">avec la liste des fichiers PGN des parties terminées.</a>.' ,
			'Toutes les parties dans cette liste sont des parties terminées.' ,
			'L\'ELO de depart du joueur est initialisé a '.$CFG_RATING_START.' et peut varier par partie d\'un maximum de '.$CFG_RATING_STEP.' points.' ,
		);

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'messages' :

		$contents = '<br><h2>Messages</h2>
				<script type="text/javascript" src="javascript/messages.js"></script>

				<form method="post" action="'.$_SERVER['REQUEST_URI'].'"><div>
					<input type="button" name="send" id="send" value="Envoyer un message" />
					<br>
				</div></form>';

		// INBOX
		$messages = $Message->get_inbox_list( );
		$table_format = array(
			array('SPECIAL_CLASS', 'my_empty(\'[[[view_date]]]\')', 'highlight') ,
			array('SPECIAL_HTML', 'true', 'id="msg[[[message_id]]]"') ,
			array('Identifiant', 'message_id') ,
			array('Sujets', '###@htmlentities(strmaxlen(html_entity_decode(\'[[[subject]]]\', ENT_QUOTES), 25), ENT_QUOTES, \'UTF-8\', false)') ,
			array('Depuis', '###\'[[[sender]]]\'.(([[[global]]]) ? \' <span class="highlight">(<abbr title="GLOBAL">G</abbr>)</span>\' : \'\')') ,
			array('Date d\'envoi', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[send_date]]]\'), strtotime(\'[[[create_date]]]\'))') ,
			array('Date de lecture', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[view_date]]]\'), \'Jamais\')') ,
			array('Date d\'expiration', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[expire_date]]]\'), \'Jamais\')') ,
			array('<input type="checkbox" id="in_all" />', '<input type="checkbox" name="ids[]" value="[[[message_id]]]" class="in_box" />', 'false', 'class="edit"') ,
		);
		
		$table_meta = array(
			'sortable' => true ,
			'no_data' => '<!--<p>Il n\'y a aucun message dans votre boîte aux lettres.</p>--><!-- NO_INBOX -->' ,
			'caption' => 'Boîte de réception' ,
		);
		$table = get_table($table_format, $messages, $table_meta);

		// add the message edit form if we have messages shown
		if (false === strpos($table, 'NO_INBOX')) {
			$contents .= '
				<form method="post" action="'.$_SERVER['REQUEST_URI'].'"><div class="action">
					'.$table.'
					<select name="action" id="in_action" style="float:right;width:230px">
						<option  value="">Avec les messages sélectionnés</option>
						<option value="read">Marquer comme lus</option>
						<option value="unread">Marquer comme non lus</option>
						<option value="delete">Effacer</option>
					</select>
				</div></form>';
		}
		else {
			$contents .= $table;
		}

		// OUTBOX
		$result = $Message->get_outbox_list( );
		$table_format = array(
			array('SPECIAL_CLASS', ' ! [[[sent]]]', 'unsent') ,
			array('SPECIAL_HTML', 'true', 'id="msg[[[message_id]]]"') ,

			array('Identifiant', 'message_id') ,
			array('Sujets', '###@htmlentities(strmaxlen(html_entity_decode(\'[[[subject]]]\'), 25), ENT_QUOTES, \'UTF-8\', false)') ,
			array('Vers', 'recipients') ,
			array('Date d\'envoi', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[send_date]]]\'), strtotime(\'[[[create_date]]]\'))') ,
			array('Date d\'expiration', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[expire_date]]]\'), \'Jamais\')') ,
			array('<input type="checkbox" id="out_all" />', '<input type="checkbox" name="ids[]" value="[[[message_id]]]" class="out_box" />', 'false', 'class="edit"') ,
		);
		$table_meta = array(
			'sortable' => true ,
			'no_data' => '<!--<p>Il n\'y a aucun message dans votre boîte aux lettres</p>--><!-- NO_OUTBOX -->' ,
			'caption' => 'Boîte d\'envoi' ,
		);
		$table = get_table($table_format, $result, $table_meta);

		// add the message edit form if we have messages shown
		if (false === strpos($table, 'NO_OUTBOX')) {
			$contents .= '
				<form method="post" action="'.$_SERVER['REQUEST_URI'].'"><div class="action">
					'.$table.'
					<select name="action" id="out_action" style="float:right;width:230px">
						<option value="">Avec les messages sélectionnés</option>
						<option value="delete">Effacer</option>
					</select>
				</div></form>';
		}
		else {
			$contents .= $table;
		}

		// ADMIN LIST
		if (false && $GLOBALS['Player']->is_admin) {
			$result = $Message->get_admin_list( );
			$table_format = array(
				array('SPECIAL_CLASS', ' ! [[[sent]]]', 'unsent') ,
				array('SPECIAL_HTML', 'true', 'id="msg[[[message_id]]]"') ,
				array('Id', 'message_id') ,
				array('Subject', '###@htmlentities(strmaxlen(html_entity_decode(\'[[[subject]]]\'), 25), ENT_QUOTES, \'UTF-8\', false)') ,
				array('From', 'sender') ,
				array('To', 'recipients') ,
				array('Date Sent', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[send_date]]]\'), strtotime(\'[[[create_date]]]\'))') ,
				array('Date Expires', '###@ifdateor(\''.$CFG_LONGDATE.'\', strtotime(\'[[[expire_date]]]\'), \'Jamais\')') ,
			);
			$table_meta = array(
				'sortable' => true ,
				'no_data' => '<p>Il n\'y a aucun message dans votre boîte aux lettres</p><!-- NO_ADMIN -->' ,
				'caption' => 'Liste de l\'administrateur' ,
			);
			$table = get_table($table_format, $result, $table_meta);

			// no form
			$contents .= $table;
		}
		
		$hint = array(
			'Cliquez n\'importe où sur la ligne pour lire votre message.' ,
			'<span class="highlight">Les lignes colorées</span> indiquent les messages non lus.' ,
			'<span class="highlight">(<abbr title="GLOBAL">G</abbr>)</span> Indique un message général envoyé par un administrateur.',
			'<span class="highlight">Les entrées colorées de la boîte d\'envoi</span> indiquent les messages qui n\'ont pas encore été expédiés.' ,
			'Les lignes colorées de la boîte de <span class="highlight">réception</span> indiquent les messages qui n\'ont pas encore été lus par le destinataire.' ,
			'Les dates colorées de la boîte <span class="highlight">d\'envoi</span> indiquent les messages qui n\'ont pas encore été expédiés.' ,
		);
		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'send' :

		$contents = '
			<style type="text/css">import url(css/vader/jquery-ui-1.8.13.custom.css);</style>
			<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
			<script type="text/javascript" src="javascript/messages.js"></script>
		';

		$subject = htmlentities($message['subject'], ENT_QUOTES, 'UTF-8', false);
		$message_text = htmlentities($message['message'], ENT_QUOTES, 'UTF-8', false);

		$contents .= <<< EOT
			<br><h2>Envoyer un message</h2>
			<div id="content" class="">
				
					<a href="index.php?page=messages">Retourner à la boîte de réception</a><br><br>
					<?php echo date(\''.$CFG_LONGDATE.'\'); ?>
				
				<form method="post" action="{$_SERVER['REQUEST_URI']}"><div class="formdiv">
					<div style='float:right;'>
						Appuyez et maintenez enfoncée la touche CTRL pour sélectionner plusieurs destinataires<br><br>
						<label for="user_ids">Destinataires</label><br><select name="user_ids[]" id="user_ids" multiple="multiple" size="5">
						{$recipient_options}
						</select>
					</div>
					<br>
					<div style='float:left;margin-left:220px;margin-top:-105px'><label alt="" for="send_date">Date d'envoi <br>(Laissez vide ce champ pour un envoi immédiat)</label><br><input type="text" name="send_date" id="send_date" /><br>
					<label for="expire_date">Date d'expiration <br>(Laissez vide ce champ pour que le message n'expire jamais)</label><br><input type="text" name="expire_date" id="expire_date" /></div>
					
					<div><label for="subject">Objet</label><br><input style='width:422px' type="text" name="subject" id="subject" value="{$subject}" size="50" maxlength="255" /></div>
					<div><label for="message">Message</label><br><textarea style='width:422px;max-width:422px;min-width:422px;max-height:500px;' name="message" id="message" rows="15" cols="50">{$message_text}</textarea></div>
					<div><label> </label><input type="submit" name="submit" value="Envoyer le message" /></div>
				</div></form>
			</div>
EOT;

		$monfichier = fopen('news.txt', 'r+');
		$tab = file('news.txt');
		 $lignes = "";
		foreach($tab as $li){
			$lignes .= fgets($monfichier);
		}
		
		$hint = $lignes;
		fclose($monfichier);

		$html = get_item($contents, $hint);

		break;

// ====================================================
	case 'read' :

		$contents = '
			<script type="text/javascript" src="scripts/messages.js"></script>';


			ob_start( );

?>
		<br><h2>Message</h2>
					<a href="index.php?page=messages">Retour boîte de réception</a><br/><br/>
	<div id="content" class="">
			Envoyé le:<?php echo @ifdateor($CFG_LONGDATE, strtotime($message['send_date']), strtotime($message['create_date'])); ?>		
		<h2 class="subject"><?php echo $message['subject']; ?> <span class="sender">De: <?php echo $message['recipients'][0]['sender']; ?></span></h2>
		<p class="message"><?php echo $message['message']; ?></p>

		<div style='float:none;' class="sidebar">
			<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
				<!-- <div class="prevnext">
					<?php if ($prev) { echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?id='.$prev.'">« Jamais</a>'; } ?>
					<?php if ($prev && $next) { echo ' <span>|</span> '; } ?>
					<?php if ($next) { echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?id='.$next.'">Retour aux parties »</a>'; } ?>
				</div> -->

<?php if ($message['allowed']) { ?>
				<br>
				<input type="hidden" name="message_id" id="message_id" value="<?php echo $message['message_id']; ?>" />
				<input type="hidden" name="type" id="type" />
				<input type="button" id="delete" value="Effacer" />

	<?php if ($message['recipients'][0]['from_id'] != $_SESSION['player_id']) { ?>

				<input type="button" id="reply" value="Répondre" />
				<input type="button" id="forward" value="Tranférer" />

	<?php } else { ?>

				<input type="button" id="resend" value="Renvoyer" />

	<?php } ?>

<?php } ?>
			</form>
			<div id="recipient_list">
				<h4>Liste des destinataires</h4>
				<?php if ($message['global']) { echo '<span class="highlight">GLOBAL</span>'; } ?>
<?php if ( ! $message['global'] || $_SESSION['is_admin']) { ?>
				<ul>
<?php

		foreach ($message['recipients'] as $recipient) {
			if ($recipient['from_id'] == $recipient['to_id']) {
				continue;
			}

			$classes = array( );
			if (is_null($recipient['view_date'])) {
				$classes[] = 'unread';
			}

			if ($recipient['deleted']) {
				$classes[] = 'deleted';
			}

			$class = '';
			if (count($classes)) {
				$class = ' class="'.implode(' ', $classes).'"';
			}

			echo "<li{$class}>{$recipient['recipient']}</li>\n";
		}
?>
				</ul>
<?php } ?>
			</div>
		</div>
	</div>
	<?php
		$contents .= ob_get_contents( );
		ob_end_clean( );
		$monfichier = fopen('news.txt', 'r+');
		$tab = file('news.txt');
		 $lignes = "";
		foreach($tab as $li){
			$lignes .= fgets($monfichier);
		}
		
		$hint = $lignes;
		fclose($monfichier);

		$html = get_item($contents, $hint);

		break;
//=============================================================================================================================
case 'prefs' :
		$contents .= '
			<form name="preferences" method="post" action="index.php?page=prefs">
				<br><h2>Préférences</h2>
				<fieldset>
					<h3>Notations</h3>
					<select name="selHistory">
						<option value="coord"'.get_selected($_SESSION['pref_history'], 'coord', true).'>En coordonnées</option>
						<option value="alg"'.get_selected($_SESSION['pref_history'], 'alg', true).'>Algébrique</option>
						<option value="longalg"'.get_selected($_SESSION['pref_history'], 'longalg', true).'>Algébrique longue</option>
						<!-- <option value="desc"'.get_selected($_SESSION['pref_history'], 'desc', true).'>Descriptive</option> -->
						<option value="int"'.get_selected($_SESSION['pref_history'], 'int', true).'>Internationale</option>
						<option value="verbous"'.get_selected($_SESSION['pref_history'], 'verbous', true).'>Verbieuse</option>
					</select>
					<a href="#" class="help" onclick="window.open(\'./help/notation.html\',\'help\',\'resizable,scrollbars,width=600,height=500,top=50,left=50\',\'_blank\');return false;"><FONT COLOR="#0000ff"> ?</FONT></a>
				</fieldset><br />
				<fieldset>
					<h3>Thème - Apparences de l\'écran, des pièces et de l\'échiquier.</h3>
					';

					// open up the images directory and collect the folder names
					$dir = opendir('images');

					while (false !== ($file = readdir($dir)))
					{
						if (is_dir('images/'.$file) && (false === strpos($file, '.'))) // scanning for visible subfolders only
						{
							$dirlist[] = $file;
						}
					}

					closedir($dir);

					$label = 'A';
	$thm = $_SESSION['pref_theme'];
					foreach ($dirlist as $theme)
					{
						$sel = ($_SESSION['pref_theme'] == $theme) ? ' checked="checked"' : '';
						$contents .= "\t\t\t\t\t\t<label for=\"rdoTheme{$label}\"><input name=\"rdoTheme\" id=\"rdoTheme{$label}\" type=\"radio\" value=\"{$theme}\"{$sel} />{$theme}</label><br />\n";
						++$label; // increment label counter
					}

			$contents .= '
				</fieldset><br />
				';
// Affichage de la config choisis
			$contents.= "<br> <img src='./images/".$thm."/black_king.gif' /><img src='./images/".$thm."/black_queen.gif' /><img src='./images/".$thm."/black_rook.gif' /><img src='./images/".$thm."/black_bishop.gif' /><img src='./images/".$thm."/black_knight.gif' /><img src='./images/".$thm."/black_pawn.gif' />";
			$contents.= "<br> <img src='./images/".$thm."/white_king.gif' /><img src='./images/".$thm."/white_queen.gif' /><img src='./images/".$thm."/white_rook.gif' /><img src='./images/".$thm."/white_bishop.gif' /><img src='./images/".$thm."/white_knight.gif' /><img src='./images/".$thm."/white_pawn.gif' />";
				

				$xltm = '';
				if (false != $_SESSION['pref_show_last_move'])
				{
					$xltm = ' checked="checked"';
				}

			$contents .= '
			<br/>
			<fieldset>
				<label for="boxLastMove"><input type="checkbox" name="boxLastMove" id="boxLastMove"'.$xltm.' />Faire apparaître l\'indicateur du dernier mouvement</label>
				<div class="instruction">Décochez cette case enlèvera le carré entourant le dernier coup.</div>
				<br />
				<input type="text" name="txtmaxGames" value="'.$_SESSION['pref_max_games'].'" /> Nombre maximum de parties en cours et en attente de jeux.<br />
				<input type="text" name="txtReload" value="'.$_SESSION['pref_auto_reload'].'" /> Rafraichissement automatique de la page';

				if (0 != $CFG_MINAUTORELOAD)
				{
					$contents .= ' (min: '.$CFG_MINAUTORELOAD.' secs)';
				}

			$contents .= '<br />
				<br />
				<input type="submit" class="button" value="Mettre à jour" />
				<input type="hidden" name="todo" value="Mettre les préférences à jour" />
			</form>
			</fieldset>
			<br /><br />
		';
		
		$monfichier = fopen('news.txt', 'r+');
		$tab = file('news.txt');
		 $lignes = "";
		foreach($tab as $li){
			$lignes .= fgets($monfichier);
		}
		
		$hint = $lignes;
		fclose($monfichier);

		$hint = array(
			'Vous pouvez personaliser WebChess avec ces réglages' ,
			'<a href="themes.php">Voir les différents thèmes</a>' ,
		);

		$html = get_item($contents, $hint);

		break;
		
// ====================================================
	case 'personal' :
/**************************************************************************************************************/
		$contents .= '
		<br><h2>Espace perso</h2>
		<table>
		<th style="width:30%">Informations personnelles</th>
		<th style="width:20%">Statistiques personnelles</th>
			<tr>
			<td  style="text-align:left;">
			<form name="personal" action="index.php?page=personal" method="post">
				<h4>   Bienvenue '.$_SESSION['username'].'.  Ici vous pouvez modifier vous coordonées.</h4>
				<!--<div style="display:none">-->
				<input  name="txtFirstName" type="hidden" class="inputbox" value="'.$_SESSION['first_name'].'" /> 
				<input  name="txtLastName" type="hidden" class="inputbox" value="'.$_SESSION['last_name'].'" /> 
				<!--</div>-->
				';

			if ($CFG_USEEMAIL)
			{
				$contents .= '<input type="text" name="txtEmail" value="'.$_SESSION['email'].'" /> Adresse e-mail <br />
				';
			}

			if ($CFG_CHANGEUSERNAME)
			{
				$contents .= '<input name="txtUsername" type="text" class="inputbox" value="'.$_SESSION['username'].'" /> Pseudo<br />
				';
			}
			$contents .= '<input name="pwdOldPassword" type="password" class="inputbox" /> Mot de passe actuel<br />
				<input name="pwdPassword" type="password" class="inputbox" /> Nouveau mot de passe<br />
				<input name="pwdPassword2" type="password" class="inputbox" /> Nouveau mot de passe <br />
				<br />
				<input type="button" value="Mettre à jour" class="button" onclick="validatepersonal( )" />
				<!--<label for="email">Tester son dresse e-mail</label><input type="email" name="testmail" autocompete="on" id="email"/></br>    
                    <input type="submit" value="Test">-->
                 </br>  
			</form>
			
			<h3>______________________________________________</h3>
			<br />
			<form method="post" action="testemail.php" >
                    <input type="text" name="adressee" /><label for="email">Tester votre adresse e-mail</label>
                    <input type="submit" name="submit" value="Valider" />
            </form>
			
			</td>
			<td  style="text-align:left;">
			<br>
			'.$_SESSION['medal'].'<br><br>
			Nombre de parties gagnées : '.$_SESSION['wins'].' <br>
			Nombre de parties nulles : '.$_SESSION['draws'].' <br>
			Nombre de parties perdues : '.$_SESSION['losses'].' <br>
			Nombre de parties jouées : '.$_SESSION['nb_games'].' <br>
			Points : '.$_SESSION['rating'].' <br>
			</td>
		</table>
		';

		 $hint = array(
		 	'Ici, vous pouvez changer vos informations personnelles. N\'oubliez pas d\'appuyer sur le bouton \'Mettre à jour\' pour enregistrer les changements.' ,
		 	'Laissez tous les champs de mot de passe videspour conserver votre ancien mot de passe.' ,
		 );

		 if ($CFG_USEEMAIL)
		 {
		 	$hint[] = 'Entrez une adresse email valide si vous souhaitez recevoir un message e-mail chaque fois que votre adresaire effectue un coup. Laissez ce champ vide pour ne pas recevoir ces emails.';
		 }
/*********************************************************/
		/*$monfichier = fopen('news.txt', 'r+');
		$tab = file('news.txt');
		 $lignes = "";
		foreach($tab as $li){
			$lignes .= fgets($monfichier);
		}
		
		$hint = $lignes;
		fclose($monfichier);*/
/*********************************************************/
		$html = get_item($contents, $hint);
		break;

// ====================================================
	case 'admin' :
		if (true != $_SESSION['is_admin'])
		{
			header('Location: index.php');
			exit;
		}

		$table_id = get_table_id( );
		$contents .= '
			<form name="Admin" action="index.php?page=admin" method="post">
				<br><h2>Administration</h2>
				<div class="inputlabel"><input type="button_admin" value="Envoyer un message à tous les utilisateurs enregistrés" onclick="javascript:window.open(\'massmail.php\',\'message\',\'resizable,width=600,height=500,top=100,left=100\',\'_blank\');return false;" /></div>
				<br>
				<table class="sort-table" id="'.$table_id.'">
					<thead>
						<tr>
							<th>ID</th>
							<th>Nom d\'utilisateur</th>
							<th>Prénom</th>
							<th>Nom</th>
							<th>Email</th>
							<th>Date de création</th>
							<th>Reset du mot de passe ?</th>
							<th>Administrateur ?</th>
							<th>Effacer (le compte) ?</th>
						</tr>
					</thead>
					<tbody>
						';
					$i = 0;
					foreach ($admin as $row)
					{
						$alt = ( $i % 2 == 0 ) ? ' class="alt"' : '';
						$check = (0 != $row['p_is_admin']) ? ' checked="checked"' : '';

						$contents .= '<tr'.$alt.'>
							<td class="numeric">'.$row['p_id'].'</td>
							<td class="username">'.$row['p_username'].'</td>
							<td class="firstname">'.$row['p_first_name'].'</td>
							<td class="lastname">'.$row['p_last_name'].'</td>
							<td>'.$row['p_email'].'</td>
							<td>'.date($CFG_SHORTDATE, $row['u_created']).'</td>
							<td class="passbox"><input type="checkbox" name="resetpass[]" value="'.$row['p_id'].'" /></td>
							<td class="adminbox"><input type="checkbox" name="admin[]" value="'.$row['p_id'].'"'.$check.' /></td>
							<td class="checkbox"><input type="checkbox" name="delete[]" value="'.$row['p_id'].'" /></td>
						</tr>';

						++$i;
					}
				$contents .= '
					</tbody>
				</table>
				';

			$contents .= get_sorttable_script($table_id, 'Number,StringCI,StringCI,StringCI,StringCI,DateTime,None,None,None');

			$contents .= '
				<br>
				<input type="submit" value="Appliquer" name="submit" class="button" /><br />
				<br />
			</form>
		';

		/*$monfichier = fopen('news.txt', 'r+');
		$tab = file('news.txt');
		 $lignes = "";
		foreach($tab as $li){
			$lignes .= fgets($monfichier);
		}
		
		$hint = $lignes;
		fclose($monfichier);*/

		$html = get_item($contents, $hint);

		break;

// ====================================================
	default :
		// Ne faites rien, c'est déjà effectué dans le fichier index.inc.php
		//header('Location: login.php');
		//exit;
		break;
}

// Ceci nécessite de tourner après les sections ci-dessus, car cela peut altérer les variables
// Mettez les valeurs par défaut pour les variables du menu, et si nécessaire, surlignez les
$menu_data['numMyturn']   = (isset($numMyturn) && 0 < $numMyturn) ? "<span class=\"notice\">{$numMyturn}</span>" : 0;
$menu_data['numActive']   = (isset($numActive)) ? $numActive : 0;
$menu_data['numOthers']   = (isset($numOthers)) ? $numOthers : 0;
$menu_data['numDone']     = (isset($numDone)) ? $numDone : 0;
$menu_data['numFiles']    = (isset($numFiles)) ? $numFiles : 0;
$menu_data['numInvites']  = (isset($numInvites) && 0 < $numInvites) ? "<span class=\"notice\">{$numInvites}</span>" : 0;
$menu_data['numOutvites'] = (isset($numOutvites)) ? $numOutvites : 0;
$menu_data['numMsgs']     = (isset($numMsgs) && 0 < $numMsgs) ? $numMsgs : 0;
$menu_data['newMsgs']     = (isset($newMsgs) && 0 < $newMsgs) ? "<span class=\"notice\">{$newMsgs}</span>" : 0;
$foot_data['nombre'] = $_SESSION['nombre']; 
$foot_data['numPlayers'] = $numPlayers;
$foot_data['numGames']   = $numGames;
$foot_data['totGames']   = $menu_data['numDone']  ;
// Maintenant que nous avons construit les sections, quittons la page.
$head_extra = '
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
	<script type="text/javascript" src="javascript/sortabletable.js"></script>
	<script type="text/javascript" src="javascript/messages.js"></script>
	<script type="text/javascript" src="javascript/index.js.php"></script>
';

echo get_header($menu_data, 'Main Menu', $head_extra);
echo $html;
echo get_footer($foot_data);

call(time( ));call($GLOBALS);
//echo "</br>";
require 'chat.php';

echo '<h3 align="center"><span style="color:blue;font-size:18px">Testez vos connaissances avec ce Q-C-M échiquéen =>  
<a href="http://jeuxechecs.fr/_qcm/ph_qcm/index.php"><img src="/images/qcm.jpg" style="vertical-align:middle" alt="Q-C-M" /></a>
  A partir du premier novembre.</h3>';

$texte= "<blockquote><h3>Modifications apportées à partir du 21/09/2016:<h3/>
					1)Présentation des explications dans les rubriques Vos parties, Parties en cours,<br>
					Parties terminées, Invitations, Messages, Espace perso, Préférences et Statistiques.<br>
					2)Logo rotatif sur son axe vertical en page de connexion.<br/>
					3)Recentrage des tableaux sur toutes les pages pour un meilleur positionnement.<br/>
					4)Amélioration de la lisibilité de la page invitations.<br>
					5)Repositionnement du menu de la page échiquier vers le haut.<br>
					6)Amélioration de la présentation à l'accueil.<br>
					7)Création de l'image d'un échiquier en transparence.(Merci à Jojo pour son graphisme.)<br>
					8)Amélioration de l'apparence du menu de gauche.<br>
					9)Suppression de la demande Nom et Prénom lors de l'inscription. (Bien que cela n'était pas obligatoire.)<br>
					10)Présentation d'un échiquier en 3 dimensions en page de connexion.<br>
					11)Création d'un lien sous forme d'un <span style='color:#e30000;font-size:22px'>?</span> dans la page 'Invitations' pour expliquer ce qu'est Chess960.<br>
					12)Amélioration de la visibilité du déplacement des pièces par des couleurs plus contrastées.(Lorsque cette option est choisie).<br>
					13)Présentation des membres présents ci dessus.<br/>
					14)Mise au point d'un chat général.<br/>
					15)Evolution du site en version PHP 7.1<br/>
					16)Une information est désormais fournie pour ne plus placer les pièces au hazard<br/>
					en mode chess960.(Rubrique Invitations).<br/>
					
					<blockquote><h3><span style='color:blue;font-size:17px'>
					17)Petite modification de la règle du jeu d'échecs concernant les parties pat.<br/>
					Voir le <a href='http://www.jeuxechecs.fr/echecs/help/pat.html' class='help' onclick='window.open('./help/pat.html','help','resizable,scrollbars,width=550,height=500,top=50,left=50','_blank');return false;'><font color='#0000ff'>?</font></a> 
					ou celui situé à gauche du bouton 'Partie pat'.<br/></h3></blockquote><br/>"
					
					
					;
echo $texte;
?>

<h3 style="color: blue"><div onclick="document.location.href='http://jeuxechecs.fr/formulaire.php'">Ecrire au créateur du site.<img src="/images/boite.gif" style="vertical-align:middle" alt="retour" /></div></h3>
<h4>Information.</br>
Il peut arriver très rarement qu'il ne soit pas possible d'écrire dans le chat durant la partie.</br>
Ainsi pour une raison encore inconnue actuellement, quelques jours après cela redevient accessible.</br>
Il est donc nécessaire de patienter tout en continuant de jouer afin qu'il soit de nouveau possible d'écrire.</br>
Dès que je trouverai la solution pour éviter ce petit contre temps de correspondance, je la mettrai en application.</h4>
<?php
include 'calend.html';
?>


Enfin, ce message ci dessous apparait lorsque l'arobase est absent.


J'avoue ne pas comprendre.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 févr. 2020 à 15:28
je vois que as ajouté l'arobase après le 17 oct. 2018.
je pense que tu peux supprimer (mettre en commentaires) les lignes 9 et 10 de index.inc.php().
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
20 févr. 2020 à 11:33
la page chess.php fait-elle aussi appel à index.inc.php?
0
Max747 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
5 mars 2020 à 15:01
la page chess.php fait-elle aussi appel à index.inc.php?
Non.
0
Max747 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
5 mars 2020 à 15:00
je vois que as ajouté l'arobase après le 17 oct. 2018.
je pense que tu peux supprimer (mettre en commentaires) les lignes 9 et 10 de index.inc.php().

C'est fait sans changement notable.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Max747
5 mars 2020 à 15:07
tu avais déjà répondu la même chose le 20 février. je suggère de commencer une nouvelle discussion.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
20 févr. 2020 à 16:51
je vois que as ajouté l'arobase après le 17 oct. 2018.
Oui ça doit bien être cela.Un peu plus de 2 ans quand même.
Je l'ai fait non pas pour m'amuser, mais à l'occasion d'une recherche d'amélioration de mon site.
je pense que tu peux supprimer (mettre en commentaires) les lignes 9 et 10 de index.inc.php().
Je viens de les mettre en commentaires et jusqu' à présent ça fonctionne sans le warning.
De surcroit les lignes:
$parts = pathinfo($_SERVER['REQUEST_URI']);
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	//$path .= '/'.$parts['jeuxechecs_fr'];
	$path .= '/index.php';
}
$path = str_replace('\\', '/', $path).'/';

de index.in.php sont présentent également en début du fichier chess.php.
Je verrai d'ici quelques jours à décommenter ces lignes aussi soit dans
chess.php ou dans index.in.php.
As ton avis quel choix serait le plus judicieux? chess.php ou dans index.in.php?
Sinon je le ferai au hasard et observerai les résultats.

La page chess.php ne fait pas appel au fichier index.in.php.

En tout merci de m'avoir mis sur cette piste qui semblerait à cette heure être la bonne.Car ce dysfonctionnement intermittent ne semble plus sévir actuellement.
J'attends donc de voir ce qu'il en sera demain pour en apporter une conclusion définitive.

De toutes façons, je suis convaincu d'avoir à faire à un problèmes de cessions.

A suivre......
0
Leah-meta Messages postés 10 Date d'inscription lundi 10 février 2020 Statut Membre Dernière intervention 20 février 2020 1
20 févr. 2020 à 17:21
Alors?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 févr. 2020 à 17:27
beaucoup moins que 2 ans.
dans chess.php, vois-tu un appel à session_set_cookie_params?
je pense que le but de cet fonction est de pouvoir avoir plusieurs sessions indépendantes entre un PC et le site de jeux.
comme cela ne fonctionne pas, autant simplifier en supprimant.
quand on tombe sur le dysfonctionnement, est-il réparé quand on ferme le navigateur?
0
Max747 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
5 mars 2020 à 14:07
dans chess.php, vois-tu un appel à session_set_cookie_params?
Oui
@session_set_cookie_params(time()+365*24*3600, $path);

quand on tombe sur le dysfonctionnement, est-il réparé quand on ferme le navigateur?
Non.
Il est réparé en effaçant les cookies.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
Modifié le 20 févr. 2020 à 18:33
beaucoup moins que 2 ans.
Effectivement.Voilà quelqu' un qui suit!
:)
je pense que le but de cet fonction est de pouvoir avoir plusieurs sessions indépendantes entre un PC et le site de jeux.
Oui.Avant de sélectionner une partie il est demandé:


Si les joueurs joueront ils sur le même PC?
comme cela ne fonctionne pas, autant simplifier en supprimant. (session_set_cookie_params ?)
Alors dans le cas cité au dessus, je n'ose pas supprimer cette cession session_set_cookie_params dans aucun fichier présenté ci dessus.

quand on tombe sur le dysfonctionnement, est-il réparé quand on ferme le navigateur?
Non hélas.Sinon cet ennui aurait été moins gênant.

Oh mince alors.
Je viens de m' apercevoir à l'instant (18h27) que le dysfonctionnement réapparait sur mon navigateur Opera.
Idem sous Firefox.
Par contre sur un autre ordinateur et sous Firefox en ce moment cela fonctionne.

Pour session_set_cookie_params voici ci dessous les fichiers comportant cette cession:
chess.php
session_set_cookie_params(time()+365*24*3600, $path);

login.php
@session_set_cookie_params(time()+365*24*3600, $path);

massmail.php
session_set_cookie_params(time()+365*24*3600, $path);

newuser.php
session_set_cookie_params(time()+365*24*3600, $path);

oppass.php
session_set_cookie_params(0, $path);

watchgame.php
session_set_cookie_params(0, $path);

index.inc.php
@session_set_cookie_params(time()+365*24*3600, $path); // 1 an

open.inc.php
session_set_cookie_params(0, $path);
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
21 févr. 2020 à 00:16
je pense que, de toutes façons, l'utilité de ces session_set_cookie_params() a été perdue le jour où tu as décidé d'ajouter ces arobases.
par ailleurs, il s'agit d'une fonctionnalité que tu ne comprends ni ne maîtrises. as-tu testé cette possibilité après chaque changement de code?
vu ta manière de travailler (par essai et erreur), je recommande que tu simplifies ton site et le réduises à des éléments que tu comprends et à des fonctionnalités que tu testes.
je recommande donc que tu supprimes (commentes) tous les session_set_cookie_params().
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
21 févr. 2020 à 10:33
l'utilité de ces session_set_cookie_params() a été perdue le jour où tu as décidé d'ajouter ces arobases.
Non car les arobases me permettent d'écrire sur les chats.Mais l' inconvénient est que le message warning y est présent.
par ailleurs, il s'agit d'une fonctionnalité que tu ne comprends ni ne maîtrises. as-tu testé cette possibilité après chaque changement de code?
Oui .Sans résultats.
vu ta manière de travailler (par essai et erreur), je recommande que tu simplifies ton site et le réduises à des éléments que tu comprends et à des fonctionnalités que tu testes.

Je fais des erreurs comme tout le monde peux en faire à son niveau.Qui n'en fait pas?
Faut il encore que je sache le simplifier.
je recommande donc que tu supprimes (commentes) tous les session_set_cookie_params().
Je l'ai fais.Seul le fichier index.inc.php crée un changement en ne me permettant plus d'écrire dans les chats.
A savoir que ne plus écrire dans les chats, veut dire perdre la cession. (Username plus présent).
Maintenant je dois arrêter pour aujourd'hui car je n'ai plus le temps de continuer hélas.
A demain si tu veux bien.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
21 févr. 2020 à 12:17
as-tu supprimé partout tous les session_set_cookie_params()?
quand tu as la situation où tu ne peux pas écrire dans les chats, peux-tu examiner le cookie PHPSESSID du site?
dans chrome, cliquer sur le petit bouton "non sécurisé" à gauche dans la barre d'adresse, puis naviguer et cliquer sur le cookie.
je suppose que c'est la page chess.php qui gère le chat. si je devine bien, cette page ne réagit pas bien quand la session est perdue. ne devrait-elle pas redemander à l'utilisateur de s'authentifier, au lieu d'ignorer le chat?
tu as écrit que le soucis persistait quand on fermait le navigateur. que se passe-t'il à l'ouverture: l'utilisateur doit-il s’authentifier?
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
22 févr. 2020 à 11:08
as-tu supprimé partout tous les session_set_cookie_params()?
Oui.Sans ne toujours pas pouvoir écrire dans le chat.Car sur un de mes ordinateurs la panne se produit continuellement.
quand tu as la situation où tu ne peux pas écrire dans les chats, peux-tu examiner le cookie PHPSESSID du site?
Oui.Voici en image ce qu'il en est des cookies:


je suppose que c'est la page chess.php qui gère le chat. si je devine bien, cette page ne réagit pas bien quand la session est perdue. ne devrait-elle pas redemander à l'utilisateur de s'authentifier, au lieu d'ignorer le chat?
Que faire pour redemander à l'utilisateur de s'authentifier?
Placer ce script comme ceci dans chess.php:
<?php
session_start( );
// set the session cookie parameters so the cookie is only valid for this game
$parts = pathinfo($_SERVER['REQUEST_URI']);
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	$path .= '/'.$parts['jeuxechecs_fr'];
}
$path = str_replace('\\', '/', $path).'/';
session_set_cookie_params(time()+365*24*3600, $path);

Si oui cela ne fonctionne pas non plus.

tu as écrit que le soucis persistait quand on fermait le navigateur. que se passe-t'il à l'ouverture: l'utilisateur doit-il s’authentifier?
A l'ouverture depuis une réponse de la messagerie par e-mail il n'est plus nécessaire de s'authentifier.En voici un exemple par l'image où on a accès aux parties à sélectionner directement:

Un indice démontre qu'il n'est pas possible d'écrire dans les chats est que "username" est absent comme le montre l'image ci dessous:

Il devrait être noté: Bienvenue sur ce chat April.
(A noter que April est bien présent dans l'image précédente en haut à droite.)
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 févr. 2020 à 11:36
tu écris avoir supprimé partout tous les session_set_cookie_params().
d'où vient alors ceci:
Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/login.php on line 25
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
20 févr. 2020 à 18:32
Oh mince alors.
Je viens de m' apercevoir à l'instant (18h27) que le dysfonctionnement réapparait sur mon navigateur Opera.
Idem sous Firefox.
Par contre sur un autre ordinateur et sous Firefox en ce moment cela fonctionne.

Pour session_set_cookie_params voici ci dessous les fichiers comportant cette cession:
chess.php
session_set_cookie_params(time()+365*24*3600, $path);

login.php
@session_set_cookie_params(time()+365*24*3600, $path);

massmail.php
session_set_cookie_params(time()+365*24*3600, $path);

newuser.php
session_set_cookie_params(time()+365*24*3600, $path);

oppass.php
session_set_cookie_params(0, $path);

watchgame.php
session_set_cookie_params(0, $path);

index.inc.php
@session_set_cookie_params(time()+365*24*3600, $path); // 1 an

open.inc.php
session_set_cookie_params(0, $path);
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 22 févr. 2020 à 13:24
la page echecs/index.php a renvoyé ceci.

Erreure détectée.<br /><br />Si vous avez atteint cette page par erreur, veuillez revenir à la page de connexion, effacer votre cache, actualiser la page et essayer de vous reconnecter.

bizarre, non? d'où cela vient-il?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
22 févr. 2020 à 14:00
si ton code php ne contient pas d'information confidentielle (identifiant, mot de passe, ...), pourrais-tu le poster, peut-être sur ton site?
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 févr. 2020 à 14:06
Oui bien sûr qu'il y a moyen de poster sur mon site.
Mais bien sûr sans ce qui est confidentiel.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 févr. 2020 à 14:03
Il s'agit d'un message d'erreur qui fût créer à l'origine.
Il fait parti d'un fichier php tout simplement.
Mais te définir dans qu'elle circonstance il se présente, c'est une autre recherche que je pourrai abordé quand le problème Warning sera résolu.
0
Rebonjour,
Cherchant à comprendre le fonctionnement de ce script ci dessous:
<?php
$parts = pathinfo($_SERVER['REQUEST_URI']);
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	//$path .= '/'.$parts['jeuxechecs_fr'];
	$path .= '/index.php';
}
$path = str_replace('\\', '/', $path).'/';
@session_set_cookie_params(time()+365*24*3600, $path); // 1 an.
session_start();

Quelqu' un parmi vous aurait - il l'obligeance de me l'expliquer?
1) Quel est le rôle de la deuxième ligne?
$parts = pathinfo($_SERVER['REQUEST_URI']);

$parts serait - elle bien une variable tableau?

Remarque:
Il est indiqué ici :
https://www.php.net/manual/fr/function.session-set-cookie-params.php
que session_start(); doit se trouver après session_set_cookie_params(). Ainsi cette fonction ne doit pas être écrite à la deuxième ligne d'un script PHP comme c'est souvent le cas.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 4 mars 2020 à 09:01
Par rapport à ta remarque.

session_start n'a pas réellement besoin d'être à la deuxième ligne d'un script php.
Cette règle, c'est plus une « bonne » pratique qui permet d'éviter de se poser des questions et de vraiment comprendre comment fonctionne un script...

Le truc, c'est qu'une réponse http contient deux sortes de données : les en-têtes et le corps. Les en-têtes, comme leur nom l'indique, doivent forcément être renvoyées au client avant le corps. Elles contiennent des choses comme le type de document (pdf, html, etc.), des redirections ou des cookies. Or les sessions s'appuient sur les cookies...

Par ailleurs, dans son fonctionnement, Php commence à renvoyer le corps de la réponse aussitôt qu'il trouve une sortie (un "echo", ou du texte en dehors des balises <?php ?>, mais aussi une erreur qui, selon la configuration, est affichée).
Lorsqu'il commence à envoyer le corps, Php est obligé de générer les en-têtes avec les infos qu'il possède, pour les envoyer avant le début du corps. Si, après coup, on lui dit « ah au fait, mets ça dans les en-têtes », ben... Trop tard. On se retrouve avec le fameux message « Headers already sent ».

Du coup, il faut s'assurer que toutes les fonctions qui modifient les en-têtes soient appelées avant le premier texte, et c'est pour ça qu'on dit souvent de placer session_start() tout en haut.
Mais fondamentalement, on peut très bien le mettre à la 150ème ligne de code, si on maîtrise son script et qu'on est sûr qu'aucune sortie n'est générée avant.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 mars 2020 à 09:31
as-tu fait
print_r(pathinfo($_SERVER['REQUEST_URI']));
?
si cela ne clarifie pas les choses, peux-tu nous montrer ce que cela donne, cela nous aidera à t'expliquer concrètement.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 mars 2020 à 10:42
0
Je veux bien admettre ta réponse.
Mais celle ci ne répond pas à ma question que voici:
1) Quel est le rôle de la deuxième ligne?
$parts = pathinfo($_SERVER['REQUEST_URI']);
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 mars 2020 à 10:20
Bonjour,

Je n'ai pas prétendu répondre à ta question, j'ai même bien précisé "Par rapport à ta remarque" ;)

PathInfo permet de décomposer un chemin d'accès à un fichier en ses éléments.
https://www.php.net/pathinfo (regarde notamment l'exemple #1)

Donc là, l'idée est de décomposer les éléments de la requête cliente (l'URL appelée par le client, du genre https://www.domainecarneros.com/chemin/index.php ), pour changer le nom de fichier par index.php si le nom de fichier n'avait pas d'extension.
Comme suggéré par yg_be, place des print_r et des echo à chaque ligne de ce code pour bien comprendre ce qu'il se passe.

Xavier
0
Ok merci.

J'ai trouvé la finalité de ce script ci dessous:
<?php
session_start( );
// set the session cookie parameters so the cookie is only valid for this game
$parts = pathinfo($_SERVER['REQUEST_URI']);
//print_r(pathinfo($_SERVER['REQUEST_URI']));
$path = $parts['dirname'];
if (empty($parts['extension'])) {
	$path .= $parts['jeuxechecs_fr'];
}
$path = str_replace('\\', '/', $path).'/';

@session_set_cookie_params(time()+365*24*3600, $path);
echo $path;
session_start( );


Car en ajoutant la ligne 13, j'obtiens le message suivant en haut de page:
/echecs/
Alors si je ne me trompe, les cookies sont ils créés pour un an dans le dossier echecs ?
Ou le dossier echecs et ces sous dossiers?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
5 mars 2020 à 14:58
ce code ne fonctionne pas, c'est pour cela que tu y as ajouté une arobase.
l'idée de ce code, c'est que les cookies de sessions soient spécifiques à une partie du site.
chaque partie du site pouvant alors avoir ses sessions, indépendamment des autres parties.
0
Max747 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
5 mars 2020 à 15:30
ce code ne fonctionne pas, c'est pour cela que tu y as ajouté une arobase.
Pour supprimer les message Warning.
Les sessions usernames sont parfois absentes.C'est alors que je supprime les cookies de mon site pour que cela fonctionne à nouveau.
Saurais tu me confirmer, à la lecture des résultats que je présente dans mon message ci dessus, que les cookies servent pour le dossier echecs ainsi que ces sous dossiers?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Max747
Modifié le 5 mars 2020 à 16:52
comme ce code ne fonctionne pas (le warning prévient qu'il ne fonctionne pas), il n'a pas d'influence sur les cookies de sessions. les (cookies de) sessions sont donc valables pour toutes les pages du site.
c'est très simple à vérifier en examinant les cookies PHPSESID.
0