Attention Warning !!!
Max747
Messages postés
258
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
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
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
A voir également:
- Attention Warning !!!
- Symbole attention clavier - Forum LibreOffice / OpenOffice
- Cpu fan fail warning control ✓ - Forum Processeur
- Warning zone telechargement - Accueil - Outils
- Warning your chassis has been opened ✓ - Forum Matériel & Système
- Warning : your computer CHIP Fan Fail or spee - Forum Windows
18 réponses
Bonjour,
Le message
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
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(); }
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 :
Les autres erreurs sont me semble-t-il des conséquences de cette première erreur, et devraient disparaître avec elle.
Xavier
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
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:
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:
Donc le message Bonjour n'apparait pas sur la page où se trouvait le message warning.
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.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.
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.
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.
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.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
est-il trop tard pour déterminer tout cela?
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...
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:
Enfin, ce message ci dessous apparait lorsque l'arobase est absent.

J'avoue ne pas comprendre.
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.
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:
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......
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......
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?
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?
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);
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);
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().
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().
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.
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.
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?
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?
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:
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.)
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.)
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);
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);
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
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?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
si ton code php ne contient pas d'information confidentielle (identifiant, mot de passe, ...), pourrais-tu le poster, peut-être sur ton site?
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.
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.
Rebonjour,
Cherchant à comprendre le fonctionnement de ce script ci dessous:
Quelqu' un parmi vous aurait - il l'obligeance de me l'expliquer?
1) Quel est le rôle de la deuxième ligne?
$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.
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.
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.
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.
l'utilité de ce code est expliqué ici: https://forums.commentcamarche.net/forum/affich-36469595-attention-warning#17
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?
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']);
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
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
Ok merci.
J'ai trouvé la finalité de ce script ci dessous:
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?
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?
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?
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?