Je n'arrive pas à mettre à jour ma table MYSQ

Fermé
beegees Messages postés 83 Date d'inscription samedi 30 décembre 2006 Statut Membre Dernière intervention 1 janvier 2018 - 15 oct. 2008 à 20:34
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 26 oct. 2008 à 21:22
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 :

[code]<?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>';

?>

/code

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

[code]

<?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."'" ;



}


?>

/code

Merci d'avance pour votre aide.

beegees
A voir également:

4 réponses

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

déjà pourquoi tu as des [ ] au niveau des tes noms de table ?

ensuite je vois pas de :
mysql_query($txtSQL);
donc il me semble que t'envoie pas la commande a mysql ;)

après je suis pas non plus un spécialiste :)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 oct. 2008 à 20:55
Bonsoir,

à la place de $_REQUEST mets $_POST

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

$txtSQL = "UPDATE etudiants SET Nom_Et = '".$Nom ."' WHERE Matricule_Et = '".$Matricule."'" ;


mysql_query($txtSQL);

car il faut qd même à un moment lancer la requette
0
beegees Messages postés 83 Date d'inscription samedi 30 décembre 2006 Statut Membre Dernière intervention 1 janvier 2018 7
19 oct. 2008 à 13:35
Bonjour Alain,

Merci pour ta réponse et désolé pour le retard de ma réaction mais j'étais occupé sur autre chose.

Malheureusement, ça ne fonctionne pas encore.

Voici le code de mon premier fichier :

[code]echo '<table border="1">';
$table = $_POST['select_Nom_Tables'];
$query = mysql_query("SELECT * FROM $table LIMIT 20");
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 'mysql_field_name vaut'.mysql_field_name($query,i);
#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>';/code

et voici le code de mon second fichier :

[code]<?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 = $_POST[mysql_field_name].[i];
$Nom = $_POST["txtNom".i];
$Prenom = $_POST["txtPrenom".i];
$DateDeNaissance = $_POST["txtDateDeNaissance".i];
$Email = $_POST["txtEmail".i];
$Photo = $_POST["txtPhoto".i];



$txtSQL = "" ;
$txtSQL = "UPDATE etudiants SET Nom_Et = '".$Nom ."' WHERE Matricule_Et = '".$Matricule."'" ;



mysql_query($txtSQL);



}


?>

/code

Merci d'avance pour l'aide.

beegees
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 oct. 2008 à 20:51
Bonsoir,

dans cette partie :

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>';


je vois deux erreurs:

tu fais $compteur+=1;

et ou initialises tu la variable $compteur ?

donc avant la boucle while mets:
$compteur=0;


ensuite mysql_field_name.$compteur mets

mysql_field_name($compteur)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 oct. 2008 à 22:13
Plus

erreur de principe, tu mets un textarea sans name= et dans lequel tu mets $value et tu mets un <input type =hidden avec un name mais sans valeur

ça ne peut pas poster qq chose

mets:

foreach($row as $value)
{

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


ensuite $Matricule = $_POST[mysql_field_name].[i];

$Matricule = $_POST['mysql_field_name'.$i];


$Nom = $_POST["txtNom".i];
$Prenom = $_POST["txtPrenom".i];
$DateDeNaissance = $_POST["txtDateDeNaissance".i];
$Email = $_POST["txtEmail".i];
$Photo = $_POST["txtPhoto".i];


et il te manque tous les $ devant i

$Nom = $_POST["txtNom".$i];
$Prenom = $_POST["txtPrenom".i];
$DateDeNaissance = $_POST["txtDateDeNaissance".$i];
$Email = $_POST["txtEmail".$i];
$Photo = $_POST["txtPhoto".$i]; 
0
beegees Messages postés 83 Date d'inscription samedi 30 décembre 2006 Statut Membre Dernière intervention 1 janvier 2018 7
20 oct. 2008 à 07:47
Bonjour Alain,

Un super GRAND merci pour ta réponse.

Pour ce qui est du compteur, je le déclarais en début de code, code que je n'avais pas copié dans ce message.


Pour ce qui est du for each :

J'ai fait ceci :

foreach($row as $value)
{

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

 }


le problème avec le mysql_field_name (enfin je pense, je peux me tromper) c'est qu'il n'affiche pas le nom des champs une fois la page générée :

Voici une partie de mon code HTML lorsque la page est générée :

<input name="mysql_field_name1" type="hidden" id="mysql_field_name1" "value="Ajourné"></td></tr><input type="submit" name="Submit" value="Mettre la table à jour" /></p></form></table>


On peut voir qu'il y'a bien indiqué :

name="mysql_field_name1"


Ce qui est pour moi (grand débutant) un peu déroutant car je ne sais pas quel nom il a donné à mon widget.

J'ai donc utilisé ceci :

foreach($row as $NomCol => $Valeur)
        {
			echo '<td> <textarea>'.$Valeur.'</textarea> <input name="'.$NomCol.$compteur.'" type="hidden" id="'.$NomCol.$compteur.'" "value="'.$Valeur.'"></td>';
			
	
		}


Il m'indique le nom du champ dans le code HTML :

<input name="Code_Decision1" type="hidden" id="Code_Decision1" "value="1"></td><td> <textarea>Ajourné</textarea> <input name="Nom_Decision1" type="hidden" id="Nom_Decision1" "value="Ajourné"></td></tr><input type="submit" name="Submit" value="Mettre la table à jour" /></p></form></table>


Ce qui est déjà un peu plus partlant.

Maintenant, il faut que je récupère ces valerus, ça c'est un autre problème.

Si tu as une idée, n'hésite pas.

Encore merci pour ton aide.

beegees
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 oct. 2008 à 21:22
Bonsoir,

effectivement ta partie de nouveau code semble mieux fonctionner pour generer ton HTML mais il y a une petite erreur
foreach($row as $NomCol => $Valeur)
{
echo '<td> <textarea>'.$Valeur.'</textarea> <input name="'.$NomCol.$compteur.'" type="hidden" id="'.$NomCol.$compteur.'" "value="'.$Valeur.'"></td>';


}


tu as une " en trop devant value

regarde bien le code HTML generé:
... id="Code_Decision1" "value="1" .....

donc il faut:

foreach($row as $NomCol => $Valeur)
        {
			echo '<td> <textarea>'.$Valeur.'</textarea> <input name="'.$NomCol.$compteur.'" type="hidden" id="'.$NomCol.$compteur.'" value="'.$Valeur.'"></td>';
			
	
		}


ensuite pourquoi mets tu un textarea ? en plus de l'input ?
0