UPDATE + GET id

killermano66 Messages postés 249 Statut Membre -  
dolmenhir Messages postés 251 Statut Membre -
Salut,

J'ai crée un script qui permet de poster des éditoriaux, de les modifier ainsi que de les supprimer. Je vous met en dessous la partie modification. J'ai un problème au niveau de la validation.
Le script de la page modification.php liste les divers éditos et en cliquant sur les liens permet de les visionner sous formes de formulaire pour les modifier.
Jusqu'ici, tout va bien c'es au niveau de la validation et de la requete SQL UPDATE que j'ai un soucis :

Celle - ci :
$requete_update = ("UPDATE editorial
SET titre='$titre' , contenue='$contenu' , auteur='$auteur' , date='$date'");
Me modifie tous les éditos de ma base ce que je ne souhaite pas, je souhaite qu'elle n'en modifie que celui sélectionné.

J'ai testé comme ça :
$requete_update = ("UPDATE editorial
SET titre='$titre' , contenue='$contenu' , auteur='$auteur' , date='$date' WHERE id='$id' ");
$id étant égal à : $id = $_GET['id'];
Mais la rien ne se passe, et je notes aucunes modification dans ma base de données

Page modification.php:

<?php
include('../../connection.php'); //On se connecte à la base
if(isset($_GET['id'])){ //si la variable id existe 
//Lien vers les editos prés a etre modifiés.
	$requete_selection = mysql_query('SELECT * 
					  FROM editorial 
				          WHERE id='.$_GET['id']) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

	$donnees = mysql_fetch_array($requete_selection);
?>
	
	<form action="valid_modif.php" method="post">
	Titre :<input type="text" name="titre" value="<?php echo $donnees['titre']; ?>" /><br /><br />
	
	Contenue : <br />
	<textarea name="contenu" rows="30" cols="30" style="width: 50%">
	<?php echo $donnees['contenue']; ?>
	</textarea>
	
	Auteur :
	<input type="text" name="auteur" value="<?php echo $donnees['auteur']; ?>" /><br />
	<input type="submit" value="Valider">
	</form>
	
	
<?php	
}
//Lien page modification
else {
	$requete_selection = mysql_query('SELECT * 
					FROM editorial') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	while ($donnees = mysql_fetch_array($requete_selection)){

		echo '<a href="modification.php?id='.$donnees["id"].' ">';
		echo $donnees['titre'] . '</a>' . ' ' . ' par ';
		echo $donnees['auteur'] . '<br />';		
	}
}
mysql_close(); //On se déconnecte
?>


Page valid_modif.php :
<?php
if ((empty($_POST['titre'])) OR (empty($_POST['contenu'])) OR (empty($_POST['auteur']))) //On teste si les champs sont bien remplis
{
	//Un ou plusieurs champs sont vides
	echo("Au moins un champ est vide, l'editorial n'a pas pu etre mis a jour");
}
else {
	//Tous les champs sont bien renseignés
	include ("../../connection.php/");
	$titre = mysql_real_escape_string($_POST['titre']);
	$contenu = mysql_real_escape_string($_POST['contenu']);
	$auteur = mysql_real_escape_string($_POST['auteur']);
	$date = time();
	$id = $_GET['id'];
	
	$requete_update = ("UPDATE editorial 
						SET titre='$titre' , contenue='$contenu' , auteur='$auteur' , date='$date' WHERE id='$id' ");
					
	$requete = mysql_query($requete_update) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // Renvoi une erreur en cas de problème.	
	echo("L'editorial a etait correctement mis a jour");	
}
?>

Voilà voilà, si quelqu'un à une idée de la provenace de ce petit soucis. Merci bien.

Cordialement,

A voir également:

4 réponses

dolmenhir Messages postés 251 Statut Membre 25
 
salut

essaye ca
$requete_update = "UPDATE editorial SET titre='".$titre."' , contenue='".$contenu."' , auteur='".$auteur."' , date='".$date."' WHERE id=".$id;

ou

$requete_update = "UPDATE editorial SET titre='".$titre."' , contenue='".$contenu."' , auteur='".$auteur."' , date='".$date."' WHERE id=".$_GET['id'];
1
killermano66 Messages postés 249 Statut Membre 41
 
Donc,

La deuxième fonctionne trés bien :
$requete_update = "UPDATE editorial SET titre='$titre' , contenue='$contenu' , auteur='$auteur' , date='$date' WHERE id=".$_GET['id'];

Mais j'ai un petit soucis de compréhension aprés ça :
"UPDATE editorial SET titre='$titre' , contenue='$contenu' , auteur='$auteur' , date='$date' WHERE id="
Tu referme la commande UPDATE avant d'avoir déterminé le champ id et c'est ensuite que tu le rajoute. Donc ok, il y a concaténation mais je comprend pas pourquois le $_GET est pris en compte ici.

Enfin c'est juste dans un soucis de compréhension je déteste ne pas comprendre ce que je fais xD.

Merci beaucoup, ça règle mon problème ;)
0
killermano66 Messages postés 249 Statut Membre 41
 
Autre soucis maintenant avec la commande DELETE qui me renvois une erreur :
J'utilise donc la même méthode :

<?php
include("../../connection.php");
$requete_delete = 'DELETE FROM editorial WHERE id='.$_GET['id'];
$requete = mysql_query($requete_delete) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // Renvoi une erreur en cas de problème.

echo("L'editorial a etait supprime<br />");
echo("Vous allez etre redirige vers le formulaire dans 3 secondes<br />");
echo("Si vous ne voulez pas attendre <a href='form_edito.php' alt='Formulaire'>Cliquez ici</a>");
header("Refresh: 3; URL=form_edito.php");
?>

Erreur générée :
Erreur SQL !
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Donc j'ai tenté autrement :
mysql_query('DELETE FROM editorial WHERE id='' . $_GET['id'] . '');
Plus d'erreur mais rien ne se delete. Voilà, je comprend pas trop.

Merci encore.
0
dolmenhir Messages postés 251 Statut Membre 25
 
tu joues trop avec les parenthèses (
pas bon ça

dans l'ordre, la premier version fonctionne aussi
$requete_update = "UPDATE editorial SET titre='".$titre."' , contenue='".$contenu."' , auteur='".$auteur."' , date='".$date."' WHERE id=".$id; 

a condition d'initialiser la variable $id en lui collant préalablement la valeur de $_GET['id'];

la variable $_GET['id'] est prise en compte dans toute la page vers laquelle ladite variable a été envoyée
je te conseille toutefois de changer de methode dans ton formulaire et d'utiliser plutot du $_POST car les variables n'apparaissent alors pas dans l'url

bref, inutile d'initialiser une variable locale... $_POST['id'] ou $_GET['id'] feront bien l'affaire.

Pour le DELETE essaye :
$requete_delete = "DELETE FROM editorial WHERE id=".$_GET['id']; 

mais veille à ce que la variable id soit bien envoyée à la page sans quoi ça ne marchera pas si la valeur est vide

petit conseil :
utilise des champs invisible dans ton formulaire et donne leur les nom de "modifier" "ajouter" et "supprimer"
donne leur une value="0"
et utilise des bouton de type bouton et non pas submit pour enclencher une action
a ces bouton, un script javascript changera la value du champs caché concerné par l'action attendue
onClick="modifier.value=1;submit()

l'action de ton formulaire renvoie à la page courante (le plus simple c'est d'y mettre un simple #)

et dans ta page tu places tes scripts UDPATE, INSERT et DELETE que tu conditionnes à la valeur du champs caché passé en paramètre
if($_POST['modifier']==1) {
$requete_update = "UPDATE editorial SET titre='".$titre."' , contenue='".$contenu."' , auteur='".$auteur."' , date='".$date."' WHERE id=".$_GET['id'];
etc...
}

ainsi si $_POST['modifier']==1 alors tu enclenches le script UPDATE et ainsi de suite

d'où l'intérêt de n'utiliser qu'une method post plutot qu'une get
0