8791 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

J'essaie de mettre une table MYSQL nommée "etudiants" à jour.

J'obtiens bien les valeurs de la table dans des zones de texte.

Je peux alors modifier les valeurs mais lorsque je clic sur le bouton, la table ne se met pas à jour.

Le nombre de ligne est bien envoyé à l'autre page (MettreAJour qui est l'action du formulaire).

Je vous laisse mon code, ça sera je pense, un peu plus parlant :

<?php

$compteur = 0;
 
 
# script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
# variable qui contient le nom de ma base de données.
$dbname = 'deliberations';
 
 
$link = mysql_connect('localhost', 'root', 'mdp');
	if(!$link)	  
	 {
   		echo 'Impossible de se connecter à MySQL';
   		exit;
	}
	
	// Rendre la base de données deliberation, la base courante
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) 
	{
	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
	}

/*echo '<form action="MettreAJour.php?NbLignes='.$compteur.'" method="post" name="frmSaisie" id="frmSaisie">';
echo '<table border="1">';
$query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());*/

echo '<table border="1">';
$query = mysql_query("SELECT * FROM .$_POST[select_Nom_Tables] LIMIT 20") or die (mysql_error());
echo '<form action="MettreAJour.php?NbLignes='.mysql_num_rows($query).'" method="post" name="frmSaisie" id="frmSaisie">';



echo '<tr>';
for($i=0;$i<mysql_num_fields($query);$i++)
    {
    echo '<th>'.mysql_field_name($query,$i).'</th>';
    }
echo '</tr>';
while($row = mysql_fetch_array($query,MYSQL_NUM))
    {
	$compteur+=1;
	echo 'compteur -->'.$compteur;
    echo '<tr>';
    foreach($row as $value)
        {
	
	echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';
	#echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="text" id="txtMatricule"'.$compteur.'value="'.mysql_field_name.$compteur.'"></td>';
     #   }
    
	
}
echo '</tr>';
    }
echo '<input type="submit" name="Submit" value="Mettre la table à jour" />' ; 

echo '</p></form>';
	echo '</table>';
        
?>



et voic le code de "MettreAJour.php" qui contient le code SQL qui devrait mettre à jour la table :



<?php
 
 
# script qui permet de créer des zones de texte à la volée et d'afficher le nom des champs de la table
# variable qui contient le nom de ma base de données.
$dbname = 'deliberations';
$compteur = 0;
 
 
$link = mysql_connect('localhost', 'root', 'mdp');
	if(!$link)	  
	 {
   		echo 'Impossible de se connecter à MySQL';
   		exit;
	}
	
	// Rendre la base de données deliberation, la base courante
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) 
	{
	   die ('Impossible de sélectionner la base de données : ' . mysql_error());
	}
 
$NbLignes = $_GET["NbLignes"];

echo '&NbLignes vaut '.$NbLignes;

for ($i = 0; $i < $NbLignes;$i++)
{ 
     $Matricule = $_REQUEST["txtMatricule".i];
	 $Nom = $_REQUEST["txtNom".i];
	 $Prenom = $_REQUEST["txtPrenom".i];
	 $DateDeNaissance = $_REQUEST["txtDateDeNaissance".i];
	 $Email = $_REQUEST["txtEmail".i];
	 $Photo = $_REQUEST["txtPhoto".i];
	 

 
$txtSQL = "" ;
$txtSQL = "update [etudiants] set [Nom_Et] = '".$Nom ."' where  [Matricule_Et] = '".$Matricule."'" ;



}


?>



Merci d'avance pour votre aide.

beegees
Modifié par beegees (15 Oct 2008 - 20:31)
Surfoo a écrit :
Bah il manque un mysql_query() pour exécuter ta requête..


Bonjour,

Merci pour ta réponse.

J'ai modifié mon code :

mysql_query("UPDATE 'etudiants' SET $Nom_Et='$Nom' WHERE Matricule_Et=$Matricule");


Je pense que le problème vient en fait d'ici :

 $Matricule = $_REQUEST["txtMatricule".i];


Pour éviter de devoir changer le code lors d'un ajout d'une table, j'ai essayé de rendre le plus générique possible mon code en faisant ceci :

echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';


txtMatriucle n'existe donc pas.

idem dans la chaine SQL update.

Est-il possible vue que mysql_field_name se trouve dans une autre page que la chaine SQL l'utilise ?


ça ne fonctionne pas encore mais ça bouge.

Merci encore.

beegees
Modifié par beegees (16 Oct 2008 - 07:17)

$txtSQL = "update [etudiants] set [Nom_Et] = '".$Nom ."'
 where  [Matricule_Et] = '".$Matricule."'" ;

Est-ce que les noms de champs entourés de crochet est une écriture correcte en sql ?
Tes champs dans la base mysql sont nommés [Nom_Et] ou Nom_Et ?

A priori :


$txtSQL = "update etudiants set Nom_Et = '".$Nom ."'
 where  Matricule_Et = '".$Matricule."'" ;

devrait largement suffire non ?
Malheureusement, ça ne fonctionne toujours pas.

Je pense que le problème est ici :

for ($i = 0; $i < $NbLignes;$i++)
{ 
     $Matricule = $_REQUEST["txtMatricule".i];


	 

 
$txtSQL = "" ;
$txtSQL = "update etudiants set Nom_Et = '".$Nom ."' where  Matricule_Et = '".$Matricule."'" ;


}


Le nom est en fait :


	echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';

Merci pour l'aide.
echo '<td> <textarea>'.$value.'</textarea> <input name="'.mysql_field_name.$compteur.'" type="hidden" id="txtMatricule'.$compteur.'"value=""></td>';

Merci pour l'aide.

Tu n'as pas d'espace entre
$compteur.[#red]'"[/#]value=""


$compteur.'" value=""


Pas sûr que cela soit la cause pour autant...