Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 24/11/2011, 09h59   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Par défaut Valider et dévalider une fiche

Bonjour,
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
//Fonction qui valide et dévalide une fiche
//Une fiche est valide si son etat = 1, dévalide dans le cas contraire
function validFiche($fiche_id, $etat){
	global $db;
	$sql = 'UPDATE fiches SET etat = :etat
          WHERE id = :fiche';
	$statement = $db->prepare($sql);
	$statement->execute(array(':fiche' => $fiche_id, ':etat' => $etat));
}
 
//Traitement de l'action
if ( isset($_GET['fiche_id']) && !empty($_GET['fiche_id']) && isset($_GET['etat']) && !empty($_GET['etat']) ) {
	$actif = ($_GET['etat'] == 1) ? '' : 1;
	validFiche($_GET['fiche_id'], $actif);
}
 
//Lien pour lancer l'action
$etat = ( $tabl_result['etat'] == 1 ) ? 'Activée' : 'Désactivée';
<a href="?fiche_id='.$tabl_result['id'].'&etat='.$tabl_result['etat'].'">'.$etat.'</a>
Résultat, pour une fiche valide, un clic sur le lien la dévalide. Mais en cliquant à nouveau la fiche ne se valide pas.

Merci d'avance pour votre aide.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 11h18   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Question : quelle est la valeur de "etat" pour le cas "invalide" ? Si c'est 0, tu ne passeras jamais le !empty($_GET['etat']), et donc tu n'appeleras jamais ta fonction validFiche.

Citation:
Ce qui suit est considéré comme étant vide par la fonction empty:
  • "" (une chaîne vide)
  • 0 (0 en tant qu'entier)
  • 0.0 (0 en tant que nombre à virgule flottante)
  • "0" (0 en tant que chaîne de caractères)
  • NULL
  • FALSE
  • array() (un tableau vide)
  • var $var; (une variable déclarée, mais sans valeur dans une classe)
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 12h07   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 726
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 726
Points : 3 293
Points : 3 293
Salut

Hormis la remarque de Celira, il y aurait peut être un souci dans la chronologie du code (déroulement).
Apparemment, les données de la fiche ($tabl_result) seraient récupérées avant que ne soit modifié la valeur de l'état (l'update à l'appel de validFiche).
Ca se peut même qu'il y ait une incohérence entre la valeur de $tabl_result['etat'] et $actif.

Faut toujours faire en 1er les modifs, puis après récupérer les données de façon à obtenir les bonnes valeurs.

Ceci dit, bien souvent on effectue une redirection (header) après une mise à jour, histoire d'éviter de refaire la même mise à jour si on recharge la même page.

A vérifier.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 14h35   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par Celira Voir le message
Question : quelle est la valeur de "etat" pour le cas "invalide" ? Si c'est 0, tu ne passeras jamais le !empty($_GET['etat']), et donc tu n'appeleras jamais ta fonction validFiche.
Exact.
J'en ai profité pour modifier mon code
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
 
function validFiche($fiche_id, $etat){
	global $db;
	$return = false;
	$sql = 'UPDATE fiches SET etat = :etat
          WHERE id = :fiche';
	$statement = $db->prepare($sql);
	if ( $statement->execute(array(':fiche' => $fiche_id, ':etat' => $etat)) ) {
		$return = true;
	}
	return $return;
}
 
$message = false;
if ( isset($_GET['fiche_id']) && isset($_GET['etat']) ) {
	$actif = ( $_GET['etat'] == 1 ) ? 0 : 1;
	$valid = validFiche($_GET['fiche_id'], $actif);
	if ( $valid ) {
		$message = 'La fiche a bien été ';
		if ( $_GET['etat'] == 1 ) { 
			$message .= 'désactivée';
		}
		else {
			$message .= 'activée';
		}		
	}
}
Merci.
okoweb 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 17h32.


 
 
 
 
Partenaires

Hébergement Web