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

Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Dernière intervention
7 juin 2014
- - Dernière réponse : EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Dernière intervention
7 juin 2014
- 23 mai 2014 à 00:35
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
24594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 février 2019
362
0
Merci
Dans ta dernière page :
$c = $_GET ['m'];
Commenter la réponse de jordane45
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Dernière intervention
7 juin 2014
0
Merci
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
Commenter la réponse de EL.marwaa123
Messages postés
24594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 février 2019
362
0
Merci
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
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
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.
:( :( :(
Commenter la réponse de jordane45
Messages postés
24594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 février 2019
362
0
Merci
- 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 ?
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Dernière intervention
7 juin 2014
-
comme ca:
$c=$_GET['m'];
if ($nat == $_SESSION['login']){
header ("Location: newform.php?k='$c' ");
}
jordane45
Messages postés
24594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 février 2019
362 -
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....).
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
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
jordane45
Messages postés
24594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 février 2019
362 -
N'oublies pas de clore le sujet ( lein Marquer comme résolu sous le titre de ta question)
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Dernière intervention
7 juin 2014
-
ok :) :D
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.