8796 sujets

Développement web côté serveur, CMS

Bonjour,

J'apprends PHP / MySQL et j'ai un souci avec if($_GET['clear'] == 'true').

Quand je lance le code du dessous, je recois l'erreur suivant:

Notice: Undefined index: clear in C:\wamp\www\photo_gallery\public\admin\logfile.php on line 7

<?php if (!$session->is_logged_in()) { redirect_to("login.php"); } ?>
<?php

$logfile = SITE_ROOT.DS.'logs'.DS.'log.txt';

if($_GET['clear'] == 'true') { l'erreur est ici

file_put_contents($logfile, '');
log_action('Logs Cleared', "by User ID {$session->user_id}");
redirect_to('logfile.php');
}
?>

Sur le web, j'ai vu: if(isset($_GET['clear']) && $_GET['clear']=="TRUE"){ ....
mais certes l'erreur a disparu mais les logs ne sont pas effaces.

Merci pour votre aide.

DJ
Bonjour,

$_GET['clear'] correspond a un paramètre passé dans l'url qui n'est apparemment pas défini.

Le lien pour effacer les logs serait alors au format suivant :


<a href="/page/?clear=true">Effacer les logs</a>
Hello danielj et bienvenue,

d'une manière générale il ne faut pas utiliser une variable qui n'a pas été préalablement définie.

Donc soit on vérifie d'abord qu'elle existe (avec isset ou !empty) soit on la déclare systématiquement :
$clear = isset($_GET['clear']) ? $_GET['clear'] : 'false';
if($clear == 'true') { ...
Et de manière générale encore, il est déconseillé d'utiliser des requêtes GET pour lancer des actions qui modifient, ajoutent ou suppriment des données.
Bonjour,

Ça fonctionne avec isset. J'avais fais une erreur car j'avais mis "true" une fois et "TRUE" ensuite. Je pensais que c'était la même chose.

Merci pour vos réponse et c'est encourageant quand on reçois de l'aide.

A+
Daniel
Florent V. a écrit :
Et de manière générale encore, il est déconseillé d'utiliser des requêtes GET pour lancer des actions qui modifient, ajoutent ou suppriment des données.


+1 ...
Florent V. a écrit :
Et de manière générale encore, il est déconseillé d'utiliser des requêtes GET pour lancer des actions qui modifient, ajoutent ou suppriment des données.
J'aurais plutôt exprimé ça en disant qu'il faut être particulièrement attentif à la sécurisation dans ce cas.

Pour donner un exemple où les variables en GET sont bien pratiques (code simplifié) :
<table>
	<caption>Gestion des membres</caption>
	<tr>
		<th scope="col">Pseudo</th>
		<th scope="col">Actions</th>
	</tr>
	<tr>
		<td>Almodovar</td>
		<td><a href="action.php?id=33&amp;mode=edit">Modifier</a> <a href="action.php?id=33&amp;mode=delete">Supprimer</a></td>
	</tr>
	<tr>
		<td>Balboa</td>
		<td><a href="action.php?id=22&amp;mode=edit">Modifier</a> <a href="action.php?id=22&amp;mode=delete">Supprimer</a></td>
	</tr>
</table>

Modifié par Heyoan (31 Jan 2010 - 15:41)