PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-11-2009 15:28:22

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Moteur de recherches multiligne, sos

Bonjour a tous,

je me suis mis au php que récemment et j'avoue que je me suis embrouillé , je souhaite faire un site analyseur de rapports en sécurité informatique comme celui ci qui n'est plus a jour :
http://www.hijackthis.de/fr
exemple de ligne du rapport : O4 - HKLM\..\Run: [QuickTime Task] "C:\Program Files\QuickTime\QTTask.exe" -atboottime

l'utilisateur envoie via un formulaire son rapport et en comparant avec ma BDD , ca affiche un X si la ligne est présente ou un V si la ligne n'y est pas , j'espere que c'est clair :

mais mon code ne fonctionne pas, erreurs ou ecran blanc !

quelqu'un aurait il la gentillesse de m'aider ? au cas ou , merci d'avance

le form :

<br>
<div style="text-align: center;"><form action="cible.php" method="post"><textarea name="rapport" cols="100" rows="20">Collez ici
votre rapport
</textarea><input value="Analyser" type="submit">

la cible:

<?php
mysql_connect(localhost,$id,$mdp);
mysql_select_db($ma table);

if(get_magic_quotes_gpc()) {
$_POST = array_map('stripslashes', $_POST);
$_GET = array_map('stripslashes', $_GET);
$_COOKIE = array_map('stripslashes', $_COOKIE);
}

$_POST['rapport'] = 'rapport';

$rapport = trim($_POST['rapport']);
$lignes = explode("\n",$rapport);

foreach($lignes as $ligne) {
$sql = 'SELECT autorise FROM test WHERE ligne = "'.$ligne.'"';
$req = mysql_query($sql) or die('Erreur dans <strong>'.$sql.'</strong> :<br/>'.mysql_error());
$nb = mysql_num_rows ($req);

if($nb == 0) {
    echo "V";
} else {
    $result = mysql_fetch_assoc($req);
    $autorise = $result['autorise'];
    if($autorise == true) {
        echo "$autorise !<br />";
    } else {
        echo "V<br />";
    }
}
}
?>

mais je crois que j'ai fais des choses bizarres, encore merci infiniment pour votre aide, ca fait un mois que j'épluche les forums et les tutos mais je crois que je ne suis pas doué pour ca ...

Hors ligne

#2 29-11-2009 20:55:51

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos

Premièrement tu as un soucis de variable :
mysql_select_db($ma table);
Il ne faut pas d'espaces.

Ensuite quel est l'intérêt de remplir la variable $_POST ? Tu la récupères d'un formulaire mais tu ne la remplis pas toi même !
Utilises des variables normales pour ce que tu veux faire.

Ensuite ton foreach ne fait en fait qu'une seule itération vu ton code.
Tu remplis manuellement la variable $_POST['rapport'] avec la valeur 'rapport', donc ton explode ne fait absolument rien.

Hors ligne

#3 30-11-2009 15:00:06

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

Bonjour Xtg et merci pour votre réponse,

j'ai donc rectifié ce que j'ai pu mais je ne comprends pas pour le foreach

apparemment , j'ai aussi une erreur :
PHP Warning:  mysql_num_rows(): supplied argument is not a valid MySQL result resource ,

j'ai beau lire et relire les notes, je ne vois pas pourquoi , voici ou j'en suis :

 <?php
mysql_connect(localhost,$id,$mdp);
 mysql_select_db($ma_table);
if(get_magic_quotes_gpc()) {
      $_POST = array_map('stripslashes', $_POST);
      $_GET = array_map('stripslashes', $_GET);
      $_COOKIE = array_map('stripslashes', $_COOKIE);
      }
$_POST['rapport'];

$rapport = trim($_POST['rapport']);
$lignes = explode("\n",$rapport);
foreach($lignes as $ligne) {
      $sql = 'SELECT autorise FROM test WHERE ligne = "'.$ligne.'"';
      $req = mysql_query($sql) or die('Erreur dans <strong>'.$sql.'</strong> :<br/>'.mysql_error());
      $nb = mysql_num_rows($req);
      if($nb == 0) {
          echo "V";
      } else {
          $result = mysql_fetch_assoc($req);
          $autorise = $result['autorise'];
          if($autorise == true) {
              echo "$autorise !<br />";
          } else {
              echo "V<br />";
          }
      }
      }

en plus ce qui est pénible, c'est que les solutions varient d'un site ou d'un tuto a un autre, difficile de s'y retrouver, je vais continuer mes recherches en esperant compter un peu sur votre aide, j'aime bien apprendre et appliquer mais la j'avoue que le codage n'est pas si facile ...

merci encore pour votre aide

Dernière modification par debutant (30-11-2009 15:12:50)

Hors ligne

#4 30-11-2009 15:19:04

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

Saluton,
On peut savoir à quoi sert la ligne 9 ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 30-11-2009 15:57:22

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

Bonjour,

a la formulation de la question et en y reflechissant un peu en épluchant le code, je dirais " a rien " !

je pars du principe que tout le monde a commencé un jour, et quand je dis : je debute en php (en codage tout court d'ailleurs), il n'y a rien d'imagé, on m'a même fait comprendre quand j'ai soumis l'idée que, sans aide , ce serait impossible, mais j'aime bien les défis (même si celui la est corsé...)

je sais que vous n'êtes pas partisans de fournir des codes préremplis ... et ce n'est pas ce que je veux mais plutôt des orientations

Hors ligne

#6 30-11-2009 16:07:44

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Moteur de recherches multiligne, sos

MK->
tu es bien curieux roll:D
a++

Hors ligne

#7 30-11-2009 16:20:17

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

C'est l'indiscrétion qui est un défaut, la curiosité est une de mes nombreuses qualités.:rolleyes:

Bon, et avant de parcourir $ligne avec foreach, si tu nous en affichais le contenu

<pre><?php var_dump($lignes); ?></pre>

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 30-11-2009 16:40:55

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

je viens de lire 4 ou 5 articles pour comprendre roll , donc si j'ai bien lu, il devrait se trouver la :


       <?php
      mysql_connect(localhost,$id,$mdp);
       mysql_select_db($ma_table);
      if(get_magic_quotes_gpc()) {
            $_POST = array_map('stripslashes', $_POST);
            $_GET = array_map('stripslashes', $_GET);
            $_COOKIE = array_map('stripslashes', $_COOKIE);
            }
      $rapport = trim($_POST['rapport']);
      $lignes = explode("\n",$rapport);
      var_dump($lignes);
      foreach($lignes as $ligne) {
            $sql = 'SELECT autorise FROM test WHERE ligne = "'.$ligne.'"';
            $req = mysql_query($sql) or die('Erreur dans <strong>'.$sql.'</strong> :<br/>'.mysql_error());
            $nb = mysql_num_rows($req);
            if($nb == 0) {
                echo "V";
            } else {
                $result = mysql_fetch_assoc($req);
                $autorise = $result['autorise'];
                if($autorise == true) {
                    echo "$autorise !<br />";
                } else {
                    echo "V<br />";
                }
            }
            }

merci smile

Hors ligne

#9 30-11-2009 16:50:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

Oui mais ce qui m'intéressait c'était d'en voir le résultat affiché dans le navigateur


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 30-11-2009 17:03:37

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

Pardon hmm

array(2) { [0]=>  string(41) "Logfile of Trend Micro HijackThis v2.0.2 " [1]=>  string(37) "Scan saved at 17:39:06, on 27/11/2009" } Erreur dans SELECT autorise FROM test WHERE ligne = "Logfile of Trend Micro HijackThis v2.0.2 " :
Access denied for user 'xxx'@'localhost' (using password: NO)

Hors ligne

#11 30-11-2009 17:14:56

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

Tiens donc, un die(mysql_error()) !!!


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 30-11-2009 17:16:20

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

arffffffff quelle andouille, je venais éditer mais tu as répondu plus vite que moi, j'ai copié/collé le code sans changer les id ^^, je reviens

merci encore du temps accordé

Hors ligne

#13 30-11-2009 17:24:26

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

j'ai essayé avec mon pseudo (absent de ma table évidemment) et un fichier (présent dans la table)

array(2) { [0]=>  string(9) "debutant " [1]=>  string(8) "ogopxhpq" } VV

maintenant, j'ai un problème à partir de la condition , pas étonnant, je ne le comprends pas moi même tongue

Mais si le dessus fonctionne, ca me rassure un peu, je suis pas si nul que ca smile

Hors ligne

#14 30-11-2009 19:47:10

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos


if($nb == 0) {
             echo "V";
            } else {
                $result = mysql_fetch_assoc($req);
                $autorise = $result['autorise'];
                if($autorise == true) {
                    echo "$autorise !<br />";
                } else {
                    echo "V<br />";
                }
            }

Tu parles de ces conditions ?
Le premier if permet de savoir si la requête a renvoyé un résultat ou non, si ce n'est pas le cas on affiche "V".
Sinon on récupère le contenu du résultat de la requête et on teste le champ autorise.
S'il est égal à true on affiche... Euh rien si je ne m'abuse car un boolean ne peut pas s'afficher.
Et sinon on affiche "V".

Hors ligne

#15 30-11-2009 22:38:57

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

merci pour tout pour votre aide tous les deux smile

au depart mon idée n'était pas cette fin, je voulais comparer toujours le même rapport dans une table qui contient 6 champs et afficher le titre du champs si une ligne était présente, mais on m'a dit que c'etait impossible, comme vous avez l'air d'être incollables, vous me confirmerez ou pas  tongue

j'ai donc une table contenant 6 champs de marques de voitures (contenant chacun toute la liste de leur propres noms), nommons les renault, peugeot, citroen, lada, mercedes et bmw.
ma table est comme ceci :id , marque(renault...), leurs_noms (clio, r19, laguna...)

L'internaute poste donc un rapport contenant une cinquantaine de lignes ,
1 ligne contient l"expression "marc a une clio" (se trouvant dans le champ renault)
1 ligne contient l'expression "paul a une 407"(se trouvant dans le champ peugeot)

(les 48 autres lignes ne se trouvent nullepart donc je n'affiche rien) par contre je voudrais que pour les 2 lignes ci dessus on affiche :

marc a une clio  : Champ /!\ RENAULT
paul a une 407  : Champs /!\ PEUGEOT

est ce possible , pour vous montrer que je 'essaie de reflechir, je penserais a quelquechose type :

   1.
             <?php
   2.
            mysql_connect(localhost,$id,$mdp);
   3.
             mysql_select_db($ma_base);
   4.
            if(get_magic_quotes_gpc()) {
   5.
                  $_POST = array_map('stripslashes', $_POST);
   6.
                  $_GET = array_map('stripslashes', $_GET);
   7.
                  $_COOKIE = array_map('stripslashes', $_COOKIE);
   8.
                  }
   9.
            $rapport = trim($_POST['rapport']);
  10.
            $lignes = explode("\n",$rapport);
  11.
            var_dump($lignes);
  12.
            foreach($lignes as $ligne) {
  13.
                  $sql = 'SELECT leurs_noms FROM ma_table WHERE ligne = "'.$ligne.'"';
  14.
                  $req = mysql_query($sql) or die('Erreur dans <strong>'.$sql.'</strong> :<br/>'.mysql_error());
  15.
                  $nb = mysql_num_rows($req);
  16.
                  if($nb == 0) {  // pas de resultats
  17.
                      echo "aucun résultat"; :: forcement
  18.
                  } else {
  19.
                      $result = mysql_fetch_assoc($req);
  20.
                      $leurs_noms = $result['leurs_noms']; // clio, 407
  21.
                      if($leurs_noms == true) { // clio et 407 font partie de contenu de marque
  22.
                          echo "$marque !<br />"; // renault peugeot
  23.
                      } else {
  24.
                          echo "V<br />"; // bah la je sais pas car je cite : Euh rien si je ne m'abuse car un boolean ne peut pas s'afficher.
  25.
                      }
  26.
                  }
  27.
                  }
 

soyez sympas, vous moquez pas, au moins, j'essaie smile

encore MERCI de m'aider et bonne soirée

Hors ligne

#16 01-12-2009 09:12:37

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos

Je ne suis pas sûr de comprendre l'organisation de ta table sql donc je t'en propose une qui te servira dans ce que tu veux entreprendre :

Marque
id | nom
1 | Renault
2 | Peugeot

Voiture
id | marque | nom
1 | 2 | 407
2 | 1 | Clio
3 | 1 | Laguna

Donc le but pour trouver si la voiture existe et afficher sa marque est de faire une requête de ce genre :
SELECT v.nom, m.nom FROM voiture as v, marque as m WHERE v.marque = m.id AND v.nom = TON_CHAMP_A_TROUVER

Cette requête permet de renvoyer la marque et le nom d'une voiture lorsque tu lui envoies le nom de la voiture.

Donc pour utiliser cette requête à partir de ton fichier de rapport il te faut récupérer que le nom de la voiture.
Si les phrases sont toujours de la même structure tu peux faire comme suit :

1 ligne contient l"expression "marc a une clio" (se trouvant dans le champ renault)
1 ligne contient l'expression "paul a une 407"(se trouvant dans le champ peugeot)

$tableau = explode("et",$rapport_ligne); //On coupe la chaîne(une ligne de notre rapport) en deux, le reste à gauche est le nom de notre voiture
$nom_voiture = trim($tableau[1]); //On utilise la partie de gauche qui a été récupérée et on enlève les possibles espaces blancs autour de la chaîne
 

Tu n'as plus qu'à utiliser $nom_voiture dans la requête.

Et tes conditions du bas reviennent donc à simplement compter le nombre de résultat (première partie de ta condition) et le else se simplifie, car tu auras forcement le nom de la marque puisque la requête a renvoyé un résultat.

Hors ligne

#17 01-12-2009 10:12:00

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

Juste un rappel,
Ça fait 17 ans (1992) que la norme SQL2 recommande de séparer les conditions de jointures des conditions de filtre dans les requêtes :

SELECT v.nom, m.nom
FROM voiture AS v
INNER JOIN marque AS m ON v.marque = m.id
WHERE  v.nom = TON_CHAMP_A_TROUVER

Il serait temps d'y penser


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#18 01-12-2009 11:10:58

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos

Il faudrait que je me remette à jour oui... neutral
(ou plutôt que j'apprenne à programmer correctement en SQL vu qu'en 1992 je ne savais même pas ce qu'était un ordinateur)

Hors ligne

#19 01-12-2009 13:34:19

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

bonjour et merci pour ces reponses,

vous chamaillez pas pour moi tongue

je vais tester ca et vous tiens au courant

question d'ordre général :  comme tu l'expliques Kris, les "normes" changent, quel en est la raison ?
seulement histoire de coder plus proprement ou est ce plutot pour contrer des failles de sécurité ?

Hors ligne

#20 01-12-2009 14:12:27

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Moteur de recherches multiligne, sos

debutant a écrit :

question d'ordre général :  comme tu l'expliques Kris, les "normes" changent, quel en est la raison ?
seulement histoire de coder plus proprement ou est ce plutôt pour contrer des failles de sécurité ?

Pour ce qui concerne la syntaxe des jointures dans les requêtes c'est plutôt pour permettre de réaliser certaines opérations d'algèbre relationnelle.
Il faut savoir aussi que la plupart des SGBDR optimise l'exécution des requêtes et que l'écriture de celles-ci en respectant les normes accélère leur optimisation, donc leur exécution.
Enfin, scinder les conditions de jointure et de filtrage est plus lisible et maintenable.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#21 01-12-2009 15:12:05

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

bon , l'exemple de Marc et sa clio, c'était pour vous simplifier la compréhension, vous l'aurez compris tongue

afin de mieux me comprendre , le but de mon site est d'analyser des rapport de différents outils de securite informatique et d'informer s'il y' a un/des fichier(s) néfaste(s), et quel outil utiliser pour supprimer le/les infections.

Cet outil (s'il fonctionne correctement) sera amené à être utilisé par une partie de la communauté anti-malware ( qui aide les internautes infectés sur différents forums)
comme vous, vous le faites avec le codage smile

voici un type de rapport que je souhaite comparer a ma bdd : (les liens sont archivés ==> rien a craindre)

http://www.cijoint.fr/cjlink.php?file=c … 27r7EL.txt

et voici les captures écran des tables que vous m'avez suggéré :

http://www.cijoint.fr/cjlink.php?file=c … QXS1oU.jpg
http://www.cijoint.fr/cjlink.php?file=c … 3ui4YH.jpg

donc prenons un exemple : l'user poste son rapport dans lequel se trouve par exemple cette ligne :

O3 - Toolbar: Ask Toolbar - {FE063DB9-4EC0-403e-8DD8-394C54984B2C} - C:\Program Files\AskTBar\bar\1.bin\ASKTBAR.DLL

Ask est un moteur de recherche considéré comme néfaste, il est donc présent dans au moins 2 des outils de securité présents dans ma bdd : ADRemover et ToolbarSD
(dans le champs contenu de la table changelog)

le but est donc d'afficher la ligne ci dessus avec comme résultat : /!\ fichier néfaste, pour le supprimer : ADRemover ou ToolbarSD

voila, vous savez tout, j'ai été long, désolé pour la lecture mais je voulais que vous ayez toutes les cartes pour bien comprendre ... surtout que j'imagine que ce type de code ne doit pas être tres courant smile

et voici donc mon code remis a jour : (j'ai testé : affiche NULL et error dans argument foreach ligne 25) (je ne révais pas non plus du premier coup tongue)

 <?php

            mysql_connect(localhost,id,mdp);

             mysql_select_db(base);

            if(get_magic_quotes_gpc()) {

                  $_POST = array_map('stripslashes', $_POST);

                  $_GET = array_map('stripslashes', $_GET);

                  $_COOKIE = array_map('stripslashes', $_COOKIE);

                  }

            $rapport = trim($_POST['rapport']);

            $tableau = explode("et",$rapport_ligne);

      $outil = trim($tableau[1]);

            var_dump($lignes);

            foreach($lignes as $ligne) {

       
         $sql= 'SELECT v.outil, m.outil
   
         FROM changelog AS v
 
         INNER JOIN outil AS m ON v.outil = m.id
 
         WHERE  v.outil = "outil"'
;

                  $req = mysql_query($sql) or die('Erreur dans <strong>'.$sql.'</strong> :<br/>'.mysql_error());


                  $nb = mysql_num_rows($req);

                  if($nb == 0) {

                      echo "aucun résultat";


                  } else {


                      $result = mysql_fetch_assoc($req);


                      $contenu = $result['contenu'];


                      if(contenu == true) {


                          echo "$titre !<br />";


                      } else {


                          echo "V<br />";


                      }


                  }


                  }
 



et merci encore wink

Hors ligne

#22 02-12-2009 12:04:34

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

Bonjour,

Pour le foreach, il manquait simplement le ";"  wink

Par contre , j'ai toujours le même résultat : NULL aucun résultat sad

une idée peut être ?

bonne journée

Hors ligne

#23 02-12-2009 18:05:55

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos

Dans ce cas il est probable que ce soit les variables que tu mets dans la requêtes qui ne comportent pas ce que tu veux.
Tentes de les afficher pour voir si le découpage du texte s'est déroulé comme tu le souhaitais.

Hors ligne

#24 02-12-2009 18:33:09

debutant
Membre
Inscription : 29-11-2009
Messages : 19

Re : Moteur de recherches multiligne, sos

j'ai une erreur toujours avec le foreach apparemment :

[02-Dec-2009 17:30:56] PHP Warning:  Invalid argument supplied for foreach() in /.../cible.php on line 25


Tentes de les afficher pour voir si le découpage du texte s'est déroulé comme tu le souhaitais.

neutral comment ?

Hors ligne

#25 02-12-2009 20:29:38

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Moteur de recherches multiligne, sos

Le foreach tournant en fonction des chaînes découpées tu dois donc mal découper.

Pour l'affichage d'une varaible array voici comment faire pour un affichage propre :

echo"<pre>";
print_r($mon_array);
echo"</pre>";

Hors ligne

Pied de page des forums