Affecter une variable d'une form à une req sql [Résolu]

Signaler
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014
-
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014
-
Bonjour,
mon probleme est peut etre déja résolu mais j'ai essayé tous le moyens que j'ai trouvé mais aucune résultat.
donc mon probleme c'est que j'ai un formulaire qui insere les types d'évaluations selon le sous module,ce formulaire se trouve dans une page.php et j'ai une autre page qui contient les sous modules,je veux éviter de créer la page de création des types pour chaque sous module,j'ai utiliser href='?m=analyse' et je l'ai récupérer par get dans l'autre page pour remplir une req sql. j'éspere que c'est clair.voila mon code:
//page des sous modules
<?php
session_start();
if (!isset($_SESSION['login'])) {
	header ('Location: index.php');
	} 
	$c=$_GET['m'];
	echo $c;
	if (isset($_POST['ana'])){
	mysql_connect("localhost","root","123") or die(mysql_error());
	mysql_select_db("basepfe")or die('Pas de Base de donn\351');
	$sql="SELECT P.login FROM smodule AS S, elementssmod AS E, contient AS A, profs AS P
    WHERE E.idP = P.idP
    AND A.idS = S.idS
    AND S.nomS = 'analyse'";
	$res = mysql_query($sql);
	$nat=mysql_result($res,"");
	if ($nat == $_SESSION['login']){
	header ('Location: newform.php');
	}
	else 
	echo header ('Location: deliberation.php');
	}


//exemple  de html  meme page 
<input type="submit" id="Button5" name="ana" href="?m=analyse" value="Analyse">


page de création des types
<?php 
$_GET['m']=$c;
$nb=$_POST['nb'];
	$t1=$_POST['t1'];
	$pr1=$_POST['pr1'];
	
mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("basepfe")or die('Pas de Base de donn\351');
if(isset($_POST['env'])){
switch($nb){
case 1:
$req1=mysql_query("select idS from smodule where nomS='$c'");
$vl=mysql_result($req1,"");
$sql1=mysql_query("INSERT  INTO assocts  VALUES ('$vl','$t1','$pr1')");
echo "<script>alert('vous avez crée un sous module!')</script>";
break;

je veux que la valeur du variable 'm' soit récupérable dans la page des types pour faire une selection
pouvez vous m'aider? merci d'avance

4 réponses

Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
Dans ta dernière page :
$c = $_GET ['m'];
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

Bonjour,
ca n'a pas marché il m'affiche: Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\pfe\test1\newform.php on line 426
volia la ligne 426: $vl=mysql_result($req1,"");
je pense que $req1 ne renvoie rien,c'est pour cela donc il y a un prob au niveau de la variable $c.
merci
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
Bonjour,

Déjà.. premiere chose .. c'est que lorsque l'on récupère des variables de type POST / GET / SESSION ... il est conseillé de vérifier qu'elles existent via ISSET.

 function getParams($name,$type="POST",$default=''){  
     switch ($type){
     case "POST":
         $var = isset($_POST[$name])?$_POST[$name]:$default;
         break;
     case "GET":
          $var = isset($_GET[$name])?$_GET[$name]:$default;
         break;
     case "SESSION":
          $var = isset($_SESSION[$name])?$_SESSION[$name]:$default;
         break;
     }
     return $var;
 }


$c = getParams('m',"GET","error") ;
$nb=getParams('nb',"POST","error");
$t1=getParams('t1',"POST","error");
$pr1=getParams('pr1',"POST","error");



Ensuite... lorsque tu écris tes requêtes... sépare les de l'instruction query :

// REQUETE :
$sql="SELECT idS 
        FROM smodule 
        WHERE nomS='$c' ";

  // POur les tests: Affichage de la requête
  echo "<br><b> La requête est : </b><br>".$sql."<br>";

// Exécution de la requête :
$req1=mysql_query($sql);



et enfin... mysql_result ... je pense que tu as une erreur dans sa syntaxe...
http://www.php.net/manual/fr/function.mysql-result.php

// Tu écris : 
$vl=mysql_result($req1,"");

// Alors que normalement c'est un numéro de ligne que tu dois indiquer..
$vl=mysql_result($req1,0);


L'idéal s'est également de vérifier avant si ta requête a retourné un résultat...
http://www.php.net/manual/fr/function.mysql-num-rows.php


$nbResult = mysql_num_rows($req1);

if($nbResult>0){ 
   $vl=mysql_result($req1,0);

   // ....


}







Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

j'ai ajuster le code selon vos conseils,le voila:
session_start();
function getParams($name,$type="POST",$default=''){  
     switch ($type){
     case "POST":
         $var = isset($_POST[$name])?$_POST[$name]:$default;
         break;
     case "GET":
          $var = isset($_GET[$name])?$_GET[$name]:$default;
         break;
     case "SESSION":
          $var = isset($_SESSION[$name])?$_SESSION[$name]:$default;
         break;
     }
     return $var;
 }

mysql_connect("localhost","root","123") or die(mysql_error());
mysql_select_db("basepfe")or die('Pas de Base de donn\351');
$c = getParams('m',"GET","error") ;
$nb=getParams('nb',"POST","error");
$t1=getParams('t1',"POST","error");
$pr1=getParams('pr1',"POST","error");
if(isset($_POST['env'])){
switch($nb){
case 1:
$req1="select idS from smodule where nomS='$c'";
$u=mysql_query($req1);
$nbResult = mysql_num_rows($u);
if($nbResult>0){ 
   $vl=mysql_result($u,0);
$sql1=mysql_query("INSERT  INTO assocts  VALUES ('$vl','$t1','$pr1')");
echo "<script>alert('vous avez crée un sous module!')</script>";
}
break;
default:
echo "alert('un probleme qlq part s'est produit!')</script>";
}

l'indertion se fait mais le champs $vl contient 0 et l'alert ne s'affiche pas.
:( :( :(
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
- Tu as testé ta requête en direct pour voir ce qu'elle te donne ??
( elle te donne 1 seul résultat...ou bien tu as plusieurs lignes ?? )
- Tu as regardé les lien que je t'ai donné pour lire la doc de ces fonctions ??
- Où est l' ECHO que je t'ai fait ajouter ?


$req1="SELECT idS 
           FROM  smodule 
           WHERE nomS='$c'";

//---------------------------------------------------------------------
// ECHO DE LA REQUETE :
// Pour pouvoir la tester en directe dans ta BDD
// Via phpmyadmin par exemple
// Et voir ce qu'elle te donne comme résultat !
echo "<br><b> La requête est : </b><br>".$req1."<br>";
//---------------------------------------------------------------------
  $u=mysql_query($req1);
  $nbResult = mysql_num_rows($u);
  if($nbResult>0){ 
     $vl=mysql_result($u,0);
    $sqlInsert = "INSERT  INTO assocts  
                      VALUES (
                            '$vl'
                            ,'$t1'
                            ,'$pr1'
                       )";
//---------------------------------------------------------------------
// ECHO DE LA REQUETE :
   echo "<br><b> La requête sqlInsert  est : </b><br>".$sqlInsert ."<br>";
//---------------------------------------------------------------------
    $sql1=mysql_query($sqlInsert);
    echo "<script>alert('vous avez crée un sous module!')</script>";
  }



Que t'affiche le script TEL QUE JE VIENS DE TE L'ECRIRE ?
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

comme ca:
$c=$_GET['m'];
if ($nat == $_SESSION['login']){
header ("Location: newform.php?k='$c' ");
}
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
Pour expliquer un peu mieux.........

Dans ta page newform.php tu souhaites récupérer une variable ( $c ) via un $_GET
$c = getParams('m',"GET","error") ;


Cela implique que dans ton navigateur internet... dans l' URL de ta page... tu DOIS avoir un truc du style :
http://monsite.fr/newform.php?LENOMDEMAVARIABLE=LAVALEURQUEJELUIDONNE


Ce qui signigie que lorsque tu fais ta redirection ( via ton HEADER ) tu dois mettre l'URL à afficher (comprenant également les variables get).
Bref :
Quelque chose du genre :
header ('Location: newform.php?m='.$c);


Si tu ne comprends pas ça... regarde sur le net les tutos concernant l'utilisation des variables POST / GET ....
http://www.commentcamarche.net/contents/793-php-recuperation-de-donnees

Par contre en regardant le code html que tu viens de nous coller....
<input type="submit" id="Button7" name="alg" href="?m=algorithme" value="Algèbre" >
<input type="submit" id="Button6" name= alg""  href="?m=algebre" value="Analyse" >>
<input type="submit" id="Button5" name="ana" href="?m=analyse" value="Analyse" >

Je pense que tu n'as pas compris comment ça fonctionne....

Mettre un href dans un bouton de type SUBMIT ... heu... oups....

Les input type="submit" servent à valider des formulaires HTML ( composés des balises <FORM ...> </FORM>.
Si tu veux juste faire un "lien" (le principe de href)..il te faut utilsier les balises <a> </a>
http://www.commentcamarche.net/contents/496-liens-hypertextes-html

A mon avis... si tu ne trouves pas par toi même comment corriger ton code... il faudra que tu nous donnes TOUT ton code PHP ET ton code HTML....
(Sans oublier d'expliquer en détail ce que tu souhaites faire d'une manière claire et compréhensible... ET APRES avoir pris le temps de lire avec attention les liens que je viens de te donner....).
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

merci bcp j'ai trouvé une solution grace à vous et grace à cette phrase :."tu remplaces MA_VALEUR par la variable que tu souhaites envoyer" .merci infiniment :) :) :) :) :) :) :D :D :D
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
N'oublies pas de clore le sujet ( lein Marquer comme résolu sous le titre de ta question)
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

ok :) :D