Modifier table

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 8 févr. 2015 à 17:29
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 14 févr. 2015 à 08:33
Bonjour,
Voilà je ne comprends pas pourquoi mes modifications de table SQL ne fonctionne pas.
Pouvez-vous s'ils vous plait m'aider un petit peu à essayer de résoudre mon soucis.
Au niveau des INSERT il n'y a pas de problème simplement sur le UPDATE où le soucis
Voici ce que j'ai fait pour le moment.
Merci vraiment de me donner vos avis.
La class avec ses méthodes
class Gestion_Sortie_class {
	
	private $id_calendrier;
	private $date_sortie;
    private $lieu_sortie;
	private $objet_sortie;	
    private $rdv_sortie;

	private $bdd;
	
	public function __construct($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie) {

		$this->id_calendrier		= $id_calendrier;
		$this->date_sortie		= $date_sortie;
		$this->lieu_sortie 	    = $lieu_sortie;
		$this->objet_sortie 	    = $objet_sortie;
		$this->rdv_sortie 	    = $rdv_sortie;
		
		$this->bdd 				= bdd();
	}
	
	public function DateSortie() {
		$sql = "SELECT * FROM tb_calendrier WHERE id_calendrier = :id_calendrier";
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array(
						'id_calendrier' => $this->id_calendrier,
						));
		$donnees = $requete->fetch();
	}
	
	public function ModifDateSortie() {
		$sql = "UPDATE tb_calendrier
				SET date_sortie = :date_sortie, lieu_sortie = :lieu_sortie, objet_sortie = :objet_sortie, rdv_sortie = :rdv_sortie
				WHERE id_calendrier = :id_calendrier";			
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array(
						'id_calendrier' => $this->id_calendrier,
						'date_sortie' 	=> $this->date_sortie,
						'lieu_sortie' 	=> $this->lieu_sortie,
						'objet_sortie' 	=> $this->objet_sortie,
						'rdv_sortie' 	=> $this->rdv_sortie,
						));
		return 'success';
	}
}

les appels aux fonctions
if(isset($_POST['action'])) {
	
	$id_calendrier		= isset($_POST['id_calendrier']) ? Security::clean($_POST['id_calendrier']) : '';
    $date_sortie		= isset($_POST['date_sortie']) ? Security::clean($_POST['date_sortie']) : '';
    $lieu_sortie     	= isset($_POST['lieu_sortie']) ? Security::clean($_POST['lieu_sortie']) : '';	
    $objet_sortie     = isset($_POST['objet_sortie']) ? Security::clean($_POST['objet_sortie']) : '';
    $rdv_sortie		= isset($_POST['rdv_sortie']) ? Security::clean($_POST['rdv_sortie']) : '';

	$sortie = new Gestion_Sortie_class($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie);
	$verif = $sortie->DateSortie();
	
	if($verif == 'success') {
		
		if($sortie->ModifDateSortie()) {
			$erreur[] = "L'enregistrement c'est bien effectué";			
		} else {
			$erreur[] = "Une erreur est survenue";
		}
		
	} else {
		$erreur[] = $verif;
	}
}

if (isset($erreur)) {
	echo output_errors($erreur);
}

simplement 1 input de mon formulaire dans le soucis de ne pas alourdir la page
<td width="20%">Date de la sortie :</td>
<td width="30%"><input name="date_sortie" id="date_sortie" class="ajout_date" size="30" type="text" value="<?php echo isset($date_sortie) ? $date_sortie : ''; ?>" /></td>

Merci beaucoup
A voir également:

16 réponses

papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
9 févr. 2015 à 15:27
Bonjour
Si parmi vous quelqu'un pouurai juste essayer de m'aider à résoudre mon problème.
Je souhaiterai pouvoir modifier mes données SQL.
J'ai ma fonction UPDATE qui devrait aller pourtant.
Merci de votre aide.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 févr. 2015 à 08:59
Bonjour
Je suis toujours avec mon soucis.
En fait si je ne met pas le WHERE les modifications ce font bien mais sur toutes les entrée ce qui est normal.
Mais pourquoi avec le WHERE aucune modification ne se fait.
Je vous redonne mes fonctions si quelqu'un pourrais éventuellement me donner des pistes.
Je vous remercie
Voici ma class
class Gestion_Sortie_class {
	
	private $id_calendrier;
	private $date_sortie;
    private $lieu_sortie;
	private $objet_sortie;	
    private $rdv_sortie;

	private $bdd;
	
	public function __construct($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie) {
		
		$this->id_calendrier		= $id_calendrier;
		$this->date_sortie		= $date_sortie;
		$this->lieu_sortie 	    = $lieu_sortie;
		$this->objet_sortie 	    = $objet_sortie;
		$this->rdv_sortie 	    = $rdv_sortie;
		
		$this->bdd 				= bdd();
	}
	
	public function ModifDateSortie() {
		$sql = "UPDATE tb_calendrier
				SET date_sortie = :date_sortie, lieu_sortie = :lieu_sortie, objet_sortie = :objet_sortie, rdv_sortie = :rdv_sortie
				WHERE id_calendrier = :id_calendrier";			
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array(
						':id_calendrier' 	=> $this->id_calendrier,
						':date_sortie' 		=> $this->date_sortie,
						':lieu_sortie' 		=> $this->lieu_sortie,
						':objet_sortie' 	=> $this->objet_sortie,
						':rdv_sortie' 		=> $this->rdv_sortie,
						));
		return 'success';
	}
}

Mon appel aux fonctions
if(isset($_POST['action'])) {
	
	$id_calendrier		= isset($_POST['id_calendrier']) ? $_POST['id_calendrier'] : '';
    $date_sortie		= isset($_POST['date_sortie']) ? Security::clean($_POST['date_sortie']) : '';
    $lieu_sortie     	= isset($_POST['lieu_sortie']) ? Security::clean($_POST['lieu_sortie']) : '';	
    $objet_sortie     = isset($_POST['objet_sortie']) ? Security::clean($_POST['objet_sortie']) : '';
    $rdv_sortie		= isset($_POST['rdv_sortie']) ? Security::clean($_POST['rdv_sortie']) : '';

	$inscription = new Gestion_Sortie_class($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie);
	$verif = $inscription->ModifDateSortie();
	
	if($verif == 'success') {
		$erreur[] = "Vos modifications ont été changé avec succès.";			
	}
}
if (isset($erreur)) {
	echo output_errors($erreur);
}
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
10 févr. 2015 à 12:11
Salut,

Dans ta connexion à la bdd, as tu activé le rapport d'erreur PDO pour voir si tu avais une erreur sql ?

Si tu n'as pas d'erreur, il semblerait que tu n'as tout simplement pas de lignes dans ta bdd qui correspondent à la condition de la clause where. Vérifie la valeur du paramètre :id_calendrier.
D'ailleurs tu récupères cette valeur depuis un $_POST['id_calendrier'] mais ce champs n'est pas présent dans ton formulaire.

Bonne journée
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 févr. 2015 à 18:00
bonjour
Merci pour ta réponse.
En fait je n'ai aucune erreur SQL lorsque je modifie ça passe les verif puisque ça me met mais pas de modif de fait.
$erreur[] = "Vos modifications ont été changé avec succès."

si j'ai bien vérifié je fait un INSERT je vérifie dans ma BDD et ensuite j'essaie de faire un UPDATE.
Après je ne comprends plus pourtant j'ai analysé mon code mais quelque chose m'échappe.
 	Modifier 	Effacer 	27 	Jeudi 26 Février 2015 	Cruet 	Fête 	0 H  : 00

j'ai fait un copié/coller de mon entrée de ma BDD
Si tu peux m'aider, voir me donner encore quelques indices peut-être petità petit je vais y arriver.
Merci
0

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

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 févr. 2015 à 18:07
juste pour info
Comme je le disais j'ai dans ma BDD 3 entrées j'ai enlevé le WHERE et id_calendrier dans ma class
et toutes les entrée ont été modifiée.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 févr. 2015 à 10:08
Pour les erreurs sql ta vérification n'est pas correcte car ta méthode ModifDateSortie() retourne dans tous les cas la valeur 'success', même en cas d'erreur.

Si tu veux vérifier la bonne exécution de ta requête, il suffit de récupérer le résultat de la méthode $requete->execute().
Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.
Soit tout simplement :
// dans Gestion_Sortie_class
	public function ModifDateSortie() {
		$sql = "UPDATE tb_calendrier
				SET date_sortie = :date_sortie, lieu_sortie = :lieu_sortie, objet_sortie = :objet_sortie, rdv_sortie = :rdv_sortie
				WHERE id_calendrier = :id_calendrier";			
		$requete = $this->bdd->prepare($sql);
		$success = $requete->execute(array(
						':id_calendrier' 	=> $this->id_calendrier,
						':date_sortie' 		=> $this->date_sortie,
						':lieu_sortie' 		=> $this->lieu_sortie,
						':objet_sortie' 	=> $this->objet_sortie,
						':rdv_sortie' 		=> $this->rdv_sortie,
						));
		
		if (!$success) {
			echo "\nPDOStatement::errorInfo():\n";
			$arr = $sth->errorInfo();
			print_r($arr);
		}

		return $success;
	}


Puisque tu utilises la POO, il faudrait idéalement utiliser les Exceptions pour la gestion des erreurs PDO. Plus d'info : https://www.php.net/manual/fr/pdo.error-handling.php



As tu vérifier la valeur de $_POST['id_calendrier'] ?

if(isset($_POST['action'])) {
    var_dump($_POST['id_calendrier']);

0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
11 févr. 2015 à 18:02
Bonjour
Merci pour ton aide mais je suis un peu perdu en fait, je ne comprends pas.
J'ai vérifié la valeur "id_calendrier" ça me retourne que cette variable n' est pas définit
Notice: Undefined index: id_calendrier in C................

et puis l'erreur print_r dans la class que tu m'a envoyé me retourne NULL
Peux tu encore m'aider s'il te plait.

Merci infiniment de ton aide, j'aurai tellement envie de pouvoir mettre mon site en ligne.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
11 févr. 2015 à 23:21
je ne comprends pas pourquoi ça me retourne aucune errreur malgrès cette condition à l'exception des erreur de mon précédent post.
		if (!$success) {
			echo "\nPDOStatement::errorInfo():\n";
			$arr = $sth->errorInfo();
			print_r($arr);
		}

"Vos modifications ont été changé avec succès"
et malgès le message de succes aucune modification dans le BDD
Merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
12 févr. 2015 à 09:13
Pour la gestion des erreurs PDO j'ai fait fait une erreur de copié/collé depuis la doc, tu dois utiliser ta variable $requete (l'instance de PDOStatement) à la place de $sth :
		if (!$success) {
			echo "\nPDOStatement::errorInfo():\n";
			$arr = $requete->errorInfo();
			print_r($arr);
		}


Pour l'erreur undefined index, celle-ci n'existe pas puisque tu n'as aucun champ name="id_calendrier" dans ton formulaire : la variable $_POST['id_calendrier'] ne peut donc pas exister.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 févr. 2015 à 12:17
Bonjour,
Alors voilà où j'en suis.
En fait j'ai remplacé $_POST par $_REQUEST tout à fait par hazard et mes modifs fonctionnent.
if(isset($_POST['action'])) {

	$id_calendrier		= isset($_POST['id_calendrier']) ? $_POST['id_calendrier'] : '';
    $date_sortie		= isset($_POST['date_sortie']) ? Security::clean($_POST['date_sortie']) : '';
    $lieu_sortie     	= isset($_POST['lieu_sortie']) ? Security::clean($_POST['lieu_sortie']) : '';	
    $objet_sortie     = isset($_POST['objet_sortie']) ? Security::clean($_POST['objet_sortie']) : '';
    $rdv_sortie		= isset($_POST['rdv_sortie']) ? Security::clean($_POST['rdv_sortie']) : '';

par
if(isset($_POST['action'])) {

	$id_calendrier		= isset($_REQUEST['id_calendrier']) ? $_REQUEST['id_calendrier'] : '';
    $date_sortie		= isset($_POST['date_sortie']) ? Security::clean($_POST['date_sortie']) : '';
    $lieu_sortie     	= isset($_POST['lieu_sortie']) ? Security::clean($_POST['lieu_sortie']) : '';	
    $objet_sortie     = isset($_POST['objet_sortie']) ? Security::clean($_POST['objet_sortie']) : '';
    $rdv_sortie		= isset($_POST['rdv_sortie']) ? Security::clean($_POST['rdv_sortie']) : '';

par contre peut tu me donner une explication pourquoi mes UPDATE fonctionnent avec REQUEST et non avec POST malgrès les tutos que j'ai du mal à comprendre.
Merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
12 févr. 2015 à 12:30
Le tableau $_REQUEST rassemble les tableaux $_POST, $_GET et $_COOKIE. Je suppose donc que tu transmets ton paramètre id_calendrier soit via l'URL, soit via un cookie.
Ne serait-il pas renseigné dans l'attribut action de ton formulaire ?
Exemple :
<form action="fichier.php?id_calendrier=3" method="post">
    <input name="date_sortie" type="text" />
    <input type="submit" value="Envoyer" />
</form>

-> dans cet exemple, le paramètre date_sortie est envoyé en POST (champ du formulaire) alors que id_calendrier est envoyé en GET (dans l'URL)
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 févr. 2015 à 14:07
En fait mon formulaire est envoyé avec la méthode $_POST
<form id="formulaire" action="index.php?body=modif_calendrier&type=admin" method="post">

mon lien qui affiche le formulaire
<a href="./index.php?body=modif_calendrier&type=admin&id_calendrier=<?php echo $donnees['id_calendrier'];?>">
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 févr. 2015 à 15:03
J'aimerai te poser une dernière question s'il te plait.
Lorsque j'ouvre mon formulaire que les champs soient affiché avec les données insérée.
Voilà mon formulaire et ce que j'ai mis dans les VALUE mais aucun champ ne s'affiche.
if(isset($_POST['action'])) {

	$id_calendrier		= isset($_REQUEST['id_calendrier']) ? $_REQUEST['id_calendrier'] : '';
    $date_sortie		= isset($_POST['date_sortie']) ? Security::clean($_POST['date_sortie']) : '';
    $lieu_sortie     	= isset($_POST['lieu_sortie']) ? Security::clean($_POST['lieu_sortie']) : '';	
    $objet_sortie     = isset($_POST['objet_sortie']) ? Security::clean($_POST['objet_sortie']) : '';
    $rdv_sortie		= isset($_POST['rdv_sortie']) ? Security::clean($_POST['rdv_sortie']) : '';

	$calendrier = new Modif_Calendrier_class($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie);
	$verif = $calendrier->VerifDateSortie();

	if($verif == 'success') {
		
		if($calendrier->ModifDateSortie()) {
			$erreur[] = "Vos modifications ont été changé avec succès.";			
		} else {
			$erreur[] = "Une erreur est survenue";
		}
		
	} else {
		$erreur[] = $verif;
	}

}
if (isset($erreur)) {
	echo output_errors($erreur);
}
?>

<br/>

<div id="ajout_date">
	<form id="formulaire" action="index.php?body=modif_calendrier&type=admin" method="post">
        <fieldset>
            <legend class="legend">Modifier une Date du Calendrier</legend><br/>
		<table cellpadding="0" cellspacing="3">
			<tr>
				<td width="20%">Date de la sortie :</td>
				<td width="30%"><input name="date_sortie" id="date_sortie" class="ajout_date" size="30" type="text" value="<?php echo isset($date_sortie) ? $date_sortie : ''; ?>" /></td>
			</tr>
			<tr>
				<td width="20%">Lieu de la sortie :</td>
				<td width="30%"><input name="lieu_sortie" class="ajout_date" size="40" type="text" value="<?php echo isset($lieu_sortie) ? $lieu_sortie : ''; ?>" /></td>
			</tr>
				<td width="20%">Objet de la sortie :</td>
				<td width="30%"><input name="objet_sortie" class="ajout_date" size="40" type="text" value="<?php echo isset($objet_sortie) ? $objet_sortie : ''; ?>" /></td>
			</tr>

			</tr> 
		</table>

			<input name="action" value="ajouter" type="hidden" />
			<input type="submit" class="submit" value="Enregistrer"/>
        </fieldset>
	</form>
</div>
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 févr. 2015 à 12:20
Bonjour
Excuse moi encore de te déranger.
Voilà je souhaiterai pouvoir ré-afficher les données du formulaire pour pouvoir les modifier si besoin.
Donc les modifs fonctionnent c'est déjà ça lol...........
Alors voici le lien qui appel l'id_calendrier
<a href="./index.php?body=modif_calendrier&type=admin&id_calendrier=<?php echo $donnees['id_calendrier'];?>">

avec ce lien j'accède également à mon formulaire qui se trouve dans la page modif_calendrier.php
Merci en tout cas si tu peux voir d'où la solution à ce problème.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
13 févr. 2015 à 17:17
Le code de ton avant dernier message correspond au fichier modif_calendrier.php ?

Je ne vois pas de raison pour que les modifications fonctionnent mais pas l'affichage puisque tes variables $date_sortie, $lieu_sortie, etc.. ne sont pas altérées et devraient donc s'afficher correctement.

Il semble que ce ne soit pas ce code qui gère le traitement du formulaire, et/ou peut-être que tu effectues une redirection à la fin du traitement du formulaire ? (dans ce dernier cas, les paramètres POST n'existe donc plus)
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 févr. 2015 à 17:34
Bonjour
oui effectivement c'est bien le fichier
modif_calendrier.php
Ensuite pour le traitement du formulaire j'ai le fichier
Modif_Calendrier_class.php
class Modif_Calendrier_class {
	
	private $id_calendrier;
	private $date_sortie;
    private $lieu_sortie;
	private $objet_sortie;	
    private $rdv_sortie;

	private $bdd;
	
	public function __construct($id_calendrier, $date_sortie, $lieu_sortie, $objet_sortie, $rdv_sortie) {
		
		$this->id_calendrier		= $id_calendrier;
		$this->date_sortie		= $date_sortie;
		$this->lieu_sortie 	    = $lieu_sortie;
		$this->objet_sortie 	    = $objet_sortie;
		$this->rdv_sortie 	    = $rdv_sortie;
		
		$this->bdd 				= bdd();
	}
	
	public function ChampsVide() {
		return(empty($this->date_sortie) || empty($this->lieu_sortie) || empty($this->objet_sortie)) ? true : false;		
	}
	
	public function VerifCalendrier() {
		if($this->ChampsVide()) {
			$erreur = 'Veuillez remplir les 3 champs, Date, Lieu et Objet';
		} else {
			$erreur = 'success';
		}
		return $erreur;
	}
	
	public function ModifCalendrier() {
		$sql = "UPDATE tb_calendrier
				SET date_sortie = :date_sortie, lieu_sortie = :lieu_sortie, objet_sortie = :objet_sortie, rdv_sortie = :rdv_sortie
				WHERE id_calendrier = :id_calendrier";			
		$requete = $this->bdd->prepare($sql);
		$success = $requete->execute(array(
						':id_calendrier' 	=> $this->id_calendrier,
						':date_sortie' 		=> $this->date_sortie,
						':lieu_sortie' 		=> $this->lieu_sortie,
						':objet_sortie' 	=> $this->objet_sortie,
						':rdv_sortie' 		=> $this->rdv_sortie,
						));
		return $success;
	}
}

J'ai analysé ce que m'a suggéré mais je ne vois pas ce qui bloque l'affichage des valeurs du formulaire.
Peux tu y jeter un oeil s'il te plait, par contre j'ai juste ses deux fichiers mis à part le lien qui se trouve sur une autre page.
Et pour finir actuellement toutes les modifs fonctionnent bien j'ai fait des dizaines d'essai, j'ai plus que cette histoire d'affichage.
Merci vraiment si tu peux me sauver, je suis vraiment très curieux de savoir.
Merci encore
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
14 févr. 2015 à 08:33
Bonjour
En fait j'ai résolu mon problème, il a fallu que je cré un troisième fichier uniquement avec le formulaire pour l'affichage des données.
Merci bonne continuation.
0