formulaire multicritere de fichier pdf (par le nom de ces derniers) - PHP - Programmation
Marsh Posté le 26-01-2009 à 12:56:22
Ah oui j'ai oublié excusez moi le 2eme code a ete bafouillé j'arrive avec avoir ma recherche par multicritere mais le code ne me plait en effet en ne mettant qu'un seul critere dans le formulaire j'ai la liste des fichiers correspondant a la demande mais d'apres le code c'est impossible puisque dans
if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND
(preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND
(preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND
(preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND
(preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))
je n'ai que des AND...
vous comprennez que ca ne devrais pas marcher
Marsh Posté le 26-01-2009 à 15:08:35
eclairssissement excusez moi je ne suis surement pas tres clair
ok sorry je repette
1/ j'ai fait le 1er code qui via un formulaire me trouve des fichiers pdf qui sont presents sur ma machine
2/le nom des dits fichiers est de cette forme pour tous:
SECXX_TYP_REF_OBJET_DATE
ces fichiers differents donc par les 5 criteres suivants:
XX de SECXX
TYP
REF
OBJET
DATE
exemples de nom de fichier pdf
1/SEC32_COU_8000413_Demande de stage_220109
2/SEC12_REP_10313_verification_300476
nous voulons par exemple avoir acces au fichier suivant
SEC32_COU_8000413_Demande de stage_220109
dans mon formulaire j'aurais ces 5 criteres a remplir
section: 32
type: COU
reference: 8000413
objet: Demande de stage
date: 220109
mais je ne suis pas oblige de remplir tous ces criteres en effet en tappant 32 a la section et en validant j'aurais affiché tous les fichiers qui ont comme section 32, de la je n'aurais qu'a cliquer sur le dit fichier..., en tapant type tout simplement j'aurais tous les fichiers possedant comme type cou, en tapant section: 32 et type: COU j'aurais tous les fichiers ayant ces 2 crieteres
voila
mais le granc ic est que le 1er code que je vous ai presenté ne permetait qu'une recherche par un seul critere c 'est a dire soit section soit cou soit reference soit objet ou encore date
j'ai pour regler le pb(2eme code)
mis (au pif apres plusieurs essaie)des AND aux "preg_match" et ca fonctionne c'est a dire recherche multicritere mais (bien sur il ya un mais) logiquement ce code ne doit pas fonctionner car en mettant des AND j'oblige a ce que la recherche ce fasse avec les 5 criteres remplis (c'est ca n'est ce pas le AND?) alors que lorsque je lance mon code je peux faire la recherche avec 1,2,3,4 ou 5 criteres
donc question: quest ce qui cloche SVP?
Marsh Posté le 26-01-2009 à 18:21:34
Colorise d'abord ton code avec les balises [ code=php] et [ /code=php] (sans les espaces que j'ai volontairement ajouter pour éviter que les balises de code soient transformées
Mon message
[ code=php]//mon code[ /code]
Autre chose :
Code : |
Les regex c'est bien pratique mais il ne faut pas en abuser : quand elles sont remplaçables facilement, il ne faut pas hésiter à les substituer.
Même si les PCRE sont plus rapide que les POSIX elles sont bien souvent moins rapides que les fonctions natives de traitement de chaînes de PHP.
Dans ton cas, si tu souhaites simplement tester la présence d'une chaine dans une autre chaine, tu peux utiliser la fonction strpos
Cette fonction comme tu peux le voir dans le manuel, retourne la position (entier) de la chaine fournie en second argument dans la chaine passée en premier arguement.
Si la sous-chaine n'est pas trouvée, la fonction retourne false.
Code :
|
Marsh Posté le 27-01-2009 à 14:41:38
BJR
luc@s merci pour ton code mais dans le cas ou tu aimerais faire une recherche multucritere comment tu fais?
si je reprends ton exemple je veux savoir si pomme et fraise son dans ta phrase?
Marsh Posté le 27-01-2009 à 18:27:58
Euh, c'est niveau débutant, çà...
Il suffit de faire plusieurs appels à strpos dans ton IF.
Ensuite je t'ai demandé de coloriser ton code, là tu as envoyé plein de lignes et elles sont illisibles comme çà.
Marsh Posté le 29-01-2009 à 09:32:22
bjr
je viens de voir ton message sorry pour pour le code, j'ai pu regler mon souci en fait il suffisait de mettre des if et j'ai enleve toute le reste je t'envoie l'ancien code et le new (stp dis moi si le 2eme est propore)
ancien code
Code :
|
new code
Code :
|
merci et bonne journee
Marsh Posté le 29-01-2009 à 09:33:40
je revoie egalement ton code et te donne l'info de savoir si ca passe ou pas j'ai du louper quelque chose
Marsh Posté le 29-01-2009 à 09:35:14
Avant tout :
1 - utilise strpos et pas des regex
2 - Pourquoi utiliser un suite de IF imbriqués ? Utilise les opérateurs logiques AND ou && !
Marsh Posté le 29-01-2009 à 11:45:15
voici mais je ne comprends pas comment fonctionne les AND stp?
[code=php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
<head>
</head>
<body>
<div id="formulaire">
Recherche des fichiers:
<form action= "new2.php" method="post">
<p>Corps administratif : <input type ="text" name= "section" /> </P>
<p>Type de courrier : <input type ="text" name= "type" /> </p>
<p>Reference du courrier: <input type ="text" name= "reference" /></p>
<p>Objet du courier : <input type ="text" name= "objet" /> </p>
<p>Date du courier (jjmmaa) : <input type ="text" name= "date" /> </p>
<p>Date approximative du courier (jjmmaa) : <input type ="text" name= "date" /> </p>
<input type ="submit" name ="validez" value ="validez" />
<input type="reset" value="effacez"/>
</form>
</div>
<div id="resultat">
<?php
// si les POST existent
if ((isset($_POST['section']))){
if (isset($_POST['type'])) {
if(isset($_POST['reference'])) {
if (isset($_POST['objet'])) {
if (isset($_POST['date'])) {
//if (isset($_POST['dateAproxi'])) {
// alors on cree les variables correspondante
$section = $_POST['section'];
$type = $_POST['type'];
$reference = $_POST['reference'];
$objet = $_POST['objet'];
$date = $_POST['date'];
//$_POST['dateAproxi'] = $dateAproxi ;
// jeu de majuscule avec les POST
$section = strtoupper ($_POST['section']);
$type = strtoupper ($_POST['type']);
$reference = strtoupper ($_POST['reference']);
$objet = strtoupper ($_POST['objet']);
$date = strtoupper ($_POST['date']);
//$dateAproxi = strtoupper ($_POST['$dateAproxi']);
// on traite le formulaire en ouvrant le dossier et en entrant dans la fonction
$dossier = 'Courrier/' ;
$list = scandir($dossier);
foreach ($list as $file) //identique a for mais specifié au tableau
{
$file = strtoupper ($file); // jeu de majuscule avec les fichiers
$divfichier = explode('_',$file); //on decoupe les fichiers
if((strpos($divfichier[0], $_POST['section']))
AND (strpos($divfichier[1], $_POST['type']))
AND (strpos($divfichier[2], $_POST['reference']))
AND (strpos($divfichier[3], $_POST['objet']))
AND (strpos($divfichier[4], $_POST['date'])) ){
echo '<a href="'.$file.'">'.$file.'</a><br/>';
}
}
}
}
}
}
} ?>
</div>
</body>
</html>
[/php]
Marsh Posté le 29-01-2009 à 11:48:05
si tu ne sais pas comment fonctionnent les opérateurs logiques alors que tu les utilisaient, j'en déduis que tu as prit ce script quelque part et que tu ne comprends pas ce que tu fais ?
Et tu as bien lu mon message sur strpos et le fait qu'il fallait tester le type de retour ?
Marsh Posté le 29-01-2009 à 12:08:53
c'est moi qui l'ait fait ce script je te rassure ma fatigue, mon mal de tete avec des nuits blanches et mon mal de dos (position assise) peuvent en temoigner.
Au depart j'avais fait un essaie avec un seul critere ca fonctionnais et pour les 4 autres criteres j'ai eu lidee de tester avec des AND et ca a fonctionne
MAIS je ne comrpends pas qu'il fonctionne alors que en mettant des AND ceux qui veut dire que SI (POST_section = divfichier[0] ET que POST_type = divfichier[1] ET que POST_reference = divfichier[2] ET que POST_objet = divfichier[3] ET que POST_date = divfichier[4] ) ALORS on ecrit le fichier
lorsque je rempli qu'UN seul de mes criteres ca passe corretement alors que d'apres le code les 5 criteres doite etre remplis pour que ca marche
c'est ce que je ne comprends pas luc@s
Marsh Posté le 29-01-2009 à 12:19:00
il faudrait débugger : afficher divfichier[n] et POST[truc]
Marsh Posté le 26-01-2009 à 12:52:04
bjr
j'ai écrit ce code qui grace a 5 critères permet de chercher un fichier pdf, on n'est pas obligé de rentrer les 5 criteres ...mais bon j'ai un souci c'est pas vraiment ce que je voulais, je m'explique les noms des fichier pdf sont de cette forme SECXX_TYP_REF_OBJET_DATE
au depart j'aivais ca:
grace a UN critere je pouvais avoir les fichiers correspondant au critere donné...
Code : PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
<head>
</head>
<body>
<?php
if (isset($_POST['section'])) // Si la variable existe
{ $posi = $_POST['position'] - 1;
$dossier = 'Courrier/' ;
$list = scandir($dossier); //scan le dossier Courrier
foreach ($list as $file) //identique a for mais specifié au tableau
{ $divfichier = explode('_',$file);
if(preg_match('`'.$_POST['section'].'`', $divfichier[$posi])){
echo '<a href="'.$file.'">'.$file.'</a><br/>';
}
}
}
else // La variable n'existe pas encore
{
$section = ""; // On crée une variable $section vide
}
?>
Recherche du fichier:
<form action= "fichier.php" method="post">
<p>
<select name = "position"/><option value="1">Corps administratif du courrier</option><option value="2">Type de courrier</option><option value="3">Numero du courrier</option><option value="4">Objet du courrier</option><option value="5">Date du courrirer</option></select><br/>
<input type ="text" name= "section" />
<input type ="submit" value ="Validez" />
</p>
</form>
</body>
</html>
mais j'aimerais que grace AUX criteres donnés avoir le fichier voulu c'est a dire que je veux renseigner plusieurs criteres a la fois, soit un, 2, 3 ou 4 criteres choisi...J'ai ecrit ce code mais je suis pas satisfaite parce que j'ai du passer par les options (qui ne serve dans ce cas a rien) pour avoir ce que je veux...j'aimerais donc les enlever...comme vous l'aurez remarqué je suis noviste en php
merci a vous!!!
Code : PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
<head>
</head>
<body>
<?php
if ((isset($_POST['section'])) and (isset($_POST['type']))) // Si la variable existe
{ $posi1 = $_POST['position1'] - 1;
$posi2 = $_POST['position2'] - 1;
$posi3 = $_POST['position3'] - 1;
$posi4 = $_POST['position4'] - 1;
$posi5 = $_POST['position5'] - 1;
$dossier = 'Courrier/' ;
$list = scandir($dossier); //scan le dossier Courrier
foreach ($list as $file) //identique a for mais specifié au tableau
{ $divfichier = explode('_',$file);
if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND
(preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND
(preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND
(preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND
(preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))
{
echo '<a href="'.$file.'">'.$file.'</a><br/>';
}
}
}
else // La variable n'existe pas encore
{
$section = ""; // On crée une variable $section vide
}
?>
<p>
<form action= "new 2.php" method="post">
<p>
<select name = "position1"/><option value="1">Corps administratif du courrier</option> </select
<select name = "position2"/><option value="2">Type de courrier</option</select>
<select name = "position3"/><option value="3">Reference du courrier</option></select>
<select name = "position4"/><option value="4">Objet du courrier</option</select>
<select name = "position5"/><option value="5">Date du Courrier</option></select>
</p>
Recherche du fichier :
<p>
<p> Corps administratif: <input type ="text" name= "section"/> </P>
<p> Type de courrier: <input type ="text" name= "type"/> </p>
<p> Reference du courrier: <input type ="text" name= "reference"/> </p>
<p> Objet du courier: <input type ="text" name= "objet"/> </p>
<p> Date du courier: <input type ="text" name= "date"/> </p>
<input type ="submit" value ="Validez" />
</p>
</p>
</form>
</body>
</html>