Vous n'êtes pas identifié(e).
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 :
la cible:
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
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
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 :
$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
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
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
MK->
tu es bien curieux :D
a++
Hors ligne
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
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
je viens de lire 4 ou 5 articles pour comprendre , donc si j'ai bien lu, il devrait se trouver la :
merci
Hors ligne
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
Pardon
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
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
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
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
Mais si le dessus fonctionne, ca me rassure un peu, je suis pas si nul que ca
Hors ligne
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
merci pour tout pour votre aide tous les deux
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
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 :
soyez sympas, vous moquez pas, au moins, j'essaie
encore MERCI de m'aider et bonne soirée
Hors ligne
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)
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
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 :
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
bonjour et merci pour ces reponses,
vous chamaillez pas pour moi
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
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
bon , l'exemple de Marc et sa clio, c'était pour vous simplifier la compréhension, vous l'aurez compris
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
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
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 )
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
Hors ligne
Bonjour,
Pour le foreach, il manquait simplement le ";"
Par contre , j'ai toujours le même résultat : NULL aucun résultat
une idée peut être ?
bonne journée
Hors ligne
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
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.
comment ?
Hors ligne
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 :
Hors ligne