Aide dans php mysql

Fermé
eliah - 13 avril 2005 à 09:50
beeboo Messages postés 27 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 9 mai 2005 - 18 avril 2005 à 16:43
Bonjour!

Voila je dois améliorer un site internet et j'ai des petits soucis....
J'ai creer un formulaire pour permettre de rentrer des résultats d'analyses. J'ai donc fait afficher des cases a cocher.Mon probleme est que je n'arrive pas a récuperer les valeurs cochées pour les rentrer dans la table correspondante.

le code des cases a cocher est:

if ($result == 0){
$resultat = 'Impossible d\'effectuer cette requete '.$requete;
}
else{
if (mysql_num_rows($result)==0){
$resultat = 'Aucune donnée ne correspond à votre requête';
}
else{
while($ligne=mysql_fetch_row($result)){
while (list($cle,$valeur) = each($ligne)){
$resultat .= '<input type="checkbox" name="'.$cle.'" VALUE="'.$valeur.'">'.$valeur.'<br>';
}}}}
et la fonction pour recuperer les valeurs est:

if ($action == 'ajouter' || ($action == 'visualiser' && $num_enr == '')){
if ($status == "ok"){
$debut_requete = "INSERT INTO $objet (";
$fin_requete = ") VALUES(";
while(list($cle,$valeur)=each($champs)){
//echo "$cle $valeur<br>";
$debut_requete .= "$cle, ";
$fin_requete .= "'$valeur', ";
}
$requete = substr($debut_requete, 0, strlen($debut_requete)-2).substr($fin_requete, 0, strlen($fin_requete)-2).")";
action_simple($requete);
$action = "visualiser";
}
else{
if ($action == 'visualiser' && $num_enr == '')
$action = 'ajouter';
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}
}
if ($action == "visualiser" && $num_enr != '');{
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}

Si vous pouvez m'aider ce serais vraiment cool

8 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
13 avril 2005 à 10:19
Dans un premier temp, adns l'expression :
if ($action == "visualiser" && $num_enr != '');{
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}
il te faut oter le ';' de 'if($action == "visualiser" && $num_enr!='');{

Ensuite tu oublie de fermer une accolade à la fin (ou alors tu l'a oubliée dans le message.

Ensuite, ben ... je sais pas à quoi correspond tes $action donc... (est ce le nom d'un bouton submit ou un truc dans le genre, est-ce que tu initialise bien tes valeurs de $action, etc..

esce de l'html ? ou autre ?
0
ben $action fait reference a des boutons sur la page.
celle ci est codé en html et php.
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
13 avril 2005 à 11:29
Dans ce cas la, fait tu une récupértion de tes champ au début de la page ?
Du genre :

<?php

if(isset($_POST['action']))
$action = $_POST['action'];
else
$action = "";

?>

Tu peux me mettre ton code entier pour que je vois mieux l'ensemble de ce que tu as fait, merci

++
0
eliah > kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
13 avril 2005 à 15:38
Voici tout mon code (au passage encore merci de te pencher sur mon probleme):
dans mon fichier formulaire:

<td><br><b>Sélectionner un primer : </b><br></td></tr>
<tr><td>
<?if ($action == 'visualiser'){
//$pos_enr = champ2num("primers", 0, $ligne[3]);
echo $ligne[3];
}else{
$mende = case_cocher("select Nom_Primer from primers ORDER BY Nom_Primer", "Nom_Primer", $ligne[3]);
echo $mende;
}?></td></tr>

Dans mon fichier fonction (je te met que les bouts de code qui concernent ce truc:
function case_cocher($requete, $nom_case, $defaut){
global $host_bd_sapa, $login_bd_sapa, $pass_bd_sapa, $nom_bd_sapa;
$connection = ouvrir_db($host_bd_sapa, $login_bd_sapa, $pass_bd_sapa, $nom_bd_sapa);
$result = mysql_query($requete);

if ($result == 0){
$resultat = 'Impossible d\'effectuer cette requete '.$requete;
}else{
if (mysql_num_rows($result)==0){
$resultat = 'Aucune donnée ne correspond à votre requête';
}else{
while($ligne=mysql_fetch_row($result)){
while (list($cle,$valeur) = each($ligne)){
$resultat .= '<input type="checkbox" name="'.$cle.'" VALUE="'.$valeur.'">'.$valeur.'<br>';
}}}}
fermer_db($connection);
return $resultat;
}?>

//traitement_form() traite de maniere automatique tous les évenements d'un formulaire a savoir la visualisation,
//La modification, l'ajout ou encore la suppresion de page
function traitement_form($champs, $primaire, $objet, $action, $status, $num_enr){
list($cle_primaire, $valeur_primaire) = each($primaire);
$form = $objet;
$mode = "formulaire";

if ($action == 'ajouter' || ($action == 'visualiser' && $num_enr == '')){
if ($status == "ok"){
$debut_requete = "INSERT INTO $objet (";
$fin_requete = ") VALUES(";
while(list($cle,$valeur)=each($champs)){
//echo "$cle $valeur<br>";
$debut_requete .= "$cle, ";
$fin_requete .= "'$valeur', ";
}
$requete = substr($debut_requete, 0, strlen($debut_requete)-2).substr($fin_requete, 0, strlen($fin_requete)-2).")";
action_simple($requete);
$action = "visualiser";
}
else{
if ($action == 'visualiser' && $num_enr == '')
$action = 'ajouter';
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}}
if ($action == 'modifier'){
if ($status == "ok"){
$requete = "UPDATE $objet SET ";
while(list($cle,$valeur)=each($champs)){
$requete .= "$cle = '$valeur', ";
}
$requete = substr($requete, 0, strlen($requete)-2);
$requete .= " where $cle_primaire = '$valeur_primaire'";
action_simple($requete);
$action = "visualiser";
}else{
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}}
if ($action == 'supprimer'){
$requete = "DELETE FROM $objet where $cle_primaire = '$valeur_primaire'";
action_simple($requete);
$action = "visualiser";
}
if ($action == "visualiser" && $num_enr != ''){
$requete = "select * from $objet";
require_once("cadre_formulaire.cgi");
}}

et dans le fichier action
if ($mode == 'formulaire'){
if ($objet == 'resultats_analyses'){
$champs = array("Nom_Analyse"=>"$nom_analyse",
"Type"=>"$type",
"Nom_Primer"=>"$nom_primer",
"Image" =>"$image",
"Res_Attendu"=>"$res_attendu",
"Res_Obtenu"=>"$res_obtenu",
"Date_Analyse"=>"$date_analyse",
"Commentaire"=>"$commentaire");
$primaire = array("Id_Res_Analyse" => "$id_enr");
if ($action == 'modifier' || $action == 'ajouter'){
if ($image != ''){
$image = stripslashes($image);
$image = preg_replace('/\"/','', $image);
echo $image."<br>";
srand(time());
$taille = 15;
$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
$dest="";
while (is_file('images/images_resultats_analyses/'.$dest.'.jpg') || $dest == ''){
for ($i=0;$i<$taille;$i++){
$dest.=substr($lettres,(rand()%(strlen($lettres))),1);
}}
$dest = 'images/images_resultats_analyses/'.$gene."_".$dest.'.jpg';
echo $dest."<br>";
if (!copy($image, $dest)){
print("La copie du fichier $image n'a pas réussi...<br>\n");
}else{
$champs['Image'] = $dest;
}}}
if ($action == 'supprimer' || ($action == 'modifier' && $image != '')){
$requete = "SELECT Image FROM $objet where Id_Res_Analyse = $id_enr";
global $host_bd_sapa, $login_bd_sapa, $pass_bd_sapa, $nom_bd_sapa;
$connection = ouvrir_db($host_bd_sapa, $login_bd_sapa, $pass_bd_sapa, $nom_bd_sapa);
$result = mysql_query($requete);
if ($result == 0){
echo 'Impossible d\'effectuer cette requete: '.$requete.'<BR>Veuillez vérifier vos entrées';
}
else{
$ligne = mysql_fetch_row($result);
unlink('images/images_resultats_analyses/'.$ligne[0].'.jpg');
}
fermer_db($connection);
}
traitement_form($champs, $primaire, $objet, $action, $status_bdsapa, $num_enr);
}

Voila je coris pas avoir oublier des trucs
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > eliah
13 avril 2005 à 19:28
puiouhhh ! c long! je regarderai ca un autre soir que ce soir,

++
0
Si quelqu'un peut m'aider, mon problème est toujoours le meme....
0
Ce qui serait bien c'est que tu mette l'endroit où tu récupères les valeurs de tes cases à cocher pcq, là, honnêtement, j'arrive pas à lire ton code.
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
14 avril 2005 à 23:45
Moi j'ai bien peur qu'il ne les prend pas ses valeurs ::
T'aurais pas un truc du genre qqpart dans ton code Eliah ?:

if(isset($_POST['action']))
$action = $_POST['action'];
else
$action = "";

Parce que la je crois pas que tu récupère quoi que ce soit de tes formulaires par la méthodes POST.
Et puis ya pas de :
echo "<FORM action=\"truc.php\" method=\"POST\">
...
echo "</FORM>";
ou alors g pas vu !



++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je viens de voir dans ta fonction case_cocher() un truc qui me fait tiquer :

function case_cocher($requete, $nom_case, $defaut){
  global $host_bd_sapa, $login_bd_sapa, $pass_bd_sapa,     $nom_bd_sapa;
  $connection = ouvrir_db($host_bd_sapa, $login_bd_sapa,                     $pass_bd_sapa, $nom_bd_sapa);
  $result = mysql_query($requete);
  if ($result == 0){
    $resultat = 'Impossible d\'effectuer cette requete '.$requete;
  }
  else{
    if (mysql_num_rows($result)==0){
      $resultat = 'Aucune donnée ne correspond à votre requête';
    }
    else{
      while($ligne=mysql_fetch_row($result)){
        while (list($cle,$valeur) = each($ligne)){
          $resultat .= '<input type="checkbox" name="'.$cle.'" VALUE="'.$valeur.'">'.$valeur.'<br>';
        }
      }
    }
  } 
  fermer_db($connection);
  return $resultat;
}


Tu utilises $cle, $valeur comme pour tous les autres champs mais dans les checkbox et les radio, la valeur ne représente pas le contenu de la case mais son libellé. Il faut un troisième paramètre checked qui dit si la case est cochée ou non.

exemple : <input name="case" type="checkbox" value="Cochez cette boite">

Donc si ton champ $valeur contient bien l'état de la boîte, tu dois plutôt ecrire un truc du genre :

$check = ($valeur == 'on')? "checked" : "";
$resultat .= '<input type="checkbox" name="'.$cle.'" VALUE="'.$cle.'" '.$check.'><br>';
0
j'ai fait des echo:$cle et $valeur au niveau de la fonction traitement_form qui permet de récuperer les valeurs et $valeur ne contient rien.

Pour ce qui est du POST j'ai une ligne de code dans un fichier (celui ci permet la navigation entre les formulaires):

echo '<form method="post" action="'.$PHP_SELF.'" name="fiche">'."\n";
require_once("truc/formulaires/$form.cgi");

Sinon j'ai pas vu dans mon code le if(isset($POST....)

Mais ce que je comprend pas c que c un formulaire que j'ai repris et que celui ci fonctionne (j'arrive a rajouter des valeurs dans la base par son intermédiaire).Mais les deux champs que j'ai rajouter eux ne marchent pas pourtant le code est identique (probablement que non puisque ca marche pas mais bon.....)
0
Si quelqu'un peut s'interesser a mon probleme ce serait sympa car ce truc je dois l'avoir fini mercredi et je vois pas comment faire pour que ca marche.......
0
beeboo Messages postés 27 Date d'inscription dimanche 17 avril 2005 Statut Membre Dernière intervention 9 mai 2005 8
18 avril 2005 à 16:43
Je réitère ce que j'ai dit, les champs de type checkbox ne se traitent pas de la même manière que les autres. Donc vérifie bien le traitement de l'attribut checked tant dans l'écriture de la BD que dans sa lecture. Vérifie ce que contiennent les champs cle et valeur dans la BD, si valeur contient autre chose que on ou off, c'est que cela coince autant dans l'écriture que dans la lecture du statut de la boîte.
0