Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/11/2006, 12h40   #1
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Par défaut Rafraîchissement page précédente

Bonjour à tous,

Dans une page que j'appelerai ici main.php, j'ai créé un tableau de contacts qui récupère les données dans une base mysql.
Au début de chaque ligne, j'ai créé des cases à cocher qui me permettent de cocher les enregistrements que je veux supprimer et donc un bouton "supprimer" qui va avec.

ça donne ça :

Code :
1
2
3
4
 
<form method="post" name="suppression" action="effacer.php">
<input type="submit" value="Supprimer">
</form>
Ensuite dans la page effacer.php, j'ai le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<?php 
 
mysql_connect("SERVER", "USER", "PASSWORD");
mysql_select_db("DB");
 
foreach ($_POST as $oui => $valeur) 
{ 
if ($oui == 0)
	{ }
else
	{
	$supPros="DELETE FROM visiteurs WHERE idVisiteur='".$valeur."'";
	$ReqSupPros=mysql_query($supPros);
	}
}
?>
<script language="JavaScript">
window.location='main.php';
</script>
Les lignes que j'ai cochées sont effacées sans problème et je reviens bien sur la page main.php.

Mon problème est le suivant : j'utilise la pagination dans ma page main.php donc au lieu de revenir sur la première page de contacts quand j'ai validé ma suppression, je souhaiterais revenir sur la dernière page affichée avant de cliquer sur "supprimer".

J'ai essayé window.history.go(-1), mais comme c'est le cache qui est utilisé, la dernière page est réaffichée avec les enregistrements que j'ai effacés.

Je souhaiterai résoudre mon problème avec php en récupérant l'url de la page précédente mais comme mon formulaire utilise la méthode "POST", je n'ai pas d'idée.

Merci pour votre aide...
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 13h11   #2
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 794
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 794
Points : 1 684
Points : 1 684
Salut,
si tu passes ta limite de début dans l'url pour ta pagination, tu peux la repasser en GET sur chaque page.
Dans ton main.php, tu la passes dans le form en GET :

Code :
1
2
3
4
5
6
7
8
9
10
 
<?php
if(!isset($_GET['startlimit'])) {
$startlimit = 0;
}
else {
$startlimit = $_GET['startlimit'];
}
?>
<form method="post" name="suppression" action="effacer.php?startlimit=<?php echo $startlimit; ?>">
effacer.php :

Code :
1
2
3
4
5
6
7
if(!isset($_GET['startlimit'])) {
$startlimit = 0;
}
else {
$startlimit = $_GET['startlimit'];
}
header("Location: main.php?startlimit=".$startlimit); // Il vaut mieux utiliser un header qu'une redirection JS
Sinon tu peux le stocker en session, mais si c'est juste pour stocker cela, je pense pas que ca vaille le coup de créer une session.
Bye
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h17   #3
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Salut Djak,

Comme d'habitude, merci pour ta promptitude !
J'ai effectivement suivi tes conseils me doutant que le JS n'était pas la meilleure solution ici.

Je récupère bien l'url de la dernière page main.php avec ta méthode :

Code :
1
2
 
<form method="post" name="suppression" action="effacer.php?debut=<?php echo $_GET['debut']; ?>">
mais dans mon fichier effacer.php, j'ai l'impression que mon header n'est pas interprété car dès que j'ai cliqué sur "supprimer", j'arrive sur la page effacer.php et le script s'arrete.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
	<?php 
 
	mysql_connect("SERVER", "USER", "PASSWORD");
	mysql_select_db("DB");
 
	foreach ($_POST as $oui => $valeur) 
	{ 
	if ($oui == 0)
		{ }
	else
		{
		$supPros="DELETE FROM visiteurs WHERE idVisiteur='".$valeur."'";
		$ReqSupPros=mysql_query($supPros);
		}
	}
 
	if(!isset($_GET['debut'])) 
	{
	$debut = 0;
	}
	else {
	$debut = $_GET['debut'];
	}
 
	header("Location: main.php?debut=".$debut);	
 
	?>
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 14h38   #4
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 794
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 794
Points : 1 684
Points : 1 684
Est-ce que tu envoies du texte au navigateur avant ton header ou bien le code de effacer.php est exactement celui que tu as mis ?

D'autre part attention si tu fais ca sans test :
<form method="post" name="suppression" action="effacer.php?debut=<?php echo $_GET['debut']; ?>">
tu vas avoir une erreur sur certains serveurs (ca dépend de la config), d'ailleurs si tu travailles en local (pas sur un site public en ligne), tu peux chercher cette ligne (dans le php.ini):
error_reporting = E_ALL
et t'assurer qu'il y a bien E_ALL, pour afficher toutes les erreurs et notices de script, c'est pratique pour le debug, en local.
Je dis ca parce que normalement si le problème vient du header tu devrais avoir une erreur d'affichée ^^
idem pour echo $_GET['debut'] sur la page 0 de la pagination, si $_GET['debut'] n'est pas définie.

tu dois également mettre display_errors à on :
display_errors = On;
dans le php.ini si tu veux afficher les erreurs
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2006, 16h35   #5
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Le code du fichier effacer.php est tel quel.

Effectivement, les tests, je les fais en ligne donc je n'ai pas accès au fichier php.ini de mon hébergeur.
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 01h05   #6
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 794
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 794
Points : 1 684
Points : 1 684
lol ^^
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 08h17   #7
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
hi Djak,
Si tu te marres, c'est mauvais signe !

Je ne comprends pas pourquoi le header ne fonctionne pas dans ce cas !!??

Même lorsque je fais simplement ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<?php 
 
mysql_connect("SERVER", "USER", "PASSWORD");
mysql_select_db("DB");
 
foreach ($_POST as $oui => $valeur) 
{ 
if ($oui == 0)
	{ }
else
	{
	$supPros="DELETE FROM visiteurs WHERE idVisiteur='".$valeur."'";
	$ReqSupPros=mysql_query($supPros);
	}
}
 
header("Location: main.php");
 
?>
Ya t'il une erreur de syntaxe dans le code ?
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 09h05   #8
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 794
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 794
Points : 1 684
Points : 1 684
Ton code marchait avant la modif ?
Vérifie que tu n'as pas de caractères avant la première balise <?php (même un espace ou un saut de ligne)
C'est dur de debugger sans les codes d'erreurs ^^

[edit]En fait pour debugger t'aurais meilleur temps de développer tes scripts en local ^^ mais tu peux quand même utiliser :
ini_set("errors_reporting", E_ALL);
ini_set("display_errors", "1");

au début de ton script, pour modifier les param du php.ini, uniquement pour le script en cours.
ou encore si t'es sous Apache mettre ca :

php_value errors_reporting 2047
php_value display_errors "1"

dans un fichier .htaccess dans le même répertoire que ton script.

Sinon, si ton hébergeur à tout bloqué c'est qu'en théorie il redirige les erreurs vers un fichier de log que tu dois pouvoir consulter en ftp , enfin, le plus simple reste quand même de commencer à tester en local

[/edit]
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 10h24   #9
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Merci Djak. Je vais suivre tes conseils à la lettre.
Je te tiens au courant.
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 11h41   #10
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Je n'ai pas répondu à ta question. Mon code fonctionnait bien avant la modif mais en utilisant JS.
Et si je remplace le JS par un header, celui-ci n'est pas interprété et je n'ai donc pas de retour vers ma page main.php
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 11h45   #11
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 794
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 794
Points : 1 684
Points : 1 684
Ok, donc le problème vient sûrement du fait que du texte est envoyé au navigateur avant le header.
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 12h36   #12
Membre à l'essai
 
Inscription : septembre 2006
Messages : 92
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 92
Points : 24
Points : 24
Mon cher Djak, une fois de plus tu as fait mouche !

Le problème se situait au niveau des caractères avant la première balise.
Pour une raison de lisibilité, tout le code était décalé.

En ré-alignant le code sur la gauche, tout est ok.
Je ne savais pas que cela pouvait pertuber le fonctionnement de la fonction "header", alors que ça ne gênait pas lorsque j'utilisais JS.

Ceci dit, je garde tes infos pour le debuggage du code, qui sont fort intéressantes.

Merci encore
creatchy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web