> Tous les forums > Forum des Webmasters
 Problème de gestion de variables de session
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
pytheas
  Posté le 17/06/2010 @ 23:20 
Aller en bas de la page 
Petit astucien

Bonjour, j’ai essentiellement trois(3) problèmes a soumettre en espérant avoir des solutions, mon explication des soucis risque de vous paraitre long, mais c’est dû au fait que je tiens vraiment à avoir de l’aide.

1°)j’ai une base de données comportant 2 tables, « employes »et « utilisateur »la table utilisateur contient les champs « login »et « password » servant à l’authentification de l’utilisateur. Ce code là fonctionne et redirige l’utilisateur après authentification vers la page « acceuil.php »seulement je ne sais comment faire pour qu’à l’exécution, mon formulaire de connexion nommé « login.php »serve de page d’acceuil, c’est-à-dire la première page de mon site vu que tout part de cette page ? j’ai vu des liens vers des pages « index.php »je ne sais pas s’il faut créer cette page ou s’il est prédéfini dans le logiciel, en fait j’utilise dreamweaver 8, mais je tape en dur les codes.j’utilise des variables de session,je veux qu’au bout d’un certains délai d’inactivité par exemple 5mn l’utilisateur soit amené à se connecter de nouveaux sur toutes les pages ou il dépassera ce délai, seulement je ne sais pas trop comment m’y prendre, voici ce que j’ai fais :

<?php

session_start();

function afficherformulaire ($u = '', $error = '')

{

if ($error != '')

echo '<font color="red">' . $error . '</font>';

?>

<form name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>"

method="POST">

<table border="0">

<tr><td colspan="2" align="center"><h2>Formulaire de

connexion</h2></td></tr>

<tr><td><b>Nom d'utilisateur :</b></td>

<td><input name="utilisateur"

value="<?php echo $u; ?>"></td></tr>

<tr><td><b>Mot de passe :</b></td>

<td><input name="password"></td></tr>

<tr><td align="center" colspan="2">

<input type="submit" value="Valider"

onClick="return onValider();">

<input type="submit" value="Annuler"></td></tr>

</table>

</form>

<script type="text/JavaScript">

function onValider()

{

if (document.form1.utilisateur.value == '') {

alert("Veuiller taper un nom d'utilisateur.");

return false;

}

if (document.form1.password.value == '') {

alert("Veuiller taper un mot de passe.");

return false;

}

return true ;

}

</script>

<?php

}//fin de la fonction

if (!isset ($_POST["valider"]) && !isset($_POST['annuler']))

{

afficherformulaire();

}

if (isset($_POST["annuler"]))

{

require("annuler.php");

}

if (isset($_POST["valider"]))

{

$link = mysql_connect("localhost", "root", "pytheas") or die();

$db = mysql_select_db("grh") or die();

$query = "select * from utilisateur where login='" .

addslashes($_POST["utilisateur"]) . "' and password = '"

. addslashes($_POST["password"]) . "'";

$result = mysql_query($query) or die();

$row=mysql_fetch_row($result);

if ($row )

{

$login =$_POST['utilisateur'];

$_SESSION['login']=$login;

$_SESSION['pass']=$pass;

$_SESSION['delai']= time() + (5*60);

$pass =$_POST['password'];

require("acceuil.php");

}

else

afficherformulaire($_POST["utilisateur"],

"Nom d'utilisateur ou mot de passe incorrect");

}

?>

J’ai reccupérer les valeurs de connexion dans les variables $_SESSION['login']

$_SESSION['pass'], j’ai initialiser $_SESSION['delai'] par $_SESSION['delai']= time() + (5*60);

Je ne sais pas si c’est comme ça on fait.

Dans ma page « acceuil.php » au debut j’ai fait :

< ?php session_start();

If($_SESSION[‘delai’])

afficherformulaire() ;

?>

Et a ce niveaux quand j’exécute le « login.php » il y’a une erreur du genre ; parse error session is already started.

2°)j’ai créer un formulaire de recherche multicritères,permettant à l’utilisateur de les renseignes,apres quoi, les résultats correspondant aux champs choisis par l’utilisateur doivent s’afficher par groupe de 5 enregistrements par page, c’est-à-dire que si la recherche retourne 20 enregistrements le programme doit permettre de les afficher sur 5 pages.

Voici le code de mon formulaire :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Document sans titre</title>

</head>

<body>

<?php

function afficherformulaire ($u = '', $error = '')

{

if ($error != '')

echo '<font color="red">' . $error . '</font>';

?>

<form name="recherche" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<table border="0" align="center" width="862" height="100" bgcolor="#0099FF">

<tr>

<td width="600" align="center" colspan="2" height="0">

<h1><b><font color="#FF0000"><marquee>Ceci est un formulaire de rechercher entrez y vos critères.</marquee></font></b></h1>

</td>

<tr><td width="846">

<b>Numero</b>

<input name="numero" />

</td>

</tr>

<tr><td width="846">

<b>Nom</b>

<input name="nom" />

</td></tr>

<tr><td width="846"><b>Prenom</b><input type="text" />

</td></tr>

<tr><td width="846">

<b>Genre</b><input type="radio" value="masculin" />Masculin<input value="feminin"/>Feminin</td></tr>

<tr><td width="846">

<b>Date de Naissance:</b>><input type="radio" value="moins" />Moins de 30 ans<input value="plus" />Plus de 30 ans

></td></tr>

<tr><td width="846">

<b>Date D'embauche:</b><input type="radio" value="inferieur" />Inferieur ou égale à 2000<input name="datemb" value="superieur" />Supérieur à 2000

</td></tr>

<tr><td width="846">

<b>Salaire Brut:</b><input type="radio" value="minore" />compris entre [0-150000]<input name="salbrut" value="majore" />Entre [15000-et plus]

</td></tr>

<tr><td width="846">

<b>Situation Matrimoniale:</b><input value="celibataire" />Celibataire<input name="sitmat" value="marie" />Marié<input type="radio" value="veuf" />Veuf<input value="divorce" />Divorcé</td></tr>

<tr><td width="846">

<b>Nombre D'enfants:</b><input type="radio" value="plusde" />Plus de 5<input value="moinsde" />Moins de 5

</td></tr>

<tr><td width="846">

<b>Numero de Télephone:</b><input /><br/>

</td></tr>

<tr><td width="846">

<b>Email:</b><input type="=text" /><br/>

</td></tr>

<tr><td width="846">

<b>Loisirs: </b><input name="loisir" value="cinema" />Cinéma<input type="radio" value="musique" />musique<input value="litterature"/ >Littérature<input name="loisir" value="sport" />Sport<input name="loisir" value="religion" >Réligion<input type="radio" value="television" >Télévision<input value="politique" />Politique

</td></tr>

<tr><td width="100" align="center"><input value="rechercher" /></td></tr>

</table>

</form>

<?php

}//fin fonction

if(!isset($_POST['valider']))

afficherformulaire();

else

{

$link=mysql_connect("localhost","root","pytheas");

$db=mysql_select_db("grh");

$numero=$_POST['numero'];

$nom=$_POST['nom'];

$prenom=$_POST['prenom'];

$genre=$_POST['genre'];

$datnaiss=$_POST['datnaiss'];

$datemb=$_POST['datemb'];

$salbrut=$_POST['salbrut'];

$sitmat=$_POST['sitmat'];

$nbenf=$_POST['nbenf'];

$tel=$_POST['tel'];

$mail=$_POST['mail'];

$loisir=$_POST['loisir'];

if($numero !='')

$query='SELECT * FROM employes WHERE numero="'.$numero.'"';

elseif($nom!='')

$query='SELECT * FROM employes WHERE nom="'.$nom.'"';

elseif($prenom!='')

$query='SELECT * FROM employes WHERE prenom="'.$prenom.'"';

elseif($mail!='')

$query='SELECT * FROM employes WHERE email="'.$mail.'"';

if($genre!='')

{

$query='SELECT * FROM employes WHERE genre="'.$genre.'"';

}

elseif($datnaiss!='')

{

if($datnaiss=='moins')

{

$datN= ((year(date))-(year($datnaiss));

$query='SELECT * FROM employes WHERE "'.$datN.'"<30';

}

else

$query='SELECT * FROM employes WHERE "'.$datN.'">=30';

}

elseif($datemb!='')

{

if($datemb=='inferieur')

{

$datjour=(year(date));

$datemboch=(year($datemb));

$query='SELECT * FROM employes WHERE (year("'.$datemb.'")<=2000)';

}

else

$query='SELECT * FROM employes WHERE (year("'.$datemb.'")>2000)';

}

elseif ($salbrut!='')

{

if($salbrut=='minore')

$query='SELECT * FROM employes WHERE salbrut <=150000';

else

$query='SELECT * FROM employes WHERE salbrut >150000';

}

elseif( $sitmat!='')

{

$query='SELECT * FROM employes WHERE sitmat="'.$sitmat.'"';

}

elseif($nbenf!='')

{

$query='SELECT * FROM employes WHERE nbenf="'.$nbenf.'"';

}

elseif($tel!='')

$query='SELECT * FROM employes WHERE tel="'.$tel.'"';

elseif($mail!='')

$query='SELECT * FROM employes WHERE email="'.$mail.'"';

else if($loisir!='')

$query='SELECT * FROM employes WHERE loisir="'.$loisir.'"';

$result=mysql_query($result);

?>

<table width="1000" height="100" align="center" border="" bordercolor="#33ff33" bgcolor="#CC3366">

<tr>

<td ><b>Numero</b></td>

<td ><b>Nom</b></td>

<td ><b>Prenom</b></td>

<td ><b>genre</b></td>

<td ><b>Date de Naissance</b></td>

<td><b>Date D'embauche</b></td>

<td ><b>Salaire Brut</b></td>

<td ><b>Sitmat</b></td>

<td ><b>Nombre D'enfant</b></td>

<td ><b>Telephone</b></td>

<td ><b>Email</b></td>

<td ><b>Loisir</b></td>

</tr>

<tr>

<?php

$result=mysql_query($query);

$row=mysql_fetch_array($result);

if(!$row)

{

echo "Aucune ligne trouvée";

}

else

{

while($row=mysql_fetch_row($result))

{

?>

<td width="100"><?php echo $row[0];?></td>

<td width="100"><?php echo $row[1];?></td>

<td width="100"><?php echo $row[2];?></td>

<td width="100"><?php echo $row[3];?></td>

<td width="100"><?php echo $row[4];?></td>

<td width="100"><?php echo $row[5];?></td>

<td width="100"><?php echo $row[6];?></td>

<td width="100"><?php echo $row[7];?></td>

<td width="100"><?php echo $row[8];?></td>

<td width="100"><?php echo $row[9];?></td>

<td width="100"><?php echo $row[10];?></td>

<td width="100"><?php echo $row[11];?></td>

</tr>

</table>

<?php

}

}

}

?>

</body>

</html>

Je veux savoir s’il n’y’a pas un moyen de connaitre les champs choisis par l’utilisateur afin de lancer une seule requête « SELECT »,ce qui serait vraiment merveilleux, sinon je ne crois pas pouvoir m’en sortir avec une requête pour toutes les combinaisons de choix possible vu qu’un utilisateur peut choisir autant de critères en plus.je sais également que la clause « limit » permet de limiter la liste de recherche, mais comment faire pour pouvoir les afficher page par page ?

3°) j’ai crée un formulaire d’ajout d’employés dans ma base avec une option photo,mais sa ne marche pas et je ne comprend pas pourquoi. Aidez moi.

Voici le code d’ajout :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Aout</title>

</head>

<body>

<?php

function afficherformulaire ($u = '', $error = '')

{

if ($error != '')

echo '<font color="red">' . $error . '</font>';

?>

<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<input type="hidden"name="MAX_FILE_SIZE"value="1000000">

<table width="600" height="200" border="0">

<tr>

<td width="100">

<b>Numero:</b><input name="numero" /><br/>

</td></tr>

<tr><td width="250">

<b>Nom:</b><input type="text" value="<?php echo $u; ?>"><br/>

</td></tr>

<tr><td width="100">

<b>Prenom: </b><input /><br/>

</td></tr>

<tr><td width="100">

<b>Genre:</b><input type="radio" value="masculin"/>Masculin<input name="genre" value="feminin"/>Feminin<br/>

</td></tr>

<tr><td width="100">

<b>Date de Naissance:</b><input /><br/>

</td></tr>

<tr><td width="100">

<b>Date D'embauche:</b><input name="datembauche" /><br/>

</td></tr>

<tr><td width="100">

<b>Salaire Brut:</b><input /><br/>

</td></tr>

<tr><td width="100">

<b>Situation Matrimoniale:</b><input value="celibataire" />Celibataire<input name="sitmat" value="marie" />Marié<input name="sitmat" value="veuf" />Veuf<input type="radio" value="divorce" />Divorcé<br/>

</td></tr>

<tr><td width="100">

<b>Nombre D'enfants:</b><input /><br/>

</td></tr>

<tr><td width="100">

<b>Numero de Télephone:</b><input /><br/>

</td></tr>

<tr><td width="100">

<b>Email:</b><input type="=text" /><br/>

</td></tr>

<tr><td width="100">

<b>Photo:</b><input type="file" /><br/>

</td></tr>

<tr><td width="100">

<b>Loisirs: </b><input value="cinema" />Cinéma<input name="loisir" value="musique" />musique<input type="radio" value="litterature" />Littérature<input value="sport" />Sport<input name="loisir" value="religion" />Réligion<input type="radio" value="television" />Télévision<input value="politique" />Politique<br/>

</td></tr>

<tr><td align="center" >

<input type="submit" value="envoyer" />

</td></tr>

</table>

</form>

<!-- <script>

function onValider()

{

if (document.formulairajout.numero.value == '') {

alert("Veuiller taper un numero.");

return false;

}-->

<?php

}//fin fonction

$link=mysql_connect("localhost","root","pytheas");

$db=mysql_select_db("grh");

if (!isset ($_POST["valider"]) )

afficherformulaire ();

else

{

$numero=$_POST['numero'];

$nom=$_POST['nom'];

$prenom=$_POST['prenom'];

$genre=$_POST['genre'];

$datnaiss=$_POST['datnaiss'];

$datemb=$_POST['datembauche'];

$salbrut=$_POST['salbrut'];

$sitmat=$_POST['sitmat'];

$nbenf=$_POST['nbenf'];

$tel=$_POST['tel'];

$mail=$_POST['mail'];

$photo = $_POST['maphoto'];

$loisir=$_POST['loisir'];

$link=mysql_connect("localhost","root","pytheas");

$db=mysql_select_db("grh");

// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur

if (isset($_FILES['maphoto']) AND $_FILES['maphoto']['error'] == 0)

{

// Testons si le fichier n'est pas trop gros

if ($_FILES['maphoto']['size'] <= 1000000)

{

// Testons si l'extension est autorisée

$infosfichier = pathinfo($_FILES['maphoto']['name']);

$extension_upload = $infosfichier['extension'];

$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');

if (in_array($extension_upload, $extensions_autorisees))

{

move_uploaded_file($_FILES['maphoto']['tmp_name'], 'DossierImage/' . basename($_FILES['maphoto']['name']));

}

}

}

if($genre=='masculin')

$sex='Monsieur';

else

$sex='Madame';

if($numero=='')

{ $sortie='numero';

  1. "Veuiller remplir le champ" .$sortie);

}

elseif($nom=='')

{

$sortie='nom';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($prenom=='')

{

$sortie='prenom';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($genre=='')

{

$sortie='genre';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($datnaiss=='')

{

$sortie='datnaiss';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($datemb=='')

{

$sortie='datemb';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($salbrut=='')

{

$sortie='salbrut';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($sitmat=='')

{

$sortie='sitmat';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

elseif($nbenf=='')

{

$sortie='nbenf';

afficherformulaire( $nom,$sex.$nom." Veuiller remplir le champ".$sortie);

}

elseif($tel=='')

{

$sortie='telephone';

afficherformulaire($nom,$sex .$nom."Veuiller remplir le champ".$sortie);

}

elseif($mail=='')

{

$sortie='email';

afficherformulaire($nom,$sex .$nom."Veuiller remplir le champ".$sortie);

}

elseif($photo=='')

{

$sortie='photo';

afficherformulaire($nom,$sex .$nom."Veuiller remplir le champ".$sortie);

}

else

{

$sortie='loisir';

afficherformulaire($nom,$sex.$nom."Veuiller remplir le champ".$sortie);

}

$query='insert into employes values("'.$numero.'","'.$nom.'","'.$prenom.'","'.$genre.'","'.$datnaiss.'","'.$datemb.'","'.$salbrut.'","'.$sitmat.'","'.$nbenf.'","'.$tel.'","'.$mail.'","'.$photo.'","'.$loisir.'")';

$result=mysql_query($query);

mysql_close();

}

?>

</body>

</html>

Je reconnais que j’ai été très long, aidez moi. Merci.

Publicité
Malcolm
 Posté le 18/06/2010 à 17:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Dans une configuration Apache/PHP, la première page cherchée à l'appel d'un dossier est index.php puis (si non existant) index.html et enfin index.htm

C'est un comportement qui peut être modifié dans la configuration avancée d'Apache. Pour que le formulaire soit la première chose que voient les gens, il suffit de le mettre sur la page d'index.

Pour ton souci de session, ce que je peux te conseiller c'est de mettre une variable en session qui est le début de l'heure de connexion : une fois que l'utilisateur a validé login/mot de passe et que ton serveur a fait la correspondance avec la base de données, tu remplis tes variables de session. Il suffit d'en rajouter une comme ceci :

$_SESSION['date_debut'] = time(); // ceci va te retourner un nombre à 10 chiffres qui est le nombre de secondes totales écoulées depuis le 1er Janvier 1970 à minuit

en tête de chaque page, tu n'auras plus qu'à voir si entre "maintenant" et le début de la session il s'est écoulé ou non plus de 5 min :

if (time() - $_SESSION['date_debut'] >= 300) // 300 secondes c'est 5 minutes

exit('<a href="index.php">Il faut vous reconnecter</a>');

// et en dessous le reste normal de tes pages.

ATTENTION, cette manip signifie que quoi que fasse la personne, il n'a QUE 5 min pour le faire, passé ce délai, il devra obligatoirement se reconnecter !!!

ça veut dire qu'il peut avoir le temps de voir 1 page comme 50, il n'a droit qu'à 5 minutes de surf ...

Il peut y avoir une autre modif (parce que tu ne le dis pas, donc pour moi ce que je viens de dire répond à 100% à ta question) qui permet de rafraichir la session de l'utilisateur, de façon à ce que s'il ne fait rien pendant 5 min, il soit déconnecté, mais autrement s'il navigue de page en page, il ne sera pas déconnecté au bout des 5 minutes.

Pour cela, au lieu du code ci-dessus, il faut utiliser celui-là :

if (time() - $_SESSION['date_debut'] >= 300) // 300 secondes c'est 5 minutes

exit('<a href="index.php">Il faut vous reconnecter</a>');

else // ça fait moins de 5 min, et comme c'est une nouvelle page, on rafraichit la session

$_SESSION['date_debut'] = time(); // et voilà, cette variable contient une nouvelle date/heure.

Avantage : à chaque page visitée, sa date de dernière action est rafraichie. Il n'a don,c pas la limite des 5 min énoncée plus haut (sauf en cas d'inaction)

Inconvénient : bah il peut naviguer pendant 1h ou 3h toujours connecté ... tant qu'il rafraichit une page au pire toutes les 4 min 59sec ...

Pour le reste, j'ai pas eu le courage de tout lire, c'est trop brouillon : ce forum ne permet pas la mise en forme de code source, donc :

1) réduis le code de façon à montrer les lignes là où ça plante

2) évite au maximum "ça marche pas" : ça ne veut strictement rien dire. Si "ça marche pas", je n'ai plus qu'à te répondre "tant pis !"

Si tu veux plus d'aide, donne :

- les modifs faites dans la page

- les actions faites sur ton navigateur

- ce que tu attends

- les éventuels messages d'erreur

Plus tu seras précis dans ce que tu veux/ce que t'obtiens/l'erreur, plus on pourra l'être pour t'aider.

ça sera tout pour le moment.

pytheas
 Posté le 19/06/2010 à 12:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci bien pour les conseils et les reponse,je crois que la deuxieme option correspond le plus a mon besoin,effectivement je veux que si l'utilisateur connecté ne fasse rien au bout de 5mn,qu'il soit amené à se reconnecté afin de continuer.

mon premier probleme etant resolu je propose le 2eme,en fait ci déssous est mon formualire de recherche multicriteres,il est demandé à l'utilisateur de choisir des critères de recherche,l'utilisateur peut choisir de remplir,un deux,trois ou plus criteres.j'aimerais savoir si il n'existe un moyen de savoir quels critere(s) l'utilisateur à rempli ou cocher pour ne lancer que un ou deux "SELECT" pour afficher les resultats en fonction de ces criteres ou qu'il faut pour toutes les possibilites de choix que peut faire l'utilisateur lancer une requete "SELECT"?c'est ce que je tente de faire mais je n'arrive pas à m'en sortir.voici un bout de mon code.

if($numero !='')
$query="SELECT * FROM employes WHERE numero= $numero";
elseif($nom!='')
$query="SELECT * FROM employes WHERE nom =$nom";
elseif($prenom!='')
$query="SELECT * FROM employes WHERE prenom =$prenom ";
elseif($mail!='')
$query="SELECT * FROM employes WHERE email= $mail";
if($genre!='')
{
$query="SELECT * FROM employes WHERE genre= $genre";
}

elseif($datnaiss!='')
{
if($datnaiss=='moins')
{
$datN= getdate('year');
//ojrd8=($datN('year'));
$annee=$datnaiss('year');
$age=datN-annee;
$query="SELECT * FROM employes WHERE $age <30";
}
else
$query='SELECT * FROM employes WHERE $age >=30';
}
elseif($datemb!='')
{
if($datemb=='inferieur')
{
$datjour=getdate();
$datemboch=$datemb('year');
$query='SELECT * FROM employes WHERE (year("'.$datemb.'")<=2000)';
}
else
$query='SELECT * FROM employes WHERE (year("'.$datemb.'")>2000)';
}
elseif ($salbrut!='')
{
if($salbrut=='minore')
$query='SELECT * FROM employes WHERE salbrut <=150000';
else
$query='SELECT * FROM employes WHERE salbrut >150000';
}
elseif( $sitmat!='')
{
$query='SELECT * FROM employes WHERE sitmat="'.$sitmat.'"';

}
elseif($nbenf!='')
{
$query='SELECT * FROM employes WHERE nbenf="'.$nbenf.'"';
}
elseif($tel!='')
$query='SELECT * FROM employes WHERE tel="'.$tel.'"';
elseif($mail!='')
$query='SELECT * FROM employes WHERE email="'.$mail.'"';
else if($loisir!='')
$query="SELECT * FROM employes WHERE loisir= $loisir";
$result=mysql_query($result);

Aussi j'aimerais que si le nombre de resultat est 20 par exemple qu'on l'affiche 5 par page.je sais que la clause "LIMIT"permet de limiter les resultat mais maitenant comment pouvoir les affichés de page en page.j'espere avoir été un plus explicite cette fois ci.Merci d'avance













































































































































































































Ceci est un formulaire de rechercher entrez y vos critères.

Numero
Nom
Prenom
GenreMasculinFeminin
Date de Naissance:>Moins de 30 ansPlus de 30 ans >
Date D'embauche:Inferieur ou égale à 2000Supérieur à 2000
Salaire Brut:compris entre [0-150000]Entre [15000-et plus]
Situation Matrimoniale:CelibataireMariéVeufDivorcé
Nombre D'enfants:Plus de 5Moins de 5
Numero de Télephone:
Email:
Loisirs: CinémamusiqueLittératureSportRéligionTélévisionPolitique
Malcolm
 Posté le 19/06/2010 à 15:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Sur l'aspect "conception" ce code est assez "pourri" ... en cas d'ajout de X champs supplémentaires, t'as X*10 lignes à ajouter, ce qui va à l'encontre même de la programmation :

  • Simplifier au maximum le code
  • rendre intépendantes les différentes couches (affichage, traitement, etc.)
  • modulariser le code
  • ...

principe : un bloc de code où on ne s'occupe que de l'affichage, et un autre bloc où on ne s'occupe que du traitement. ça permet de ne modifier que l'un ou l'autre sans devoir repasser sur tout. (Et dans l'idéal, un 3è bloc de gestion du tout).

Pour la grosse requête, tous les critères doivent être dans la clause "WHERE".

la requête doit pouvoir se construire ainsi :

$req = "SELECT * FROM la_table WHERE (";

if ($nom != '') { $req .= "nom = '".$nom."' OR "; }

if ($prenom ......

$req .= ") ORDER BY id;"; // on ferme la parenthèse ouverte dans le Where, et après tu rajoutes ce que tu veux, un order by, un limit ...

Ensuite n'hésite pas à afficher ta requête avant de l'exécuter.

pytheas
 Posté le 19/06/2010 à 17:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci bien, je ne savait pas qu'on pouvait écrire une requete de cette façon là,avec des conditions à l'interieur.Je ne sais pas si je comprend bien le code,j'ai l'impression qu'il exécute un seul choix à la fois de l'utilisateur,s'il choisi l'un quelconque des options proposées dans le formulaire alors le code execute la requête correspondante,par exemple, s' il saisi ou coche "Nom,(Genre et date d'embauche(qui sont des boutons radio)) le resultat de la recherche sera relatif à Nom,ou Genre ou Date d'embauche.c'est ce que je crois comprendre du code,alors que moi j'aurai souhaité que pour deux choix ou plus, choisi par l'utilisateur que ma requête prenne en compte ces choix à la fois .Du genre:"SELECT * FROM EMPLOYES WHERE nom= $nom AND genre= $genre WHERE datemb=$datemb" par exemple.Merci

Malcolm
 Posté le 19/06/2010 à 18:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Il suffit de mettre "AND" à la place de mon "OR" {#}

Attention dependant dans le long code posté plus haut, la première case à cocher de plusieurs items n'a pas de "name" ...

par exemple civilité, on a bien name pour Marié mais pas pour célibataire.

pytheas
 Posté le 19/06/2010 à 20:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

merci bien bien pour ce coup de pousse je vous tiens au courrant des que je l'executerai,en fait voici mon dernier souci,mon formulaire d'ajout comporte un champ "photo" dont le name est "maphoto",en principe dès que je valide sur le bouton "Enregistrer il doit sauvegarder le chemin complet de la photo dans le champ correspondant dans la bd.En fait j'ai créer un dossier "projetweb" dans "mes documents" dossier qui contient mon site,et à l'interieur j'ai crée un sous dossier nommé "DossierImage"qui devrait contenir mes fichiers uploadés.C'est ce DossierImage là que j'utilise dans mon code également,vraiment je suis perdu,j'arrive pas à trouver l'erreur,aidez moi svp, dans mon code,jai fait de sorte qu' une erreur soit signalée dès que l'utilisateur omet de remplir un champ,lorsque je lance l'exécution tout semble se passer normalement,et meme que j'arrive à l'aide du bouton parcourir à aller chercher la photo,la charger mais des que je clique sur enregistrer il m'afficher un message d'erreur du genre:

"Notice: Undefined index: maphoto in C:\Program Files\EasyPHP 3.0\www\formulairajout.php on line 89"{ Message d'erreur systeme
MonsieurCoulibalyVeuiller remplir le champphoto { Msg généré par mon code

le message géneré par mon code n'a vraiment pas lieu d'etre puisque le champ àn été renseigné,il n'est pas vide,il contient le chemin de la photo.

je ne comprend pas non plus le deuxieme msg vu qu'à la ligne 89 tout semble à mon avis normal voici le code de la ligne 89:

$photo=$_POST['maphoto'];//maphoto representant le name du champ photo

je vous propose quelque bout de mon code:

//Voici comment j'ai défini ce champ dans mon formulaire:

<tr><td width="100">
<b>Photo:</b><input type="file" name="maphoto" /><br/>
</td></tr>

if (!isset ($_POST["valider"]) )
afficherformulaire ();//fonction qui affiche le formulaire de connexion
else
{
$numero=$_POST['numero'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$genre=$_POST['genre'];
$datnaiss=$_POST['datnaiss'];
$datemb=$_POST['datembauche'];
$salbrut=$_POST['salbrut'];
$sitmat=$_POST['sitmat'];
$nbenf=$_POST['nbenf'];
$tel=$_POST['tel'];
$mail=$_POST['mail'];
$photo=$_POST['maphoto'];/*correspond à la ligne 89,tout est fichu s'il ne le reconnait pas ici ou dois-je utilisé $_FILES['$photo']['name'] au lieu de $_FILES['maphoto']['name'] dans le traitement de la photo*/
$loisir=$_POST['loisir'];
$link=mysql_connect("localhost","root","pytheas");
$db=mysql_select_db("grh");
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['maphoto']) AND $_FILES['maphoto']['error'] == 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES['maphoto']['size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier = pathinfo($_FILES['maphoto']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png','JPEG');
if (in_array($extension_upload, $extensions_autorisees))
{
move_uploaded_file($_FILES['maphoto']['tmp_name'], 'DossierImage/' . basename($_FILES['maphoto']['name']));
}
}
}

if($genre=='masculin')
$sex='Monsieur';
else
$sex='Madame';
if($numero=='')
{ $sortie='numero';
afficherformulaire($nom,$sex .$nom. "Veuiller remplir le champ" .$sortie);//msg d'erreur si champ vide ainsi de suite jusqu'au champ photo

.

.

.

elseif($photo=='')
{
$sortie='photo';
afficherformulaire($nom,$sex .$nom."Veuiller remplir le champ".$sortie);
}

Malcolm
 Posté le 19/06/2010 à 22:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

dans le formulaire, il faut lui indiquer qie tu peux télécharger une photo.

ça vaut dire

1) tu DOIS utiliser une méthode "post" (ça visiblement tu le fais déjà)

2) tu DOIS mettre un paramètre à ta balise form comme ceci :

<form id="..." method="post" action="..." enctype="multipart/form-data">

(peu importe l'ordre entre id, method, action et enctype)

une fois ceci fait t'as le input type="file" que tu as bien mis.

Ensuite tu récupères un tableau $_FILES['name_de_ton_champ_file']

et là tu peux uploader ton fichier.

Par contre tu ne récupèreras rien du chemin, au mieux tu auras juste le nom du fichier. C'est à toi de manuellement faire l'association pour ta base de données $_FILES['name_de_ton_champ_file']['name'] + $chemin (ton chemin où tu mets le fichier téléchargé).

Malcolm
 Posté le 19/06/2010 à 22:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

pour compéter ma réponse : un input type="file" ne renverra rien dans $_POST. Il faut obligatoirement passer par $_FILES.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
219,99 €Ecran 32 pouces incurvé Viewsonic VX3219 (FHD, 165 Hz, 1 ms) à 219,99 €
289,99 € -24%

Cdiscount fait une belle promotion sur l'écran 32 pouces incurvé Viewsonic VX3219 qui passe à 219,99 € alors qu'on le trouve ailleurs à partir de 289,99 €. Cet écran dispose d'une dalle VA Full HD  (1920x1080) à 240 Hz avec un temps de réponse de 1 ms. Il est compatible Adaptive Sync. Au niveau connectique, vous trouverez une entrée DP et deux entrées HDMI. Une bonne affaire. 


Voir l'offre
169,16 €SSD PNY XLR8 CS3030 2 To (NMVe M.2, 3500 Mo/s) à 169,16 €
200 € -15%

Cdiscount fait une promotion sur le SSD PNY XLR8 CS3030 2 To (NMVe M.2) qui passe à 169,16 € alors qu'on le trouve ailleurs à partir de 200 €. Ce SSD utilise une interface M.2 NVMe PCIe Gen3 x 4 pour une connexion simple et des performances exceptionnelles : jusqu’à 3500 Mo/s en lecture séquentielle et jusqu’à 2000 Mo/s en écriture séquentielle.

Le SSD est doté de la technologie 3D TLC NAND haute densité offrant une endurance d’écriture durable et assorti d’une garantie de cinq ans.


Voir l'offre
289 €Imprimante 3D Artillery X2 Sidewinder (300x300x400 mm) à 289 €
370 € -22%

Geekbuying fait une belle vente flash sur l'imprimante 3D Artillery X2 Sidewinder qui passe à 289 € avec le code promo NNNFRARTILLERYX2 alors qu'on la trouve ailleurs autour de 370 €. 

Il s'agit de l'une des machines les plus populaires actuellement sur le marché. Elle est très bien équipée avec un large volume d'impression (300x300x400 mm), une carte contrôleur 32 bits, le nivellement automatique, un extrudeur direct drive, double moteurs en Z, un plateau ultrabase, la détection fin de filament, un plateau chauffant rapide, ….L'imprimante 3D est facile à assembler et le calibrage est aisé. 

L'envoi se fait depuis un entrepôt européen (Pologne). La livraison sera donc rapide et sans risque de douane.


Voir l'offre
50,83 €Lego Star Wars Diorama de la poursuite dans les tranchées de l’Étoile de la Mort à 50,83 € livré
79,99 € -36%

Amazon Allemagne fait une promotion sur le set Lego Star Wars Diorama de l’Entraînement Jedi sur Dagobah 75329 qui passe à 45,30 € (avec la TVA ajustée) grâce à un coupon à activer sur la page du produit. Comptez 5,53 € pour la livraison en France soit un total de 50,83 € livré. On le trouve ailleurs à partir de 59,99 €.


Voir l'offre

Sujets relatifs
Problème de gestion de variables de session
Problème de SESSION
Problème avec variable session
Variables de session
Probleme de session avec PHP
Probleme de mise en ligne de fichier sur un serveur
Problème avec free
gestion d'images
Probleme d'incrustage
problème avec fichier "xxx.klm"
Plus de sujets relatifs à Problème de gestion de variables de session
 > Tous les forums > Forum Forum des Webmasters