| ||||||||
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(($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*/
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 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é | ||||||||
| ||||||||
![]() ![]() | 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.
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)
"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"
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
| |||||||
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
| |||||||
![]() ![]() | 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). | |||||||
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:'; 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
| |||||||
![]() ![]() | c'est parce que le formulaire n'a pas été soumis ... il faut passer en méthode "get" et envoyer les variables par URL. | |||||||
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 | |||||||
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 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
| |||||||
![]() ![]() | 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.
| |||||||
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"> et puis if(isset($_POST['supp'])) 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? | |||||||
![]() ![]() | 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... | |||||||
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. | |||||||
![]() ![]() | 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.
| |||||||
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 ("; 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 et c'est lignes correspondent toutes aux lignes contenant des boutons radio. | |||||||
![]() ![]() | 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']) ... | |||||||
Petit astucien | oui effectivement quand j'ai écris le code que vous m'avez j'ai remarqué que seulement 5 index: Array | |||||||
![]() ![]() | 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
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
pareil pour un bouton radio.
Cette écriture en une ligne s'appelle "écriture ternaire" et est exactement la même écriture que celle-ci :
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 | |||||||
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"/> le code PHP de la suppresion:
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='" . j'ai écris tout au debut: session_start();et quand je suis redirigé vers cadre htm ma session n'expire jamais.
| |||||||
![]() ![]() | 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) | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | ||||||||||||||||||
|