[RESOLU] Update Sql + php requete

Petit nouveau ! | 6 Messages

27 sept. 2016, 02:30

Bonjour ,

Je viens vers vous car voila je suis en train de faire un espace administration sur un de mes sites et j'arrive à lire les données de la base de donnée , aussi a y ajouter des données mais dés que je veut les modifier là les problèmes commence j'ai chercher retourner mon code php dans tout les sens. Installez les code erreur mais rien ne veut changer !

Je vous donne mon code du formulaires qui prends les données de la base de donnée selon son id.
<form action="traitement_message" method="POST">

<?php
if (isset($_GET['id']))
{
$requete = $bdd->prepare('SELECT * FROM ar_message WHERE id = ?');
$requete->execute(array($_GET['id']));
while ($donnees = $requete->fetch())
{
	echo '
	<h2> ' . $donnees['id'] . ' - '.$donnees['Nom'].'  '.$donnees['Prenom'].'</h2>
	<p>
	<input type="text" value="' . $donnees['id'] . '" name="id_message_admin"/>
	<label for="id_message" id="lb_heure">Heure : </label>
	<input type="text" value="' . $donnees['Heure'] . '" id="heure_message"  />
	</p>
	<p>
	<label for="date_message" id="LbDate">Date: </label>
	<input type="text" value="' . $donnees['Date'] . '" id="date_message" />
	</p>
	<p>
	<label for="Mail" id="Lbmail">Mail : </label>			    
	<input type="text" value="' . $donnees['Mail'] . '" id="Mail" name="mail_message_admin"/>
	</p>
	<p>
	<label for="Nbre_pers" id="lb_nbre_pers">Nombre de personne : </label>
	<input type="text" id="Nbre_pers" value="'.$donnees['Nbre_pers'].'" />
	</p>
	<label id="LbMessage">Message : </label>
	<textarea id="Message">'.$donnees['message'].'</textarea>
	<a href="mailto:' . $donnees['Mail'] . '"><input type="button" value="Repondre" class="btn"/></a>
	<input type="submit" value="modifier" />
	<input type="submit" value="Supprimer" class="btn" />';
	echo'
	<h2 id="titre2_modif_product">Traitement du message</h2>';
	}
}
?>
</form>
et la commande du bouton "submit" qui se trouve sur la même page !
<?php
$req = $bdd->prepare('UPDATE ar_message SET Mail = :mail_message_admin WHERE id = :id_message_admin ');
$req->execute(array(
	$_POST['mail_message_admin'],
	$_POST['id_message_admin']
	));
?>
Et voici les erreurs que j’obtiens :

Notice: Undefined index: mail_message_admin in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php on line 47

Notice: Undefined index: id_message_admin in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php on line 48

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id_message_admin' in 'where clause'' in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php:49 Stack trace: #0 /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php(49): PDOStatement->execute(Array) #1 /home/dkinformvh/aveyron-randonnee.fr/admin/traitement_message.php(11): include('/home/dkinformv...') #2 {main} thrown in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php on line 49

Si quelqu'un peut m'aider je prends avec plaisir car aussi non je ne vais plus avoir de cheveux :D :D :D :D

Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 sept. 2016, 10:14

salut,

de ce que je vois de ton code c'est que tu auras autant de fois les champs que tu as de ligne en base et du coup se sera toujours le dernier afficher qui sera envoyé au serveur.

si ton code réalisant la requête sql n'est pas limité par un if tu auras toujours ces erreurs parce que la première fois que tu affiches la page tu n'as pas de données issue du formulaire et donc pas les index dans $_POST => boum notice ;)
l'exception PDO ensuite viens du fait qu'il n'y a pas de remplacement par les données :)

vu la requête SQL je suppose qu'elle ne retourne qu'une ligne (si l'id n'est pas unique c'est qu'il y a un problème, ou que ce n'est pas la clef primaire auquel cas il faudrait changer le nom ;) ).
si la requête retourne une seule ligne enlève le while il est totalement inutile (donc directement $donnees = $requete->fetch();) et cela rendera ton code plus clair a lire.

Pour le reste un if doit faire l'affaire
<?php
if (!empty($_POST['modifier'])) {
    $req = $bdd->prepare('UPDATE ar_message SET Mail = :mail_message_admin WHERE id = :id_message_admin ');
    $req->execute(array(
  $_POST['mail_message_admin'],
  $_POST['id_message_admin']
  ));
}
?>
pense aussi à nommer les boutons pour les conditions (sinon tu ne peux pas savoir si tu modifies ou supprimme).
dans mon exemple
<input type="submit" value="modifier" name="modifier" />
@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

27 sept. 2016, 10:38

Salut Moogli ,

Merci pour ta réponse et de ton aide ;p

Je ne suis pas contre de lire bien au contraire mais j'en ai tellement lu pour le moment que je suis un peu perdu j'avoue.

Effectivement tous les champs seront modifiable pour le moment je préfère perdre une table de message que la table prestation comme il m'est arriver hier car j'avais fait un code qui fonctionnait plutôt bien mais celui si me changez toute la colonne de la table au lieu de la ligne :p
Voila comment j'ai inséré le PDO mais euh j’espère ne pas m'être tromper
<?php
try
{
$bdd = new PDO('mysql:host=xxx;dbname=xxx;','xxx','');
$bdd -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ); 
$bdd->exec("SET CHARACTER SET utf8");
}
catch (Exception $e)
{
  die('Erreur : <b>' . $e->getLine() .' :</b> '. $e->getMessage());
}

?>
Le code qui donne les erreurs : (je ne sais pas si je peut le mettre avec le code en haut car il est répéter sur toute les pages)
<?php 
error_reporting(E_ALL); 
ini_set("display_errors",1); 
?>
Je ferais plus attention au bouton ;p
J'ai essayer le code que tu m'as donner mais j'ai encore et toujours un message d'erreur et différent du premier.
La ligne 52 correspond a"
));
"
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php:52 Stack trace: #0 /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php(52): PDOStatement->execute(Array) #1 /home/dkinformvh/aveyron-randonnee.fr/admin/traitement_message.php(11): include('/home/dkinformv...') #2 {main} thrown in /home/dkinformvh/aveyron-randonnee.fr/admin/include/traitement_message.php on line 52

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 sept. 2016, 11:33

<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
?>
t'emmerde pas avec ça modifie directement ton php.ini. de toutes façon c'est valeur son obligatoire en dev :)

pour le message d'erreur il d'indique qu'il n'a pas assez de paramètre, le plus simple c'est mettre les nom des paramètres en index pour qu'il s'y retourve
$req->execute([':mail_message_admin'=>$_POST['mail_message_admin'],
    ':id_message_admin'=>$_POST['id_message_admin']]);
@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

27 sept. 2016, 12:00

@ moogli
tu finis tes message par "Il en faut peu pour être heureux ......"
Et bien je te confirme car tu viens de m'aider d'une façon remarquable merci à toi !!!
Ps: je vais prendre des cours aussi les le php.ini
top cool et encore mille merci je vais l'adapter à mon site :p

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 sept. 2016, 12:21

de rien, content de t'avoir aidé ;)

@+
Il en faut peu pour être heureux ......