Page 1 sur 1

horreur pb de code admin

Posté : 09 nov. 2005, 22:23
par oceane751
bonjour!
j'ai un petit problème avec ma page administration de mon site
en effet, les données de ma table "rat" s'affiche tres bien mais lorsque je veux les modifier plus rien ne va!!!
les données affichées sont de type "text"
rat(id_rat, nom_rat, sexe_rat, poids_rat, age_rat, couleur_rat, maladie_rat)
par exple :
1 robby male 700 grs 2 ans albinos rhume
2 rox male 400 grs 1 an marron
.........
18 joe male 300 grs 1 an noir

donc quand je veux modifier, par exple, l'age du rat dont l'id est = 1 et y mettre 2 ans et demi, et bien il m'affiche automatiquement toutes les données (nom_rat, sexe_rat, poids_rat, age_rat, couleur_rat, maladie_rat) du rat ayant l'id = 18

donc je ne comprends pas vraiment pourquoi il m'affiche ça


voici le code :

Code : Tout sélectionner

<? echo "<b><p align = \"center\"><font face = \"comic sans ms\" color = \"green\" size = \"+1\">Liste des rats trouvés dans la base de données:</p></font>"; echo "<br>"; echo "<br>"; echo "<font face = \"comic sans ms\">"; $db = mysql_connect('localhost', 'root', 'pouet'); mysql_select_db('oye',$db); // suppression if(isset($_POST['sub_form'])) { $sql = "DELETE FROM rat WHERE id_rat = ".$_POST['supp']; $res = mysql_query($sql) or die (mysql_error()); } // modifier if(isset($_POST['sub_form2'])) { $sql2 = "UPDATE rat SET nom_rat = '".$_POST['nom']."', sexe_rat = '".$_POST['sexe']."', poids_rat = '".$_POST['poids']."', age_rat = '".$_POST['age']."', couleur_rat = '".$_POST['couleur']."', maladie_rat = '".$_POST['maladie']."' WHERE id_rat = \"".$_POST['supp']."\""; $res2 = mysql_query($sql2) or die (mysql_error()); echo "donnée rat modifiée"; } echo "<br>"; echo "<br>"; $SQL = "SELECT * FROM rat"; $req = mysql_query($SQL) or die('Erreur SQL !<br>'.$SQL.'<br>'.mysql_error()); echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; while($data = mysql_fetch_assoc($req)) { echo "<b><table border = 0 cellpadding = 3 cellspacing = 3 bordercolor= green>"; echo "<tr>"; echo "<td>Identifiant : "."<input type ='text' name='id' value=\"".$data['id_rat']."\"></td>"."<br>" ; echo "<td>Nom : "."<input type ='text' name='nom' value=\"".$data['nom_rat']."\"></td>" ; echo "<td>Sexe : "."<input type ='text' name='sexe' value=\"".$data['sexe_rat']."\"></td>" ; echo "<td>Poids : "."<input type ='text' name='poids' value=\"".$data['poids_rat']."\"></td>" ; //echo "<td>Adresse : "."<input type ='text' name='adr' value=".$data['adr_volontaire']."></td>" ; echo "<td>Age : "."<input type ='text' name='age' value=\"".$data['age_rat']."\"></td>" ; echo "<td>Couleur : "."<input type ='text' name='couleur' value=\"".$data['couleur_rat']."\"></td><br>" ; echo "<td>Maladie : "."<input type ='text' name='maladie' value=\"".$data['maladie_rat']."\"></td>" ; echo"</tr>"; echo"<tr>"; echo "<td><input type='radio' name='supp' value=\"{$data['id_rat']}\">"."</td>"; echo "</tr></table>"; } echo "<input type=\"submit\" name=\"sub_form\" value=\"supprimer\" />"; echo "<input type=\"submit\" name=\"sub_form2\" value=\"modifier\" />"; ?>
j comprends plus rien car ce code marchait tres bien il y a quelque jour et là je en sais vraiment plus quoi faire
merci de votre aide...

Posté : 09 nov. 2005, 22:46
par pjl
Depuis quand un age est une chaine numérique ?

Posté : 09 nov. 2005, 23:02
par Cyrano
Je te dirais que stoker l'âge dans une base de données est une hérésie: stoke la date de naissance et ensuite fais un calcul dessus. Tu n'auras donc jamais à mettre à jour ta base de données

Posté : 09 nov. 2005, 23:28
par Truc
Depuis quand un age est une chaine numérique ?
"2 ans et demi" est bien une chaine :langue:
C'est vrai tu ne peut laisser les champs comme ça, comme dis un champ date est fait pour ça. :wink:

hormis le code pas optimisé et problemes de quotes/guillemets qui ne devrai pas avoir un impact direct puisque les champ de saisie sont aussi des chaines est-ce que:

1.tu affiche a chaque chargement les données de tous les rats ! tu veut dire que seul l'affichage du n°18 reste ?

2.la mise a jour se fait-elle quand meme ?

Posté : 11 nov. 2005, 18:58
par Invité
C'est vrai tu ne peut laisser les champs comme ça, comme dis un champ date est fait pour ça. :wink:

hormis le code pas optimisé et problemes de quotes/guillemets qui ne devrai pas avoir un impact direct puisque les champ de saisie sont aussi des chaines est-ce que:

1.tu affiche a chaque chargement les données de tous les rats ! tu veut dire que seul l'affichage du n°18 reste ?

2.la mise a jour se fait-elle quand meme ?[/quote]
en fait quand je modifie n'importe quelle donnée du rat dont l'id est 1 (ou 2 ou 3) et quand je clique sur "modifier" et bien ce sont les données du rat dont l' id est 18 (qui est le dernier de ma BDD) qui se met à la place du rat que j'ai voulu modifier
exple :

1 robby male 700 grs 2 ans albinos rhume
.....

18 joe male 400 grs 1 an noir

je modifie et ça donne :

1 joe male 400 grs 1 an noir
.......
18 joe male 400 grs 1 an noir

Posté : 11 nov. 2005, 19:32
par Invité
on m'a dit que tous les champs avaient le meme nom ete que c'était à cause de ça que lors de la mise à jour d'un rat, c'était les donnée du dernier enregistrement qui prenait la place des données du rat que j'ai voulu moddifier
ce que j'ai un peu de mal à comprendre..

Posté : 11 nov. 2005, 22:55
par Truc
Oui en effet tu boucle sur les champs donc a chaque tour de boucle tu "construit" le formulaire avec les meme champs mais surtout les meme noms ! Tu passe une 1ere fois dans la boucle tu aura le champ nom avec <name='nom'> au 2eme passage un 2eme champ mais toujours avec <name='nom'>...Donc toujours les meme noms => a la validation seul la derniere ligne sera pris en compte!

Le plus simple c'est de faire un traitement a part: tu affiche les données sans champs juste des labels avec un bouton radio comme tu l'a fait (éventuellement avec une case a cocher pour plusieurs traitements). Mais pas de modifications directement dans les champs, la modification se fera sur un autre formulaire ou tu pour saisir nom,age, etc... et valider la modification.

Important aussi: change le type des champs dans la BD l'age par exemple n'est pas du "texte" mais une "date", de meme pour l'id et poids qui sont numériques donc INT.

Posté : 12 nov. 2005, 06:57
par Invité
merci!!
mais on viens de m'aider et mon code marche..
mais j'ai un probleme avec..
c'est à dire que j'ai bien l'impression qu'avec une association ça bloque
j'ai une association qui reprend les clés primaires des entités qu'elle associe
voici le code

Code : Tout sélectionner

<? echo "<b><p align = \"center\"><font face = \"comic sans ms\" color = \"green\" size = \"+1\">Liste des entretiens des cages de la base de données:</p></font>"; echo "<br>"; echo "<br>"; echo "<font face = \"comic sans ms\">"; $db = mysql_connect('localhost', 'root', ''); mysql_select_db('bd2_rat',$db); // si envoi de formulaire if(isset($_POST['sub_form'])) { // si suppression if($_POST['sub_form']=="supprimer") { $sql = "DELETE FROM entretenir WHERE id_volontaire = ".$_POST['id']; $res = mysql_query($sql) or die (mysql_error()); // si modification }elseif($_POST['sub_form']=="modifier") { $sql = "UPDATE `entretenir` SET ". "`num_cage` = '". $_POST['num']."',". "`id_volontaire` = '". $_POST['id']."',". "`date_entretenir` = '". $_POST['date']."',". "WHERE `id_volontaire` = ".$_POST['id']; $res = mysql_query($sql) or die (mysql_error()); } } // extraction des donnees $sql = "SELECT * FROM entretenir"; $res = mysql_query($sql) or die(mysql_error()); // formulaire //echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "<table border =\"0\" cellpadding=\"0\" cellspacing=\"1\" bordercolor=\"green\">\n"; echo "\t<tr>\n"; echo "\t\t<th>Numero cage</th>\n"; echo "\t\t<th>Id volontaire</th>\n"; echo "\t\t<th>Date entretien</th>\n"; echo "\t</tr>\n"; while($data = mysql_fetch_assoc($res)) { echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">\n"; echo "\t<tr>\n"; echo "<input type=\"hidden\" name=\"id\" value=\"".$data['id_volontaire']."\" />\n"; echo "\t\t<td><input type=\"text\" name=\"num\" value=\"".$data['num_cage']."\" /></td>\n"; echo "\t\t<td><input type=\"text\" name=\"id\" value=\"".$data['id_volontaire']."\" /></td>\n"; echo "\t\t<td><input type=\"text\" name=\"date\" value=\"".$data['date_entretien']."\" /></td>\n"; echo "\t\t<td><input type=\"submit\" name=\"sub_form\" value=\"modifier\" /></td>\n"; echo "\t\t<td><input type=\"submit\" name=\"sub_form\" value=\"supprimer\" /></td>\n"; echo "\t</tr>\n"; echo "</form>\n"; } echo "</table>\n"; ?>
ce code marche à la perfection avec les autres tables..
mais avec les associations ça bloque carrement
il me donne comme erreur : Erreur de syntaxe près de 'WHERE `id_volontaire` = 5' à la ligne 1
donc est ec que ce code convient parfaitement avec une association?
ou pas du tout?
ralalala c'est bien galère quand meme.. :?
merci

Posté : 12 nov. 2005, 08:17
par Cyrano
La seule erreur que je voie qui soit possible, ce serait que le champ id_volontaire ne soit pas d'un type numérique:

Sinon, je te propose une petite optimisation de code, le HTML que tu génères actuellement n'est absolument pas conforme:
<p style="font-weight: bold; text-align: center; font-family: 'comic sans ms'; color: green; font-size: 120%">Liste des entretiens des cages de la base de données:</p>
<br>
<br>
<?php
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('bd2_rat',$db);

// si envoi de formulaire
if(isset($_POST['sub_form']))
{
    /* On récupère d'abord les données: */
    $id_volontaire = $_POST['id_volontaire'];
    // si suppression
    if($_POST['sub_form'] == "supprimer")
    {
        $sql = "DELETE FROM entretenir WHERE id_volontaire = ". $id_volontaire;
        $res = mysql_query($sql) or die (mysql_error());
    }
    // si modification
    elseif($_POST['sub_form'] == "modifier")
    {
        $sql = "UPDATE `entretenir` SET ".
                   "`num_cage` = ". $_POST['num'] .",".
                   "`id_volontaire` = ". $_POST['id'] .",".
                   "`date_entretenir` = '". $_POST['date'] ."',".
               "WHERE `id_volontaire` = ". $id_volontaire;
        $res = mysql_query($sql) or die (mysql_error());
    }
}

// extraction des donnees
$sql = "SELECT * FROM entretenir";
$res = mysql_query($sql) or die(mysql_error());

// formulaire

//echo "<form method="post" action="{$_SERVER['PHP_SELF']}">";
?>
<table border ="0" cellpadding="0" cellspacing="1" bordercolor="green">
  <tr>
    <th>Numero cage</th>
    <th>Id volontaire</th>
    <th>Date entretien</th>
    <th colspan="2">&nbsp;</th>
  </tr>
<?php
while($data = mysql_fetch_assoc($res))
{
?>
  <tr>
    <td colspan="5">
      <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
        <input type="hidden" name="id_volontaire" value="<?php echo($data['id_volontaire']); ?>" />
        <table>
          <td><input type="text" name="num" value="<?php echo($data['num_cage']); ?>" /></td>
          <td><input type="text" name="id" value="<?php echo($data['id_volontaire']); ?>" /></td>
          <td><input type="text" name="date" value="<?php echo($data['date_entretien']); ?>" /></td>
          <td><input type="submit" name="sub_form" value="modifier" /></td>
          <td><input type="submit" name="sub_form" value="supprimer" /></td>
        </table>
      </form>
    </td>
  </tr>
<?php
}
?>
</table>
En outre, tu avais mis une valeur en double: un champ caché dont la valeur est reprise dans un champ de type text: le champ caché a le même attribut name que le champ text : lequel sera pris en compte selon toi lors de la récupération ? Or tu en as bien besoin lors d'une modification : il faut donc le nommer différemment :

Posté : 12 nov. 2005, 19:35
par Invité
oui mon id est bien en int
arf mais le code marche pas :(
j'ai toujours la meme erreur..
mais comme c'est une association, qui reprend les 2 clés primaires des entités qu'elle associe, il faut peut etre quelque chose dans le code qui convienne tout particulierement?
2 conditions dans le WHERE?
enfin je sais pas trop..