Page 1 sur 1

probleme formulaire de modification

Posté : 29 oct. 2007, 18:52
par Temperature
mon fichier qui affiche les joueurs avec pour chacun la possibilité de les modifier
<?php 
	if ($connexion = mysql_connect("localhost","***","****")) {
		if (mysql_select_db("****",$connexion)) {
			$req=mysql_query("SELECT Prenom,Nom,Nationalite,Club,IdJ FROM Joueur ORDER BY Nom");
			while($row=mysql_fetch_array($req)){
				$idjoueur=$row['IdJ'];
				echo"<tr>";
				echo"<td>".$row['Prenom']."</td>";
				echo"<td>".$row['Nom']."</td>";
				echo"<td>".$row['Nationalite']."</td>";
				echo"<td>".$row['Club']."</td>";
				echo"<td>"."<a href='modifier_joueur.php?id=$idjoueur'>"."modifier"."</td>";
				echo"<td>"."<a href='supprimer_joueur.php?id=$idjoueur'>"."supprimer"."</td>";
				echo"</tr>";}					
		} else die("erreur de sélection de la base <br>".mysql_error());
	} else die("erreur de connexion sql <br>".mysql_error());
?>
Puis la page modifier_joueur.php
les champs se remplissent correctement mais au moment de modifier rien ne se fais
dois-je encore appeler une autre page ? ou manque -til autre chose?
merci
<?php 
$idjoueur=$_GET["id"];
	if ($connexion = mysql_connect("localhost","****","****")) {
		if (mysql_select_db("****",$connexion)) {
			echo thomas; echo $idjoueur; echo thomas;
			$req=mysql_query("SELECT IdJ,Prenom,Nom,Nationalite,Club FROM Joueur WHERE IdJ='$idjoueur'");
			if( $req){$joueur=mysql_fetch_assoc($req);}
		} else die("erreur de sélection de la base <br>".mysql_error());
	} else die("erreur de connexion sql <br>".mysql_error());
?>
	
<form method=post action="modifier_joueur.php">
<TABLE BORDER=0>
<TR><TD>Prenom</TD>
	<TD>
	<INPUT type=text name="prenom" value="<?php echo $joueur[Prenom];?>">
	</TD></TR>
<TR><TD>Nom</TD>
	<TD>
	<INPUT type=text name="nom" value="<?php echo $joueur[Nom];?>">
	</TD></TR>
<TR><TD>Nationalité</TD>
	<TD>
	<INPUT type=text name="nationalite" value="<?php echo $joueur[Nationalite];?>">
	</TD></TR>
<TR><TD>Club</TD>
	<TD>
	<INPUT type=text name="club" value="<?php echo $joueur[Club];?>">
	</TD></TR>
<TR><TD>Enregistrer la modification</TD>
	<TD>
	<INPUT type="submit" value="Envoyer">
	</TD>
</TR>	
</TABLE>
</form>
<?php
	$prenom=$_POST['prenom'];
	$nom=$_POST['nom'];
	$nationalite=$_POST['nationalite'];
	$club=$_POST['club'];
	
	mysql_query("UPDATE Joueur 
				 SET Prenom='$prenom', Nom='$nom', Nationalite='$nationalite', Club='$club' WHERE IdJ='$idjoueur'");
?>

Posté : 29 oct. 2007, 21:36
par Volkow
Enlèves tout de suite ton login et ton mot de passe BDD!!!

-------------------------------------------------------

Pour ma part, pour remplacer je fais comme ça (si j'ai bien compris ^^):

<?php 
// valeurs du champ envoyé par POST
$variabledupost = addslashes($_POST['nomduchamp']);

// inclusion du fichier de connection BDD
include('../includes/dbconnect.inc.php');

// on crée la requête SQL pour le remplacement dans la BBD (là c'est pour un seul champ)
$sql = "UPDATE tatable_tbl SET lechamp='$variabledupost' WHERE id=1";

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


// on ferme la connexion à mysql
mysql_close();
?>
Quel est le problème avec tes fichiers?Il t'affiche une erreur?

Posté : 29 oct. 2007, 21:52
par h0_noMan
Affiche ta requete SQL.
Donne nous toutes les erreurs affichées.

Après, tu as des problèmes de sécurité (SQL Inject) et d'optimisation (variables dans double-quote).

Posté : 30 oct. 2007, 10:08
par Temperature
enfet ça me modifie bien la ligne mais en une ligne vide
et je n'ai pas d'erreur du a la requete

Posté : 30 oct. 2007, 10:40
par h0_noMan
Quelle est le format de ta table Joueur ? (Nom des champs ainsi que les types)

Joueur.IdJ est surement de type int, donc enleves les '
Afin de gagner du temps, tu peux sortir tes variables des "
$query = "UPDATE Joueur SET Prenom='".$prenom."', Nom='".$nom."', Nationalite='".$nationalite."', Club='".$club."' WHERE IdJ=".$idjoueur ;
mysql_query($query);

Posté : 30 oct. 2007, 11:02
par Temperature
en effet j'ai un probleme de guillemet " et d'apostrophe '

je cherche un peu merci

toujours pas :(

Posté : 30 oct. 2007, 11:09
par Temperature
UPDATE Joueur SET Prenom=Eric, Nom=Abidal, Nationalite=Français, Club=Lyon/FC Barcelone Poste=Defenseur droit WHERE IdJ=\'\'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 'Barcelone Poste=Defenseur droit WHERE IdJ=\'\'' at line 2
$query = "UPDATE Joueur
SET Prenom=$prenom, Nom=$nom, Nationalite=$nationalite, Club=$club Poste=$poste WHERE IdJ=\'$idjoueur\'";
j'ai essayé cote, guillemet, rien ? a moins que je me soit trompé encore ?

Posté : 30 oct. 2007, 11:10
par Ryle
Tu as à priori surtout un problème de séquencement ou de condition... lorsque l'on ouvre ton script modifier_joueur.php voici ce qui se passe :
- connexion à la base récupération des données du joueur
- affichage des données dans un formulaire
- mise à jour de la base avec les données récupérée en post.

Or à ce moment là, aucune donnée n'a été envoyée en post via le formulaire. Donc dès l'ouverture de cette page, tu vide l'enregistrement avec ton update.

Il te faut donc ajouter une condition pour ne faire la mise à jour que lorsque le formulaire a été soumit :)

Edit : et ta dernière requête est effectivement erronée.. En sql, on ne délimite les chaines (totues les chaines et uniquement les chaines) qu'entre apostrohpes. Tu peux délimiter ta requête entre guillemets pour éviter d'avoir à backslasher les apostrophes et surtout, sors toujours toutes les variables de tes chaines !! :)

Posté : 30 oct. 2007, 11:19
par Temperature
Il te faut donc ajouter une condition pour ne faire la mise à jour que lorsque le formulaire a été soumit

Heu je ne sais pas comment faire c'est pas du javascript ?
Onclick etc ?

Posté : 30 oct. 2007, 11:23
par h0_noMan
WHERE IdJ=\'$idjoueur\'";
Enleves ce qui est en rouge.
Tu ne compares pas une chaine de caractères mais un entier donc pas de '

Posté : 30 oct. 2007, 11:29
par Temperature
avec ou sans sa ne marche pas
le probleme c'est ce que m'a dis Ryle
comme j'effectue la requete de modification en meme temps que le remplissage des champs et bien rien ne peut se modifier
quand je clique sur envoyer cela prend en compte mon remplissage initial de ma premiere requete avec les $_GET

Est-ce que je dois separer la 2eme requete dans une autre page ?
ou la solution de la condition Ryle c'est quoi?

Posté : 30 oct. 2007, 11:37
par d0m
Sort du code et essaie de t'imaginer ce qui doit se passer.

1. On arrive sur la page du formulaire.
2. Les données du joueur sont chargées.
3. L'utilisateur rempli le formulaire
4. Le formulaire est soumis
5. La modification se fait

Il faut donc faire la requête d'update une fois le formulaire soumis.
Et donc sur la page où la soumission du formulaire va envoyer (page dans le champ action de la balise <form>)

Posté : 30 oct. 2007, 11:50
par Temperature
donc je met action=executer_requete.php
et dans ce fichier je fais ma requete UPDATE mais est-ce que mes $_POST seront garder ou je doit tout passer en url action=executer_requete.php?nom=$_POST['nom'] etc etc

Posté : 30 oct. 2007, 12:02
par Ryle
Tu peux effectivement créer un nouveau script pour enregistrer les données, ou simplement placer cette partie du code en haut de ton script de modification :
<?php 
    $prenom=$_POST['prenom']; 
    $nom=$_POST['nom']; 
    $nationalite=$_POST['nationalite']; 
    $club=$_POST['club']; 
     
    mysql_query("UPDATE Joueur  
                 SET Prenom='$prenom', Nom='$nom', Nationalite='$nationalite', Club='$club' WHERE IdJ='$idjoueur'"); 
?> 
Et ne l'exécuter que si des données sont envoyées en post. Pour savoir si des données sont envoyées via le formulaire, le plus simlpe est de donner un nom au bouton submit et de vérifier que celui-ci a été envoyé dans le request :

Code : Tout sélectionner

<INPUT type="submit" name="enregistrer" value="Envoyer">
<?php 
  if (isSet($_POST['enregistrer'])) {
    ... // enregistrement des données du formulaire
  }
?>
Tu peux ensuite rediriger l'utilisateur avec un header() ou lui reproposer le formulaire avec les données modifiées :)

Posté : 30 oct. 2007, 12:09
par iclo
Tu n'as pas besoin de passer par un troisième fichier:

En gros, ça donne :

Code : Tout sélectionner

// On teste si le formulaire a été valider // SI oui: // On récupère toutes les données dans POST et on les vérifies // On execute l'update // On redirige éventuellement vers une autre page // SINON On affiche le formulaire
[Edit] Griller par Ryle, mais bon, au moins on a des idées semblables... ;)