Page 1 sur 1

Erreur à l'envoi du formulaire

Posté : 30 mars 2006, 08:44
par wiwi
Bonjour,

J'accède à une page de formulaire via un paramètre :
resa_formulaire.php?id_room={$id_room}
Ensuite, resa_formulaire.php me permet de remplir un formulaire qui envoie des données via messagerie.

Malheureusement, quand je valide ou quand je ne remplit pas un champ, la page se recharge mais visiblement mon paramètre $id_room "a disparu" car je me prend une erreur de type : Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /preprod-php/www/dr78-drinet/grr-prod/mysql.php.inc on line 77

Je met le code de la page resa_formulaire.php :




<?php

session_name("dr78-drinet");
session_start();
require_once("plat_php_auth.php.inc");
require_once("Ldin.php");
plat_php_verif("no", "Gestion et r&eacute;servation des ressources");
$idep_ldap = $_SESSION['plat_php']['user'];

//Connexion à l'annuaire ldap
LdinConnexion();
$liste_ldap=LdinSearchPersonnes("uid=$idep_ldap");
$individu_ldap=$liste_ldap[0];
// $individu est un tableau associatif dont les clefs sont 'nom',
// 'prenom', 'mail', 'idep', 'dr', 'mvs', 'unite'
LdinDeconnexion();


require_once "config.php.inc";
require_once "functions.php.inc";
require_once "mysql.php.inc";
// Settings
require_once("./settings.php.inc");
//Chargement des valeurs de la table settingS
if (!loadSettings())
    die("Erreur chargement settings");

// Session related functions
require_once("./session.php.inc");

resumeSession();

// Paramètres langage
require_once "language.php.inc";

if ((!isset($_SESSION['login']))) {
    $type_session = "no_session";
} else {
    $type_session = "with_session";
}


$id_room = isset($_GET["id_room"]) ? $_GET["id_room"] : NULL;


$res = sql_query("SELECT * FROM mrbs_room WHERE id=$id_room");


$row = sql_row_keyed($res, 0);
sql_free($res);

$form_description = $row["description"];
$form_area_id = $row["area_id"];
$form_nom_salle = $row["room_name"];

$res1 = sql_query("SELECT * FROM mrbs_area WHERE id=$form_area_id");
$row1 = sql_row_keyed($res1, 0);
sql_free($res1);
$form_type = $row1["area_name"];


//Envoi du formulaire
if(isset($_POST['action']) == 'Submitted')
{
	$adress = "{$_POST['bal']}";
	$sujet = "Demande de reservation";
	$message = "<html><body style='font-family: Arial; font-size: 10 pt'>
<p>Une demande de r&eacute;servation a &eacute;t&eacute; effectu&eacute;e depuis l'application  <a href='http://www.exemple.fr'>Gestion et réservation des ressources</a></p>	

<p>Type de r&eacute;servation : <b>{$_POST['type']}</b></p>
<p>Description rapide : <b>{$_POST['name']}</b></p>
<p>Description compl&egrave;te (Nombre de personnes, etc) : <b>{$_POST['description']}</b></p>
<p>Nom du demandeur : <b>{$individu_ldap['nom']}</b></p>
<p>Prénom du demandeur : <b>{$individu_ldap['prenom']}</b></p>
<p>Adresse de messagerie du demandeur : <b>{$individu_ldap['mail']}</b></p>
</body></html>";

	$entete = "Content-type:text/html\nFrom: [email protected]\n";
	mail($adress, $sujet, $message, $entete);
	//page de sortie
	$insertGoTo = "fin_resa.htm";
	if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    	$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
		$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
		}
	header(sprintf("Location: %s", $insertGoTo));
}





?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Demander une réservation</TITLE>
<link rel="stylesheet" type="text/css" href="css/style_eds.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


<script type="text/javascript">
function verif_champs()
{
	if(document.forml.type.value == "0")
	{
		alert("Veuillez choisir un type de réservation SVP");
		document.forml.rooms.focus();
		return false;
	}
	
		
}
</script>
</HEAD>
<BODY>
<h1>Formulaire de  réservation : <?php echo $form_type; ?></h1>
&nbsp;
<form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onSubmit="return verif_champs()">
  <p align="center"><b>Vous souhaitez r&eacute;server la ressource suivante : <br>
  <?php echo $form_type;?><br>
  <?php echo $form_nom_salle;?><br>
  <?php echo $form_description;?></p></b>
  
  <TABLE border=0>
  <TBODY>
  <TR>
    <TD vAlign=top>Ressource :</TD>
    <TD></TD></TR>
  <TR>
    <TD vAlign=top>Type de réservation :</TD>
    <TD><SELECT name=type size=1> 
        <OPTION value="0" selected>(choisissez)</option>
        <option value="R&eacute;union">R&eacute;union</option>
        <option value="Communication">Comm'</option>
        <option value="Visio-conf&eacute;rence">Visio</option>
        <option value="RP">RP</option>
        <option value="Formation">Formation</option>
        <option value="Concours et examens">Concours</option>
        <option value="Autre">Autre</option>
        <option value="Indisponible">Indisponible</option>
    </SELECT></TD></TR>
  <TR>
    <TD vAlign=top>Brève description :</TD>
    <TD><INPUT size=40 name=name></TD></TR>
  <TR>
    <TD vAlign=top>Description complète:<BR>(Nombre de personnes,<br>besoin en mat&eacute;riel...)</TD>
    <TD><TEXTAREA name=description rows=8 cols=40></TEXTAREA></TD></TR>
  <TR>
    <TD vAlign=top><p>Dur&eacute;e de la r&eacute;servation :<BR>
    - Nombre de jours<br>
    - Dates<br>
    - Heure de d&eacute;but<br>
    - Heure de fin </p>      </TD>
    <TD vAlign=top><TEXTAREA name=horaire rows=8 cols=40></TEXTAREA></TD>
  </TR>
  <tr>
    <TD vAlign=top>Envoyer la demande auprès      </TD>
    <TD vAlign=top><SELECT name=bal size=1>
        <option selected>(choisissez)</option>
        <option value="[email protected]">du secrétariat de la DIR</option>
        <option value="[email protected]">du secrétariat du SAR</option>
        <option value="[email protected]">du secrétariat du SED</option>
        <option value="[email protected]">du secrétariat du SES</option>
      </SELECT></TD>
  </tr>
  <tr>
    <TD colspan="2" vAlign=top>      
    
      <div align="center">
        <input type="submit" name="Submit" value="Envoyer">
        <input type="hidden" name="action" value="submitted">    
          </div></TD>
    </tr>
  </TBODY></TABLE>
  <p>&nbsp;</p>
</FORM>
</BODY>
</HTML>
En espérant que je suis assez clair :roll:

Re: Erreur à l'envoi du formulaire

Posté : 30 mars 2006, 09:13
par Invité
Je pense que ton problème vient du fait que tu utilises 2 méthodes (POST et GET) pour propager les données :
Au premier appel tu fais :
resa_formulaire.php?id_room={$id_room}
ça correspond à une méthode GET et tu récupères bien avec :
$id_room = isset($_GET["id_room"]) ? $_GET["id_room"] : NULL;
Ca c'est cohérent.

Par contre ton problème vient du fait que ton formulaire est codé avec une méthode POST :
<form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onSubmit="return verif_champs()">
et que tu n'as pas le code pour récupérer cette façon de poster :
il faudrait remplacer :
$id_room = isset($_GET["id_room"]) ? $_GET["id_room"] : NULL;
par un truc comme :
$id_room = NULL
if isset($_GET["id_room"]) {$_GET["id_room"];}
if isset($_POST["id_room"]) {$_POST["id_room"];}
J'ai pas testé, il y a peut être encore un détail, j'espère que ça t'aidera...

Posté : 30 mars 2006, 09:35
par wiwi
Avec ton code, j'ai l'erreur dès que je charge le formulaire.

çe viendrait quand même de "par là" donc :)

Posté : 30 mars 2006, 10:35
par wiwi
Ah non, ça ne change rien en fait. je ne sais plus trop où chercher :?

Posté : 30 mars 2006, 10:56
par jpaul
Insère :
phpinfo();
Dans la page où tu perds $id_room, ti pourras voir comment il est propagé (s'il l'est).
Bon courage :)

Posté : 30 mars 2006, 11:01
par jpaul
Mais au fait, je n'avais pas vérifié lors de la première réponse : il me semble que tu n'as pas mis id_room dans le formulaire.
Si j'ai raison, il faudrait que tu rajoutes :
        <input type="hidden" name="id_room" value="<?php echo $id_room; ?>"> 

Posté : 30 mars 2006, 11:36
par wiwi
yes, ça fonctionne beaucoup mieux en mettant :
<if (isset($_GET["id_room"])) {$id_room=$_GET["id_room"];}
if (isset($_POST["id_room"])) {$id_room=$_POST["id_room"];}
J'ai d'autres soucis de validation mais ça devrait aller maintenant. Merci beaucoup :D :D

Posté : 30 mars 2006, 14:10
par jpaul
yes, ça fonctionne beaucoup mieux en mettant :
<if (isset($_GET["id_room"])) {$id_room=$_GET["id_room"];}
if (isset($_POST["id_room"])) {$id_room=$_POST["id_room"];}
J'ai d'autres soucis de validation mais ça devrait aller maintenant. Merci beaucoup :D :D
Oups !!!
Je t'avais dit : j'avais pas testé :oops:
Bonne continuation

Posté : 30 mars 2006, 14:56
par wiwi
Arg, j'y suis presque sauf que....

En page intermédiaire j'ai une page d'identification :
<?php
header("Content-Type: text/html; charset=UTF-8");
session_name("dr78-drinet");
session_start();
require_once("plat_php_auth.php.inc");
$id_room = isset($_GET["id_room"]) ? $_GET["id_room"] : NULL;
plat_php_verif("no", "Gestion et reservation de ressources");
plat_php_login("no", "resa_formulaire.php?id_room={$id_room}", "Formulaire de réservation");
$idep_ldap = $_SESSION['plat_php']['user'];
?>
Si je valide, je me prend une erreur.
Et si je relance, l'authentification est mémorisée et la page s'affiche correctement. :? :?

Posté : 30 mars 2006, 16:14
par wiwi
En comparant avec phpinfo(), la seule différence que je vois (outre le _GET["id_room"] = no value , c'est que dans la page où ça déconne, j'ai _SERVER["HTTP_CACHE_CONTROL"] = no-cache et rien quand je recharge :roll:

Posté : 31 mars 2006, 09:43
par wiwi
Je me permet de remonter le topic car là je sèche...

Posté : 31 mars 2006, 13:56
par jpaul
Ne connaissant pas le contenu de ton fichier "plat_php_auth.php.inc" (chargé par require), je peux difficilement analyser ton problème.
Cependant, ne peux tu pas faire l'identification au début du process ? Comme ça elle serait mémorisée et ça devrait passer...
Une autre psite serait peut être d'utiliser des sessions pour mémoriser tes données.

Posté : 31 mars 2006, 15:20
par wiwi
Oui, je vais essayer cette solution.

Je mets quand même le fichier "plat_php_auth.php.inc" au cas où :
<?php
$GLOBALS['pwauth']="/usr/local/bin/pwauth";
$GLOBALS['ActiveDirectory']="ad.insee.intra";


if (!session_id())
	echo("Erreur: Aucune session en cours.");

function plat_php_verif($ldap="no", $id_appli="") {
	$self=$_SERVER['PHP_SELF'];
	if ($ldap=="yes") {
		if (isset($_SESSION['plat_php']['groupes'])) {
			return;
		}
	}
	elseif (!empty($_SESSION['plat_php']['user'])) {
		return;
	}
	plat_php_login($ldap, $self, $id_appli);	
}

function plat_php_login($ldap="no", $redirection="", $id_appli="") {
	if (!$id_appli) {
		require_once('plat_php_app_info.php');
		$infos=plat_php_get_info();
		$id_appli=$infos['nom_unix'];
	}
	
	if (!$redirection) {
		require_once('plat_php_app_info.php');
		$infos=plat_php_get_info();
		$redirection=$infos['http_base'];	
	}
	if (isset($_POST['plat_php_log'])) { // quand on a appuyé sur " Ok "
		$mode=$_POST['plat_php_mode'];
		if (empty($_POST['plat_php_log'])) {
			$error="IdeP vide";
			$auth=FALSE;
		}
		elseif ($mode=="ad") {
			// vérification nécessaire
			if (empty($_POST['plat_php_mdp'])) {
				$auth=FALSE;
				echo("Mot de passe vide");
			}
			else {
				$auth=plat_php_ad_auth($_POST['plat_php_log'], $_POST['plat_php_mdp']);
			}
			if (!$auth)	
				$error="Echec de l'authentification";
		}
		if ($mode=="activex" || $auth) {
			$log = $_POST['plat_php_log'];
			$_SESSION['plat_php']=array();
			if ($ldap=="yes") { // si les groupes LDAP sont demandés
				$_SESSION['plat_php']['groupes']=plat_php_get_groupes($log, $id_appli);
			}
			elseif (isset($_SESSION['plat_php']['groupes']))
				unset($_SESSION['plat_php']['groupes']);
			$_SESSION['plat_php']['user']=$log;
			// pas de cache de la page puis redirection
			header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
			header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
			header('Cache-Control: no-cache, must-revalidate');
			header('Pragma: no-cache');
			header("Location: $redirection");
			exit();
		}
	}
	else { // pas de formulaire fourni
		header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
		header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
		header('Cache-Control: no-cache, must-revalidate');
		header('Pragma: no-cache');
	}
	if (!empty($_SESSION['plat_php']['user'])) {
		$user_login = $_SESSION['plat_php']['user'];
	}
	if (isset($user_login)) {
		if ($ldap=="yes") { // si groupes LDAP demandés
			$_SESSION['plat_php']['groupes']=plat_php_get_groupes($user_login, $id_appli);
		}
		elseif (isset($_SESSION['plat_php']['groupes']))
			unset($_SESSION['plat_php']['groupes']);
		// pas de cache de la page puis redirection
		header('Expires: Wed, 5 Jun 1979 23:41:00 GMT');
		header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
		header('Cache-Control: no-cache, must-revalidate');
		header('Pragma: no-cache');
		header("Location: $redirection");
		exit();
	}
	$self=$_SERVER['PHP_SELF'];
	header("Content-type: text/html; charset=utf-8");
?>
<!DOCTYPE HTML PUBLIC
  "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<title>Identification</title>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" href="http://php.insee.fr/composants/auth/plat_php_auth.css" type="text/css" />
	<script src="http://composants.insee.fr/js/cerberidep/cerberidep-v1.0.js" type="text/javascript"></script>
	<script src="http://php.insee.fr/composants/auth/plat_php_auth.js" type="text/javascript"></script>
</head>
<body>

<div id="plat_php_login">
<h1>Identification pour <?php echo($id_appli); ?></h1>
<?php if (isset($error)) echo "<div id='plat_php_login_error'>$error</div>"; ?>
<form name="plat_php_loginform" id="plat_php_loginform" action="<?php echo($self); ?>" method="post">
	<p>
		<label for="plat_php_log">IdeP: </label>
		<input type="text" name="plat_php_log" id="plat_php_log" size="6" readonly="readonly" value="" />
	</p>
	<p id="plat_php_cache">
		<label for="plat_php_mdp">Mot de passe NT: </label>
		<input type="password" name="plat_php_mdp" id="plat_php_mdp" />
	</p>
	<p class="submit">
		<input type="submit" name="plat_php_submit" value=" Ok " />
		<input type="hidden" name="plat_php_mode" id="plat_php_mode" />
	</p>
</form>
</div>
</body>
</html>
<?php
	exit();
}

// retourne la liste des groupes de l'appli auquel l'idep appartient
function plat_php_get_groupes($idep, $id_appli) {
	require_once("Ldin.php");
	if (!$idep)
		return FALSE;

	LdinConnexion("ldap.insee.fr");
	$groupes=LdinSearchGroupesByPersonne($idep, $id_appli);
	LdinDeconnexion();
	$chaine_groupes="";
	foreach($groupes as $groupe)
		$chaine_groupes.=$groupe['groupe'].",";
	if ($chaine_groupes)
		$chaine_groupes=mb_substr($chaine_groupes, 0, mb_strlen($chaine_groupes)-1);
	return $chaine_groupes;
}

function plat_php_ad_auth($idep, $pwd) {
	$os=php_uname();
	if (stristr($os, "windows")) {
		$dn=$idep."@".$GLOBALS['ActiveDirectory'];
		$conn_ldap=ldap_connect($GLOBALS['ActiveDirectory']);
		if (!$conn_ldap)
			die("Echec de la connexion a l'AD.");
		$bind=@ldap_bind($conn_ldap, $dn, $pwd);
		ldap_close($conn_ldap);
		if ($bind)
			return TRUE;
		else
			return FALSE;
	}
	else {
		$chaine=$idep."\n".$pwd."\n";
		$handle=popen($GLOBALS['pwauth'], 'w');
		fwrite($handle, $chaine);
		$retour=pclose($handle);
		if ($retour!==0)
			return FALSE;
		else
			return TRUE;
	}
}


function plat_php_deconnexion($nom_session) {
	if (isset($_SESSION['plat_php']))
		unset($_SESSION['plat_php']);
	
}

?>
Merci pour ton aide ;)