Rechercher : dans
Par :

Comparaion de string en php

Dernière réponse le 10 jan 2003 à 15:45:35 Guillaume Simon, le 10 jan 2003 à 10:31:48 
 Signaler ce message aux modérateurs

J'aimerais comparer deux chaines de caractères pour savoir si la première contient un bout de la deuxième .. Je m'explique

J'ai la première chaine qui ressemble à ca :

Infos/technique/OS/Windows/Windows 98/

La deuxième ressemble à ca :

Windows 98

J'aimerais simplement savoir comment tester que le "Windows 98" est bien contenu dans la première chaine ?

Merci d'avance

Meilleures réponses pour « Comparaion de string en php » dans :
Supprimer les accents avec PHP VoirPour un tas de raisons, il est parfois utile de convertir un texte accentué en un texte sans accents. Voici une fonction permettant de transformer très simplement la quasi-totalité des accents en leur équivalent non-accentués : function...
Les guillemets, apostrophes et les chaînes VoirComment jouer avec les guillemets et les apostrophes dans les chaînes 1. Préambule 2. Éviter une coupure dans la chaîne 3. Ajouter un guillemet dans la chaîne 3.1 Avec l'apostrophe 3.2 Avec l'ASCII 3.3 Directement 3.3.1 Méthode...
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en php...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
Structure d'un document XML VoirQu'est-ce que le XML? La norme XML en tant que telle doit être vue comme un outil permettant de définir un langage (on dit alors qu'il s'agit d'un métalangage), permettant de créer des documents structurés à l'aide de balises. Une balise est une...
PHP - Les opérateurs VoirQu'est-ce qu'un opérateur? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, ... On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...

1

kalamit, le 10 jan 2003 à 10:37:39

Salut,
c'est faisable avec la fonction reguliere standard ereg()

$test = ereg ( "Infos/technique/OS/Windows/Windows 98/ ","Windows 98 ")

Dans ce cas la, $test = true.

Tu auras plus d'infos ici: http://www.php.net/manual/fr/function.ereg.php

Il existe un paquet de fonction pour manipuler les chaines, ereg en est une.
A+ !

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

2

Guillaume, le 10 jan 2003 à 11:00:02

Merci beaucoup ..

Bon maintenant qu'on est lancé .. encore une petite question .. j'aimerais sortir le nom du répertoire ou le fichier est posé ..

J'ai réussi à avoir le chemin complet sur le disque mais j'aimerais juste le nom du répertoire (".") ... Merci

Répondre à Guillaume

3

kalamit, le 10 jan 2003 à 11:08:22

Re-

getcwd() te retourne le dossier courant. Je sais pas si c'est ce que tu cherches...
http://www.php.net/manual/fr/function.getcwd.php
A+!

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

4

Guillaume Simon, le 10 jan 2003 à 11:11:52

La commande me retourne tout le chemin .. moi je veux juste le nom du répertoire ...

Répondre à Guillaume Simon

5

kalamit, le 10 jan 2003 à 11:22:17

Bah après il te suffit de découper la chaine à partir du dernier "\" que tu trouves...
Faisable avec explode(), http://www.php.net/manual/fr/function.explode.php
J'ai pas trouver de fonction qui te renvoie le nom du repertoire courant...

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

6

Guillaume Simon, le 10 jan 2003 à 11:25:28

Bon vu que j'ai qqn qui m'écrit mon code .. j'ose encore te poser une question ... j'ai pas trop envie de réfléchir un max .. comment je fais pour prendre le dernier morceaux de mon url .. style que le nom du répertoire .. Est qu'on peut directement avoir accès à la derniere case du tableau créé par explode() ?

Merci encore

Répondre à Guillaume Simon

7

kalamit, le 10 jan 2003 à 11:32:39

Cherche un peu avant ! :o))))
C'est pas bien dur...

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

8

Guillaume, le 10 jan 2003 à 11:49:06

$champs = explode ("\", $Dir);

Il comprends rien PHP a cause du \ ... Comment lui dire qu'il doit quand meme travailler avec ce caractère ?

Fait un str_replace ? Il fait aussi une erreur ...

Répondre à Guillaume

9

kalamit, le 10 jan 2003 à 11:56:53

Heu, ca veut dire quoi, "il comprends rien PHP" ? C'est quoi ton erreur ? J'ai rien pour tester, la...

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

10

Guillaume, le 10 jan 2003 à 11:58:56

Parse error: parse error, unexpected T_VARIABLE in c:\program files\easyphp\www\simnet\pages\administration\technique\os\w­indows\listedir.php on line 17

Simplement quand je fais :

$champs = explode ("\", $Dir);

Dès que je met le "\", il fait une erreur car il le prends comme caractères spécial ...

Répondre à Guillaume

11

Guillaume, le 10 jan 2003 à 12:06:21

<?

$Dir = getcwd();
$Dir = htmlspecialchars($Dir);

$Dir = str_replace("\\", "/", $Dir);

$champs = explode ("/", $Dir);
echo "$Dir";
$boucle=0;
while ($boucle < sizeof($champs)-1) {

$boucle++;
}

?>

C'est tout bon

Répondre à Guillaume

15

Bobinours, le 10 jan 2003 à 13:53:29

:oD

Je crois pouvoir dire que c'est inutile ;-)

$champs = explode ("\\", $Dir);

Ceci suffisait.

-= Bobinours - http://bobin.underlands.org =-

Répondre à Bobinours

16

Guillaume, le 10 jan 2003 à 13:56:29

Effectivement

J'ai essayé 30000 fonctions dans ce truc et certains font des trucs à doubles ..
On va faire de l'ordre :-)

Répondre à Guillaume

17

kalamit, le 10 jan 2003 à 13:57:10

C'est vrai que c'est tordu et pas top optimisé... Mais si ca marche... :o)

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

20

Bobinours, le 10 jan 2003 à 14:45:33

Au fait, as-tu compris pourquoi il fallait mettre \\ au lieu de \ ?

-= Bobinours - http://bobin.underlands.org =-

Répondre à Bobinours

24

kalamit, le 10 jan 2003 à 15:14:17

Bah je dirais que c'est un caractere reservé... C'est comme en C qd tu veux mettre des quotes dans une chaine de caracteres, tu en mets deux de suite...
Enfin, je crois...

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

30

Bobinours, le 10 jan 2003 à 15:40:51

Je pense que vous avez compris tous les deux.

En PHP comme avec de nombreux autres langages, une chaine de caractères est délimité par "..." ou '...' et peuvent contenir des caractère particuliers qui seront interprétés à l'intérieur de la chaînes.
Exemple : une chaîne entre guillemet à l'intérieur de laquelle on souhaite afficher un guillemet sera impossible car le second guillemet fermera la chaîne : "C'est super "CCM" ! ".
Ici y y a la première chaine : "C'est super " puis une instruction CCM inconnue donc erreur.

Pour parait à cela, il faut échapper le caractère avec le caractère d'échappement '\' (backslash) . Ainsi, le caractère suivant un backslash n'est pas interprété et est considéré comme un caractère texte tout à fait normal.

On peux également y insérer des variable PHP (attention, pas de tableau) : "C'est super $site".
Ici $site est une variable qu'on aura préalablement affectée avec la chaîne "CCM".
En revenche, si je désire écrire "$site" en toutes lettres, il me faudra échapper le '$' (dollars).
print "\$site = $site"; ---affichera---> $site = CCM

Comme pour les autres caractères, le backslash '\' peut être échapper avec un autre backslash :o)

-= Bobinours - http://bobin.underlands.org =-

Répondre à Bobinours

12

kalamit, le 10 jan 2003 à 13:10:39

Et ca marche nickel ? Tout va bien alors !
N'hesites pas si tu as d'autres problemes. Je peux t'aiguiller te mettre sur la voie, mais j'evite de te donner des réponses toutes faites... Tu ne progresserais pas. (Et je suis en vacances la semaine prochaine :o)) )

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

13

Guillaume, le 10 jan 2003 à 13:37:05

Je viens de programmer un BackOffice complet en PHP avec gestion d'arborescence etc ... C'est un énorme projet et malheureusement certaines fonctions ne sont pas encore dans ma tete .. heureusement que certains forums comme celui-ci existe avec des réponses précises et pertinentes ...

Répondre à Guillaume

14

Guillaume, le 10 jan 2003 à 13:44:09

Si qqn a encore une solution ..

ma fonction ereg ne retourne ni true ni false .. elle ne retourne rien et ne fait pas d'erreur .. Je pige vraiment rien

Répondre à Guillaume

18

kalamit, le 10 jan 2003 à 14:01:48

$test = ereg (....,....);
echo "$test";

Ca te retourne rien, ca ?

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

19

Guillaume, le 10 jan 2003 à 14:14:41

Je m'étais planté .. j'avais inversé les deux string .. ca marche maintenant .. enfin :-) .. Enfin me reste toute la gestion derrière à programmer mais le gros ca marche ..

Répondre à Guillaume

21

Guillaume, le 10 jan 2003 à 15:02:02

Bobinours .. C'est à cause que l'antislash est caractères fonctionnel sous php non ?

Et encore une kestion .. voici mon code :

$rep=opendir($dossiercours);
$compteur=0;
while ($file = readdir($rep)) {
if($file != '..' && $file !='.' && $file !=''){
if (is_dir($file)){
$compteur++;

if ($compteur%3!=0):
{
?>

<td width="33%" height="30" valign="top">
<table border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3" height="37">
<tr>
<td width="101%" bgcolor="#482B7F" height="13">
<p align="center"><b><font face="Verdana" size="1" color="#FFFFFF">
<?echo("$file");?></font></b></td>
</tr>

<?

include "connectbd.php";
$sql = "select * from ".$prefixe."_dossiers order by nomdossier";
$resultat = mysql_query($sql);
while($ligne = mysql_fetch_array($resultat)){
$id_dossier = $ligne["id_dossier"];
$nomdossier = $ligne["nomdossier"];
$descriptiondossier = $ligne["descriptiondossier"];
$liendossier = $ligne["liendossier"];
$test = eregi("$file",$liendossier);
if ($test == "1"):
{
?>
<tr>
<td height="12"><font face="Verdana" size="1"> -<?echo("<a \"text-decoration: none\" href=%22index.php?Page=administration/$liendossier//"> $nomdossier");?></font></td>
</tr>
<?
}
endif;
}
?>


Sur l'opendir, il me fait aucune erreur, ce qui veut dire qu'il arrive bien à ouvrir le dossier .. ensuite je lui demande de me lister les répertoires et de me les afficher dans un tableau .. mais rien n'apparait .. si je place le code dans le répertoire en cours et que je fais opendir('.'); ca marche .. mais j'aimerais faire un opendir d'un dossier distant et lister son contenu ...

Répondre à Guillaume

23

kalamit, le 10 jan 2003 à 15:13:11

Qu'est ce qu'il y a comme valeur dans ta variable $dossiercours ? Tu dois mettre le path de ton repertoire depuis la racine du site. (enfin il me semble...)

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

28

Bobinours, le 10 jan 2003 à 15:29:17

Euh... Je sais pas comment ça se fait que tu n'aies pas d'erreur, parce que dans ton code il n'y a presque aucune fermeture d'accolade ouvrante...

-= Bobinours - http://bobin.underlands.org =-

Répondre à Bobinours

22

Guillaume, le 10 jan 2003 à 15:11:31

Voila qu'il me sort un dossier maintenant .. serait-ce une kestion de droit ? J'ai XP et j'arrive pas à modifier les droits sur les fichiers ... Vous avez une idée ?!?!

Répondre à Guillaume

25

kalamit, le 10 jan 2003 à 15:15:51

Il y aurait un probleme de droit si tu ecrivais quelque chose, mais comme tu ne fais que lire... Ca doit pas etre ca...
A mon avis, la valeur passée à Opendir n'est pas bonne...

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

26

Guillaume, le 10 jan 2003 à 15:18:01

Pages/administration/technique/OS/Windows/

Quand je mets ca il devrait me sortir les dossiers que j'ai dans le répertoire Windows mais non il sort rien du tout ..

tandis que :

Pages/administration/

Il me sort un dossier "images" qui est bien et bel existant mais le dossier administration contient 6 autres dossiers qui ne sortent pas .. Je comprends vraiment rien ...

Répondre à Guillaume

27

kalamit, le 10 jan 2003 à 15:28:53

C'est un peu galere, j'ai rien pour tester. Tu es pas trop loin de la solution, je vais regarder ton code en détail.

Kalamit,
Je ponce donc j'essuie

Répondre à kalamit

29

Guillaume, le 10 jan 2003 à 15:31:53

Veux tu le code en entier ? Parce que la il n'est que partiel ..

C'est d'ailleurs pour ca qu'il n'y a pas toutes les accolades qui sont fermées. . mon code est parfaitement juste et fonctionne .. il y a un problème au niveau de la variable dossiercours et de la fonction opendir ...

Répondre à Guillaume

31

Bobinours, le 10 jan 2003 à 15:42:30

Oui, envoie.

-= Bobinours - http://bobin.underlands.org =-

Répondre à Bobinours

32

 Guillaume, le 10 jan 2003 à 15:45:35

Voila le fichier listedir.php avec la déclaration de variable au début .. avant j'utilisais pas de variable et je mettais "." pour le dossier ca marchait .. Maintenant quand je rentre un dossier, ca marche desfois à moitié ...

-----------SIMNET SA WEB SOURCE WWW.SIMNETSA.CH---------

<html>

<head>

</head>

<body>
<?


//SOURCE DU PROBLEME EST ICI
$dossiercours = "../Windows";

$Dir = htmlspecialchars($dossiercours);

$Dir = str_replace("\\", "/", $Dir);

$champs = explode ("/", $Dir);

$boucle=0;
while ($boucle < sizeof($champs)-1) {

$boucle++;
}
$lienrel = $champs[$boucle];
$champs[$boucle] = ucfirst( strtolower($champs[$boucle]) ) ;
?>

<div align="center">
<center>
<table border="0" cellpadding="3" cellspacing="3" style="border-collapse: collapse" bordercolor="#111111" width="84%" id="AutoNumber1">
<tr>
<td width="164">
<p align="left">
<img border="0" src="images/Dossier_Petit.jpg" width="125" height="68"></td>
<td width="76%" valign="bottom"><b>
<font face="Verdana" size="5" color="#000080"><?echo $champs[$boucle];?></font></b></td>
</tr>
<tr>
<td width="100%" colspan="2" style="border-left-width: 1; border-right-width: 1; border-top: 1px solid #000080; border-bottom-width: 1"> </td>
</tr>
</table>
</center>
</div>
<p> </p>
<div align="center">
<center>
<table border="0" cellpadding="3" cellspacing="3" style="border-collapse: collapse" bordercolor="#111111" width="85%" id="AutoNumber1" height="98">
<tr>
<td width="33%" height="30" valign="top">
<table border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="#111111" width="101%" id="AutoNumber2" height="36">
<tr>
<td width="101%" bgcolor="#482B7F" height="13">
<p align="center"><b><font face="Verdana" size="1" color="#FFFFFF">
<?echo $champs[$boucle];?> (Général)</font></b></td>
</tr>

<?
include "connectbd.php";
$sql = "select * from ".$prefixe."_dossiers order by nomdossier";
$resultat = mysql_query($sql);
while($ligne = mysql_fetch_array($resultat)){
$id_dossier = $ligne["id_dossier"];
$nomdossier = $ligne["nomdossier"];
$descriptiondossier = $ligne["descriptiondossier"];
$liendossier = $ligne["liendossier"];

$champs2 = explode ("/", $liendossier);

$boucle2=0;
while ($boucle2 < sizeof($champs2)-1)
{
$boucle2++;
}

$lien = $lienrel."/".$champs2[$boucle2];


$test = eregi("$lien",$liendossier);
if ($test == "1"):
{
?>
<tr>
<td height="12"><font face="Verdana" size="1"> -<?echo("<a style=\"text-decoration: none\" href=%22index.php?Page=administration/$liendossier//"> $nomdossier");?></font></td>
</tr>
<?
}
endif;
}
?>

</table>
</td>

<?
$rep=opendir($dossiercours);
$compteur=0;
while ($file = readdir($rep)) {
if($file != '..' && $file !='.' && $file !=''){
if (is_dir($file)){
$compteur++;


if ($compteur%3!=0):
{
?>

<td width="33%" height="30" valign="top">
<table border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3" height="37">
<tr>
<td width="101%" bgcolor="#482B7F" height="13">
<p align="center"><b><font face="Verdana" size="1" color="#FFFFFF">
<?echo("$file");?></font></b></td>
</tr>

<?

include "connectbd.php";
$sql = "select * from ".$prefixe."_dossiers order by nomdossier";
$resultat = mysql_query($sql);
while($ligne = mysql_fetch_array($resultat)){
$id_dossier = $ligne["id_dossier"];
$nomdossier = $ligne["nomdossier"];
$descriptiondossier = $ligne["descriptiondossier"];
$liendossier = $ligne["liendossier"];
$test = eregi("$file",$liendossier);
if ($test == "1"):
{
?>
<tr>
<td height="12"><font face="Verdana" size="1"> -<?echo("<a style=\"text-decoration: none\" href=%22index.php?Page=administration/$liendossier//"> $nomdossier");?></font></td>
</tr>
<?
}
endif;
}
?>
</table>
</td>

<?
}
else:
{
?>

</tr>
<tr>
<td width="33%" height="30" valign="top">
<table border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="#111111" width="101%" id="AutoNumber5" height="36">
<tr>
<td width="101%" bgcolor="#482B7F" height="13">
<p align="center"><b><font face="Verdana" size="1" color="#FFFFFF">
<?echo("$file");?></font></b></td>
</tr>
<?

include "connectbd.php";
$sql = "select * from ".$prefixe."_dossiers order by nomdossier";
$resultat = mysql_query($sql);
while($ligne = mysql_fetch_array($resultat)){
$id_dossier = $ligne["id_dossier"];
$nomdossier = $ligne["nomdossier"];
$descriptiondossier = $ligne["descriptiondossier"];
$liendossier = $ligne["liendossier"];
$test = eregi("$file",$liendossier);
if ($test == "1"):
{
?>
<tr>
<td height="12"><font face="Verdana" size="1"> -<?echo("<a style=\"text-decoration: none\" href=%22index.php?Page=administration/$liendossier//"> $nomdossier");?></font></td>
</tr>
<?
}
endif;
}
?>

</table>
</td>
<?
}
endif;


}
}
}
closedir($rep);
clearstatcache();
?>


<td width="33%" height="30" valign="top"> </td>
</tr>
</table>
</center>
</div>


</body>

</html>

-----SIMNET SA AUTORISE LA MODIFICATION ET REPRISE------

Répondre à Guillaume