> 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 23/06/2010 @ 19:57 
Aller en bas de la page 
Petit astucien

Merci beaucoup pour votre aide je suis parvenu enfin à enregistrer des photo dans ma bd,dans le champ photo de ma base de données les photo sont enregistrées sous le nom de "array" est ce normal?

Aussi sur la requête globale que vous m'avez montré celle la:

$qurey = "SELECT * FROM employes WHERE (";
if ($nom !='') {$query .= "nom = '".$nom."' OR"; }
if ($prenom!='') {$query .= "prenom = '".$prenom."' OR "; }
if (($nbenf!='')&&($nbenf=='plusde')) {$query .= "nbenf= '".$nbenf.">5' OR "; }
if (($nbenf!='')&&($nbenf=='moinsde')) {$query .= "nbenf= '".$nbenf."<=5' OR "; }
if ($tel!='') {$query .= "tel= '".$tel."' OR "; }
if ($mail!='') {$query .= "email= '".$mail."' OR "; }
if ($numero!='') {$query .= "numero= '".$numero."' OR "; }
if(($salbrut!='') &&($salbrut=='minore')) {$query .= "salbrut= '".$salbrut."<150000' OR "; }/*pour afficher les salaires <150000 dans la cas ou les conditions sont verifiées,je ne sais pas si c'est la bonne syntaxe */
if(($salbrut!='')&& ($salbrut=='majore')) {$query .= "salbrut= '".$salbrut.">=150000' OR "; }

if(($datnaiss!='')&& ($datnaiss=='moins')) {$query .= "datnaiss= '".$age."<30' OR "; }/*afficher les employés dont l'age est < à 30.pour cela j'ai fais:*/

$datjr=date();/* ici il m'envoit cette erreur là:Warning: date() expects at least 1 parameter, 0 given in C:\Program Files\EasyPHP 3.0\www\rechercer.php on line 92*/


$anjour=substr($datjr,1,4);//pour extraire l'année de la date
$andatnaiss=substr($datnaiss,1,4);
$age=$anjour-$andatnaiss;
$datemboche=substr($datemb,1,4);


if(($datnaiss!='')&& ($datnaiss=='plus')) {$query .= "datnaiss= '".$age.">=30' OR ";}
if(($datemb!='')&& ($datemb=='inferieur')) {$query .= "datembauche= '".$datemboche."<=2000' OR ";}
if(($datemb!='')&& ($datemb=='superieur')) {$query .= "datembauche= '".$datemboche.">2000' OR ";}
$query.=")limit 0,5;";
print_r($query);

voila ce que j'ai fais mais il signale une erreur du genre:Notice: Undefined variable: query in C:\Program Files\EasyPHP 3.0\www\rechercer.php on line 135
nom = 'anselme' ORdatnaiss= '0<30' OR )limit 0,5;

j'ai encore besoin de votre secours.Oh j'oubliais vous ne m'avez pas encore éclairé sur comment afficher mes resutats de page en page en utilisant la clause "LIMIT"par exemple si ma requête me renvoie 20 eregistrement les afficher par 5 sur chaque page d'ou 5 pages.Merci

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

comme bien souvent en PHP l'erreur est écrite et la doc permet de comprendre, d'après l'erreur, ce qui aurait du être fait.

Warning: date() expects at least 1 parameter, 0 given

Il faut mettre un paramètre à la fonction date. N'ayant pas la ligne 92, voici le genre de paramètre que date() attend : http://fr.php.net/manual/fr/function.date.php (la doc PHP)

Notice: Undefined variable: query

"attention, variable $query non définie".

effectivement plus haut tu définis

$qurey = "SELECT * FROM employes WHERE (";

et juste en dessous

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

or à ce stade, pour lui la variable n'existe pas.

Comme quoi afficher toutes les erreurs PHP, ça a du bon {#}

pour ce qui est de la pagination, il faut procéder ainsi :

- d'abord on compte le nombre total d'éléments. $query = "SELECT COUNT(id) FROM ...... WHERE ...." SANS LIMIT et ça renvoie => $num_total_pages = XXX;

- ensuite on définit un nombre de lignes par pages p.ex. $num_lignes_par_page = 50;

- enfin, on calcule la ligne début et la ligne fin directement en prenant en compte la page courante.

$page_courante = (isset($_GET['page'])) ? abs(intval($_GET['page'])) : 1;

if ($page_courante == 0) { $page_courante = 1; } // anti bug

Maintenant on calcule le premier élément et le dernier élément à afficher

$premierElement = ($page_courante -1) * $num_lignes_par_page;

$dernierElement = $num_lignes_par_page;

Et on réexcute la requête AVEC le paramètre "limit"

$query .= sprintf(" LIMIT %d,%d;", $premierElement, $dernierElement);

et on exécute/affiche : ça ne renvoie que les 50 premiers éléments (parce que j'ai mis 50 lignes)

Après il reste une dernière étape : afficher les n° de pages.

S'il n'y a qu'une page, c'est pas nécessaire, autrement on les affiche

if ($num_total_pages > 1)

{

for($a = 1; $a <= $num_total_pages; $a++)

echo '<a href="?page='.$a.'">Page '.$a.'</a> - ';

}

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

Quand vous dites

- d'abord on compte le nombre total d'éléments. $query = "SELECT COUNT(id) FROM ...... WHERE ...." SANS LIMIT et ça renvoie => $num_total_pages = XXX;

je n'arrive pas à percevoir le role de la clause where,car pour moi avec SELECT COUNT(id) from j'ai le nombre total d'enregistrement de ma table.Aussi vous dite que la requete renvoie le nombre de pages,j'avoue n'avoir pas bien compris cette partie là,est ce que vous pouvez me la reexpliquée.juste le debut je crois avoir compris le reste.merci

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

la requête est générique. s'il ne faut compter que les éléments dont la quantité en stock est supérieure à 10, alors le WHERE a sa place, ça dépend de ce qu'on veut lister.

Typiquement, il y a une requête sur ce qu'on veut afficher où on ne fait que SELECT COUNT(id) et une reqûete qui est exactement la même, hormis 2 différences : pas de COUNT(id) mais champ1, champ2, champ3... et on la termine par un LIMIT nombre_1,nombre_2 pour rapatrier les X enregistrements de cette page.

Une fois que la requête SELECT COUNT(id) AS num_elements a été effectuée, on peut en déduire le nb de pages par cette formule :

$num_total_pages = ceil($reponse['num_elements'] / $num_lignes_par_page);

Ainsi s'il y a 15 éléments retournés par le SELECT COUNT, avec 3 éléments par page on aura 15 / 3 = 5 pages.

S'il y a 16 éléments retournés avec toujours 3 par pages, 16 / 3 = 5.333 = 6 pages (car le "ceil" arrondit à l'entier supérieur) - la 6è page ne contenant alors qu'un élément (mais ça c'est le LIMIT qui le fera tout seul).

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

vos expications m'ont permis de beaucoup avancé,mais j'ai encore une question à vous posez,j'ai ecrit tout mon code php sur une seule page en fait en voici le debut:<form name="recherche" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

et celui permettant de gerer ma pagination ci-dessous:

echo'<p align="center"> Page:';
for($i=1;$i<=$nbpage;$i++)
{
if($i==$pageActuelle )
echo ' [ '.$i.' ] ';
else
echo'<a href="rechercer.php?page='.$i.'>'.$i.'</a>';
}
echo'</p>';

il affiche effectivement le nombre de page et le numero de la page courante entre crochet [] seulement quand je clique sur le numero de la page suivante il me redirige vers mon formulaire au lieu de la page demandée,je ne sais pas si c'est dû à ce lien là:echo'<a href="rechercer.php?page='.$i.'>'.$i.'</a>';si c'est le cas alors que dois-je faire.Merci

Malcolm
 Posté le 26/06/2010 à 01:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

c'est parce que le formulaire n'a pas été soumis ...

il faut passer en méthode "get" et envoyer les variables par URL.

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

c'est pour dire de changer ma methode d'envoie $_POST par $_GET?

je n'arrive pas à comprendre pourquoi mon boutons radio lorsqu'ils ne sont pas cochés m'envoie des msg d'érreurs du genre:

Notice: Undefined index: datnaiss in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 86

Notice: Undefined index: datemb in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 87

Notice: Undefined index: salbrut in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 88

Notice: Undefined index: sitmat in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 89

Notice: Undefined index: nbenf in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 90

Notice: Undefined index: loisir in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 93

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

en fait voici tout mon problème,prenez tout juste le temps de lire et certainement vous me comprendrai.

voici le cahier de charge qui m'est soumis.

Projet
On se propose de concevoir un site Internet destiné au service des ressources
humaines d'une entreprise.
L'accès aux différentes pages de ce site est conditionné par une
authentification préalable avec un nom d'utilisateur et un mot de passe. Après
un délai d'inactivité de 5 minutes, l'authentification est requise.
Un employé est identifié par les informations suivantes :
- numéro interne auto incrémental
- nom
- prénoms
- genre : masculin, féminin)
- Date de naissance
- Date d'embauche
- Salaire brut
- Situation matrimoniale (célibataire, marié, veuf, divorcé)
- Nombre d'enfants
- Numéro de téléphone
- Email
- Photo d'identité (image)
- loisirs : cinéma, musique, littérature, sport, religion, télévision,
politique. Un employé peut avoir plusieurs loisirs.
Deux rubriques sont présentes dans le menu : la rubrique d'ajout d'un employé
et la rubrique de recherche d'employés.
Le formulaire d'ajout permettra renseigner toutes les informations relatives à
un employé, énumérées ci-dessus et de les enregistrer dans la base de données.
Si des informations sont manquantes ou erronées, le formulaire rempli est
réaffiché avec un message d'erreur, demandant à l'utilisateur de compléter la
dite information.
Bases de données et web – Projet Page 2 sur 2
Le formulaire de recherche sera multi critères qui comprendront toutes les
informations relatives à un employé, à l'exception de sa photo d'identité. Pour
les dates de naissance et d'embauche, le nombre d'enfants et le salaire brut, le
formulaire permettra de spécifier les valeurs minimales et maximales désirées
pour la recherche.
Après avoir renseigné le formulaire, au clic sur le bouton d'envoi, le
formulaire s'affiche en premier avec les informations renseignées par
l'utilisateur. En second, le nombre de résultats trouvés. En troisième lieu, la
liste des résultats trouvés. Cette liste contiendra :
- la photo d'identité
- le nom et le prénom de l'employé
- un lien ou un bouton pour voir toutes les informations sur l'employé :
une nouvelle page s'affiche présentant toutes les informations sur
l'employé, affichant également la photo
- un lien ou un bouton pour supprimer l'employé : une page de
confirmation demandera à l'utilisateur s'il veut bien procéder à la
suppression de l'employé. à la validation, l'enregistrement sera
supprimé de la base de données.
- un lien ou un bouton pour modifier les informations sur l'employé : il
sera présenté à l'utilisateur un formulaire semblable à celui de création
d'un employé permettant de modifier les champs.
Les résultats de recherche seront affichés par groupe : pas plus de 5 par page.
La liste sera précédée et se terminera par une série de liens ou de boutons
permettant :
- d'aller à la première page
- d'aller à la page suivante
- d'aller à la page précédente
- d'aller à la dernière page
- d'aller à une page spécifique; ce dernier bouton ou lien sera précédé
d'une liste déroulante permettant de choisir la page désirée.
Proposer une structure de tables MySQL et un ensemble de fichiers PHP
permettant de réaliser ce cahier de charges. Le répertoire des fichiers PHP
ainsi qu'un export des tables en format SQL sont à envoyés au format zip.

j'ai reussi à faire le formulaire de connexion ainsi que celui de l'ajout,mais ce qui m'embette c'est le formulaire de recherche.si ce cahier de charge vous etait soumis comment realiseriez-vous la recherche,je vous demande les grands principes,qui me permettront d'arriver à bout de cet exercice.votre aide me sera d'une grande importance.merci

Malcolm
 Posté le 29/06/2010 à 00:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

avant de trop vouloir s'impliquer dans le codage, il faut en comprendre les notions. Tu perdras du temps à savoir ce qu'est une variable, mais tu le gagenras par la suite en résolvant les soucis au fur et à mesure.

une case radio, une checkbox si elles ne sont pas cochées, ne renvoient rien. C'est de l'HTML pur et dur. Si tu ne sais pas ça, penche-toi d'abord sur l'HTML.

Voici de quoi comprendre les formulaires : http://www.php-astux.info/formulaires-html.php et de quoi les récupérer : http://www.php-astux.info/formulaires-php.php

Lis ces 2 articles, pour commencer.

Ensuite pour la réflexion d'ordre général, il faut partir de plusieurs concepts :

1) essayer, autant que possible, de séparer les logiques : tout ce qui est de l'HTML doit être situé à un endroit différent de tout ce qui est calcul et traitement PHP

2) nommer judicieusement ses variables

3) tester, débugger au fur et à mesure

4) Avancer pas à pas. Inutile de voiloir faire tout si la base n'est pas solide.

Quelques principes de programmation : http://www.php-astux.info/principes-de-programmation.php

Visiblement il s'agit d'un projet type école / stage et nous ne sommes pas là pour faire le travail à ta place : nous pouvons en revanche te guider par des questions qui te permettront de valider pédagogiquement certains jalons.

Les 2 articles sus-cités répondront déjà à 80% de ton besoin. Après la base de données, je pense que tu as du savoir la faire, le traitement des variables, bin si tu sais les récupérer, tu sais composer une requête, tu dois savoir la traiter.

Sinon voici un article sur PHP / MySQL : http://www.php-astux.info/script-mysql.php

La recherche n'est ni plus ni moins qu'un formulaire et c'est selon ce qu'a entré le visiteur que la requête SQL envoyée au serveur de base de données qui sera différente.

A toi de tester les différentes possibilités afin de générer une requête finale puis l'envoyer, la traiter, et afficher le résultat.

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

je crois qu'on ne s'est pas compris,en vous proposant de lire le projet je ne m'attendais pas du tout à ce que vous le traité pour moi,sinon je n'apprendrai rien en réalité,seulement,je me suis dis que si vous avez une idée de ce que je tente de réalisez cela vous permettrai de me comprendre.j'avance vous pouvez me croire,lentement c'est vrai et cela m'encourage.

A la fin chaqu'un des enregistrements renvoyés par "SELECT",j'ai deux boutons supprimer et ajouter,j'aimerais qu'au click par exemple du bouton Supprimer,une confirmation me soit demandée avant de procéder à la suppression réelle de l'enregistrement en question,pouvez vous me guider sur la logique à suivre?comme exactement l'interface de PhpMyAdmin.j'ai tenté d'utilisé une fonction javascript pour gerer la confirmation que voici:

<script type="text/JavaScript">
function onSupprimer()
{
for (i = 0; i < document.rechercher.elements.length; i++)
if (document.rechercher.elements[i].supp.value) /*supp=nom du bouton supprimer*/
if (confirm("Êtes-vous sûr de vouloir supprimer cet employé?"))
{
document.rechercher.action="supprimer.php";
document.rechercher.submit();
}
}

et puis

if(isset($_POST['supp']))
{
$_nbr=mysql_query("select count(numero) from employes");
for($a=1;$a<=$nbr;$a++)


}

mais je me rends compte que cette logique supprimera tout mes enregistrements.

je pensais à créer un tableau à 2 dimensions qui contiendrai le nombre total d'enregistrement de ma base et le nombre de champs du genre:

employe[total][champ] et créer un compteur qui pour l'enregistrement i selectionné le supprimera.je ne sais pas si ma logique tient?

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

C'est ce que je disais plus haut : avant de voir trop gros, il faut voir petit. Non, la logique ne tient pas.

Il faut décomposer le raisonement en une suite de petites étapes, chacune étant une instruction que la machine peut comprendre.

Typiquement, l'obejctif est : supprimer un enregistrement avec confirmation

La machine doit comprendre

clic bouton > Action utilisateur : Confirmer > Si oui, récupérer ID > exec "DELETE FROM table WHERE id=..."

> Si non, ne rien faire

Voilà typiquement comment on décompose les étapes.

Clic bouton, action utilisateur : c'est du Javascript.

<a href="?action=delete&id='.$id.'" onclick="return confirm('Supprimer ? OK = oui, Annuler = Non');" value="supprimer">Supprimer cet item</a>

Là on est côté client, HTML et JS.

Maintenant "si oui", le lien a href va être ouvert. Si non, le "confirm" répondra FALSE et le lien ne sera pas ouvert.

Il ne reste qu'à écrire la requête associée.

Le code donné par PMA marche, mais il traite un certain nombre d'éléments avec des cases à cocher et une structure plus complexe. Essayer de comprendre ça sans avoir même compris le principe d'action, c'est s'épuiser pour rien...

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

<!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page WordSection1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} -->

Votre algo transcrit exactement ce que j’ai envie de faire, mais je n’ai pas bonne connaissance du java script, j’ai passer presque toute la nuit à parcourir les tutoriels que vous m’avez conseillé, mais je ne suis pas encore parvenu à l’implémenter. En fait mon gros problème c’est que je ne sais comment pouvoir récupérer le numéro de l’enregistrement à supprimer afin d’exécuter ma requete.comment faire pour savoir que c’est précisément cet enregistrement que le user veut supprimer ?je me dis que si j’arrive à avoir ce code, je pourrai m’en sortir enfin.

J’ai meme tenté ceci :

if(isset($_GET['sup']))

{

$nbre=mysql_query("select count(numero) from employes ") ;

for($i=1 ;$i<=$nbre ;$i++)

{

if(isset($_GET['supp']))

{

$id=$i ;

mysql_query("delete from employes where numero=’".$id."’");

}

}

}

Mais il ne supprime pas mon enregistrement.

Malcolm
 Posté le 02/07/2010 à 19:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bin c'était bien parti ...

Il faut faire en sorte que la même page soit appelée avec en paramètre ?supp=XXX où XXX sera l'ID à supprimer.

Sans avoir le code source bien mis, difficile d'en dire plus. Poste-le en fichier texte sur ton site.

pytheas
 Posté le 03/07/2010 à 16:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour,merci pour vos explications et pour votre patience à mon égard,j'en connais d'autres qui se serait deja eénervé ou qui refuserais meme de me repondre,je reviens une fois de plus avec les erreurs des boutons radio signalés par le système.j'ai verifié et revérifies les noms que j'ai donnés à ces boutons mais je n'ai perçu aucune erreur.mais ce que je remarque au niveau de l'URL parce que j'utilise la methode GET c'est qu'il ne transmet pas toutes les variables,ce qui m'amene à me demander si ma requete globale ne comporte pas d'erreur le voici:$query = "SELECT * FROM employes WHERE (";
if ($nom !='') {$query .= "nom = '".$nom."' OR"; }
if ($prenom!='') {$query .= "prenom = '".$prenom."' OR "; }
if (($nbenf!='')&&($nbenf=='plusde')) {$query .= "nbenf= '".$nbenf.">5' OR "; }
if (($nbenf!='')&&($nbenf=='moinsde')) {$query .= "nbenf= '".$nbenf."<=5' OR "; }
if ($tel!='') {$query .= "tel= '".$tel."' OR "; }
if ($mail!='') {$query .= "email= '".$mail."' OR "; }
if ($numero!='') {$query .= "numero= '".$numero."' OR "; }
if(($salbrut!='') &&($salbrut=='minore')) {$query .= "salbrut= '".$salbrut."<150000' OR "; }
if(($salbrut!='') &&($salbrut=='majore')) {$query .= "salbrut= '".$salbrut.">=150000' OR "; }/* ace niveau j'imbrique les if je ne sais pas si la syntaxe est correcte*/
if(($datnaiss!='') &&($datnaiss=='moins')) {$query .= "datnaiss= (date_format( now( ) , '%Y' ) - substr( datnaiss, 1, 4 ))<30 OR "; }
if(($datnaiss!='')&& ($datnaiss=='plus')) {$query .= "datnaiss= (date_format( now( ) , '%Y' ) - substr( datnaiss, 1, 4 ))>=30 OR ";}
if(($datemb!='') ($datemb=='inferieur')) {$query .= "datembauche= substr(datembauche,1,4) <2000 OR ";}
if(($datemb!='')($datemb=='superieur')) {$query .= "datembauche= substr(datembauche,1,4) >=2000OR ";}
$query.=");";

pensez_vous que des erreur dans la requete pourrait amené le système à signalé des erreur du genre:

Notice: Undefined index: datnaiss in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 108

Notice: Undefined index: datemb in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 109

Notice: Undefined index: salbrut in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 110

Notice: Undefined index: sitmat in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 113

Notice: Undefined index: loisir in C:\Program Files\EasyPHP 3.0\www\grh\rechercer.php on line 114

et c'est lignes correspondent toutes aux lignes contenant des boutons radio.

Malcolm
 Posté le 04/07/2010 à 12:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Hello

je pense que now( ) n'existe pas : en PHP c'est time()

undefined index signifie que tu appelles un index dans un tableau, qui n'existe pas.

par exemple tu appelles $_POST['champ_4'] alors que $_POST contient juste $_POST['champ_1'], $_POST['champ_5'], et $_POST['champ_14']

je te conseille quelque chose : TOUJOURS débugger intelligemment.

S'il s'agit bien de $_POST (parce que là je ne sais pas à quoi correspondent tes lignes 108 à 113) affiche le contenu {#}

Mets ce code juste au moment où tu commences à récupérer tes variables de formulaire :

echo '<strong>$_POST :</strong><pre>';

print_r($_POST);

echo '</pre>';

Tu verras ainsi TOUT le contenu du tableau $_POST avec les clés (index) et les valeurs.

Tu verrras alors si les clés datnaiss datemb etc. existent ou non.

Cette astuce est valable avec n'importe quelle variable, $_FILES, $_GET, $monTableau ...

Si déjà là tu constates que c'est pas défini, c'est que le souci vient d'avant.

Option 1 : c'est parce que le champ correspondant n'existe pas dans le formulaire.

un champ name="dateNaiss" est différent d'un champ name="datenaiss".

Option 2 : c'est parce que le champ n'a pas été envoyé.

Si tu as bien lu mes articles sur les formulaires au dessus, ça concerne les input type="radio" ou "checkbox". ça peut être aussi un attribut "disabled" mais je ne pense pas que tu en aies utilisé. Si une case à cocher n'a pas été cochée, le $_POST équivalent n'existe pas, il faut le traiter par un isset($_POST['champ']) ...

pytheas
 Posté le 05/07/2010 à 11:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

oui effectivement quand j'ai écris le code que vous m'avez j'ai remarqué que seulement 5 index:

Array
(
[numero] =>
[nom] => Coulibaly
[prenom] =>
[tel] =>
[mail] =>
[valider] => rechercher
)
la valeur de l'index[nom] existe parce que je l'ai saisie,j'ai pensé a votre deuxieme option 2,celle la:
Option 2 : c'est parce que le champ n'a pas été envoyé.je ne comprend toujours pas pourquoi les champs des index
ayant des boutons radio n'apparaissent pas,ce qui est curieux,
dès que je renseigne un de ces champs il m'affiche
le resultat,tenez voyez vous-même,si je clique sur mon boton radio 'genre' par exemple:
Array
(
[numero] =>
[nom] =>
[prenom] =>
[genre] => masculin/* index et valeur me sont fournie*/
[tel] =>
[mail] =>
[valider] => rechercher
)
ma requete globale ne fait que me mettre des:Notice:Undefined index: je ne sais pas pourquoi,par contre
c'est elle qui est pourtant la meilleure car elle correspond réellement à ce que je veux.mais comme
il ne me fourni que des:
Notice:Undefined index:j'ai fais des combinaisons de if à defaut,comme ça:
if($genre!='')
$query="select * from employes where genre='".$genre."'";
if($nom!='')
$query="select * from employes where nom= '".$nom."'";
if($prenom!='')
$query="select * from employes where prenom= '".$prenom."'";
if(($nbenf!='')&&($nbenf=='plusde'))
$query="SELECT * FROM employes WHERE nbenf >=5 ";
if(($nbenf!='')&&($nbenf=='moinsde'))
$query="select * from employes where nbenf < 5";
if($tel!='')
$query="select * from employes where tel= '".$tel."'";
if($mail!='')
$query="select * from employes where email like '".$mail."'";
if($numero!='')
$query="select * from employes where numero= '".$numero."'";
if(($salbrut!='') &&($salbrut=='minore'))
$query="select * from employes where salbrut < 150000";
if(($salbrut!='')&& ($salbrut=='majore'))
$query="select * from employes where salbrut >=150000";
if(($datnaiss!='')&& ($datnaiss=='moins'))
$query="SELECT * FROM employes WHERE (date_format( now( ) , '%Y' ) - substr( datnaiss, 1, 4 ))<30";
if(($datnaiss!='')&& ($datnaiss=='plus'))
$query="SELECT * FROM employes WHERE (date_format( now( ) , '%Y' ) - substr( datnaiss, 1, 4 ) ) >=30";
if(($datemb!='')&& ($datemb=='inferieur'))
$query="select * from employes where substr(datembauche,1,4) <2000";
if(($datemb!='')&& ($datemb=='superieur'))
$query="select * from employes where substr(datembauche,1,4)>=2000";
if($sitmat!='')
$query="select * from employes where sitmat='".$sitmat."'";
if($loisir!='')
$query="select * from employes where loisir='".$loisir."'";
A force de chercher une solution je suis tombé sur un code en PHP objet je crois,PDO
mais le système me dis qu'il me faut un driver de quel driver il s'agit,ou puis-je le télecharger,il traite
également mon problème.Merci


Malcolm
 Posté le 05/07/2010 à 19:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

PDO ne résoudra pas le problème.

La solution, je te l'ai donnée il y a plusieurs jours : dans mon message du 29 juin

Voici de quoi comprendre les formulaires : http://www.php-astux.info/formulaires-html.php et de quoi les récupérer : http://www.php-astux.info/formulaires-php.php

C'est un comportement normal de l'HTML. Une checkbox/radio non cochée = ne renvoit rien, c'est prévu comme ça, tu ne le changeras pas.

Pour savoir, en $_POST/GET ce qui t'es renvoyé, t'as une solution : lire toutes les paires clés/valeurs du tableau, mais seront absentes toutes les clés des radio/checkboxes non cochées, tu n'y peux rien.

A toi de savoir que ça existe et de faire un truc du style

$ma_checkbox = (isset($_POST['name_de_ma_checkbox'])) ? $_POST['name_de_ma_checkbox'] : 'valeur par défaut';

pareil pour un bouton radio.

Cette écriture en une ligne s'appelle "écriture ternaire" et est exactement la même écriture que celle-ci :

if (isset($_POST['name_de_ma_checkbox']))

{ $ma_checkbox = $_POST['name_de_ma_checkbox']; }

else

{ $ma_checkbox = 'valeur par défaut'; }

A toi de choisir l'écriture préférée, perso la première car plus compacte.

Et c'est à faire pour toutes tes checkboxes et tes radio.

Pour PDO c'est juste une autre manière (plus récente) d'accéder à une base de données. Pour installer le driver, si tu as un serveur mutualité (type OVH 1&1 etc.) tu ne peux pas installer de driver. Il faut demander à l'hébergeur / voir dans sa FAQ / faire un phpinfo() pour voir quels sont les drivers qu'il a installés.

Si t'es sur Free.fr, tu OUBLIES pdo. Free livre une base de données MySQL et fournit un driver PDO type SQLite, qui n'est pas le même type de base de données. (c'est franchement c*n ! Mais c'est comme ça chez Free.fr). C'est comme si t'avais une carte son Creative Sound Blaster et que je te fournis un driver pour une Webcam Logitech. Donc pas de PDO sur Free pour MySQL à l'heure où j'écris ces lignes.



Modifié par Malcolm le 05/07/2010 19:19
pytheas
 Posté le 08/07/2010 à 12:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour,j'ai ressit à faire la suppression de code de la suppression et il marche très bien,maintenant,je veux réussir celui de la modification,mais je suis confronté à deux problèmes:

1°)j'ai tout comme pour la suppression récuperer le numero de l'enregistrement à supprimer puis procedé à la suppression comme vous me l'avez dit.voici le code

code html:

<form name="gerer_bouton_supprimer" method="get"action="supprimer.php"/>
<td width="100"><input type="hidden" name="numero" value="<?php echo $row[0]; ?>" /><input type="submit" name="supp" value="Supprimer" /></td>
</form>

le code PHP de la suppresion:


$id=$_GET['numero'];


mysql_query("delete from employes where numero=$id");

pour la modification je voudrais procedé de la meme manière,recupérer le numero de l'enregistrement à modifier,faire un select pour recupérer tous les champs,afficher les valeurs dans les differents champs du formulaire,seulement je ne sais pas comment savoir que le user à modifier tel et tel champs,en attendant d'avoir eu une solution je pense avant qu'il ne clique sur le bouton de sauvegarde supprimer toutes les anciennes valeurs qu'il avait saisie et insererées celles qu'il vient de modifier voici un peu comment je vois la logique.

mon deuxieme probleme est ma session n'expire pas,j'ai fais ce que vous m'avez dis,peut-etre que je ne l'ai pas placé au bon endroit,voici comment je l'ai fait dans mon formulaire de connexion:

$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'];
$pass =$_POST['password'];
$_SESSION['login']=$login;
$_SESSION['pass']=$pass;
$_SESSION['date_debut'] = time();
if (time() - $_SESSION['date_debut'] >= 300)
exit('<a href="login.php">delai expiré</a>');
else
$_SESSION['date_debut'] = time();

require("cadre.htm");
}

j'ai écris tout au debut: session_start();et quand je suis redirigé vers cadre htm ma session n'expire jamais.

Malcolm
 Posté le 09/07/2010 à 22:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pour le 1) pour faire simple tu fais un select champ1, champ2 .. from table

tu fais un formulaire dont les "value" des champs sont préremplies

par exemple <label for="nom">Votre nom : </label><input type="text" id="nom" name="nom" value="<?php echo $row['nom']; ?>" />

Et dans l'action du formulaire, tu récupères les nouveaux champs (GET/POST) et puis tu fais un update de la table.

update table set champ1=..., champ2=..., champ3=... WHERE id=42

pour le 2) attends-tu au moins 5 min avant de changer de page ? Car à chaque rechargement de page tu exécutes cette opération : $_SESSION['date_debut'] = time(); donc tu réinitialises le compteur.

La confition if (time() - $_SESSION['date_debut'] >= 300)ne vaudra que si tu n'(actualises pas avant au moins 5 min (5 *60 = 300 sec)

Publicité
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
29 €Switch Gigabit TL-SG108E 8 ports administrables à 29 €
35 € -17%

Amazon fait une promotion sur le switch Gigabit TL-SG108E 8 ports administrables qui passe à 29 € alors qu'on le trouve ailleurs à partir de 35 €. Ce switch est administrable : vous pouvez créer des sous réseaux isolés VLAN, limiter la bande passante par port, etc. 


Voir l'offre
15,99 €Switch Gigabit Netgear GS308 8 ports à 15,99 €
27,99 € -43%

Amazon fait une vente flash sur l'excellent switch Netgear GS308 Gigabit 8 ports 10/100/1000 qu'il propose à 15,99 € alors qu'on le trouve ailleurs à partir de 27,99 €.


Voir l'offre
399,99 €Asus Chromebook 15.6 pouces tactile 360° (Core i5, 8 Go de RAM, SSD 256 Go, Chrome OS) à 399,99 €
569,99 € -30%

Cdiscount fait une promotion sur le portable Asus Chromebook 15.6 pouces CX5500FEA-E60145 qui passe à 399,99 € alors qu'on le trouve ailleurs à partir de 569,99 €.

Cet ordinateur portable possède un écran tactile Full HD IPS orientable à 360° pour convertir l'ordinateur en tablette, un processeur Intel Core i5 1135G7, 8 Go de RAM, 256 Go de stockage extensible par USB et fonctionne sous Chrome OS conçu spécifiquement pour l'usage du Web et de ses applications. Vous pourrez donc surfer sur Internet, regarder des vidéos et faire de la bureautique. Vous pourrez lui installer les applications de Google Play.

Il possède 2 ports USB Type C et une batterie longue durée qui offre jusqu'à 12 heures d'autonomie.


Voir l'offre
149,99 €Ecran PC 27 pouces Dell S2721NX (IPS, Full HD) à 149,99 €
199,99 € -25%

Darty fait une promotion sur l'écran PC 27 pouces Dell S2721HN qui passe à 149,99 € au lieu de 199,99 €. L'écran dispose d'une dalle IPS FHD (1920x1080 pixels) à 75 Hz et de deux prises HDMI. Parfait pour la bureautique, Internet et le multimédia.


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