Jump to content

Appli Web PhP pour mon entreprise


Recommended Posts

Hello World (ah ok ;) )

Je suis en ce moment même stagiaire dans une boite informatique dans le cadre d'un BTS en alternance (1ere année). J'hésite en programmation et réseau donc mon boss m'a filé un petit projet tout bêbête pour que je vois les deux aspects que propose mon diplôme futur.

Déjà je précise que j'attends pas de vous un code source brut qui procurerait un plaisir immense à mon patron mais qui me servirait à rien.

Le projet consiste en une application qui permettrait de manipuler rapidement une base de données contenant les différents réseaux de la boite, les adresses associés utilisés (avec affichage du hostname, d'une petite présentation et user associé de la machine qui utilise ladite IP). Cette appli permettrait aussi d'ajouter/supprimer/modifier un réseau, d'ajouter une machine à une IP d'un réseau particulier ... ETC ETC...

J'ai commencé par le basic, un formulaire qui permet d'ajouter un Réseau, la dénomination du réseau et un petit commentaire. Ca marche, la BDD se remplie bien toussa toussa. Là je voudrais faire le script qui puisse ajouter une IP sur un réseau. Donc j'aimerais bien savoir par exemple comment faire un menu déroulant reprenant l'ensemble du champs correspondant à mes IP réseau. En fait j'ai (ou je vais) avoir pleins de questions et j'ai besoin de doc un peu poussé (mais destiné à des noobs aussi hein :youhou: ) sur la relation PHP / SQL.

Enfin bref ce topic est gravement brouillon mais si y'en a que ça intéresse de me filer de la doc, un petit coup de pouce etc c'est par ici que ça se passe :youhou:

Voici mes premieres lignes, en premier le code html du formulaire pour ajouter un lan. Il est moche, laid, infâme hideux mais il marche et pour l'instant c'est le principal :youhou: . Si vous y voyez une faille, une mauvaise habitude que je prends ou une optimisation possible dites le moi, je débute, autant bien débuter :youhou: .

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=windows-1250">
 <meta name="generator" content="PSPad editor, www.pspad.com">
 <title>Ajouter un Lan</title>
 </head>
 <body>
<FORM method=post action="addlan1.php">
Ajout d'un lan !
<table border="0">
<TR>
     <TD>Ip du Reseau (12 caracteres max!)</TD>
     <TD>
     <INPUT type=text name="ipfournie">
     </TD>
</TR>
<TR>
     <TD>Dénomination</TD>
     <TD>
     <INPUT type=text name="denom">
     </TD>
</TR>
<TR>
     <TD>Commentaire (facultatif)</TD>
     <TD>
     <TEXTAREA rows="5" name="comment">
     Ne tapez pas trop fort le commentaire, il pourrait avoir mal.
     </TEXTAREA>
           </TD>
</TR>
<TR>
<TD COLSPAN=2>
<INPUT type="submit" value="Envoyer">
</TD>
</TR>


</table>
</form>
 </body>
</html>

Ici, mon addlan1.php qui se connecte à ma base et envoie la requete :

<?php
$ip = $_POST['ipfournie'];
$denom = $_POST['denom'];
$comm = $_POST['comment'];
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
mysql_select_db('projetip') or die ('Erreur de base');

$sql = "INSERT INTO lan
         VALUES ( '$ip', '$denom', '$comm' )";

$requete = mysql_query($sql, $connect) or die (mysql_error() );
if($requete)
{
 echo("Ca marche !");
}
else
{
 echo ("OOpa");
}

?>

Sinon je pense que mon appli se présentera avec un menu central avec différents liens vers "Ajouter un Lan", "Supprimer un Lan", Modifier un Lan", "Ajouter une machine à un Réseau", "Supprimer une machine sur un réseau", "Modifier une machine sur un Réseau", "Embaucher le développeur :youhou: " !

Voilà si vous avez toutes sortes d'idées ce serait génial. Je demande pas un code source tombé de nul part je le répète.

Et surtout : :D

Merci à tous, bonne journée toussa toussa :youhou:

Link to comment
Share on other sites

Salut,

Pour ta demande sur les relations SQL/PHP tu as la doc PHP5 qui peut vachement t'aider : http://fr2.php.net/manual/fr/book.mysql.php (Celui là c'est pour MySQL ;) )

Sinon à part ça je vois pas trop ce que je peux faire pour toi :D

Déjà merci :youhou:

Ensuite comme j'ai dit j'aimerais bien que mon formulaire pour ajouter une IP ai un menu déroulant. Ce menu déroulant serait dynamique et afficherait toutes les IP des réseaux présentes dans la base de données !

Donc si tu as des pistes et tout c'est nickel. Bon je file lire mon sandwich et manger la doc :youhou: :youhou: :youhou:

EDIT : Ton lien gere à mort, il va cash dans les favoris, je recherchais exactement ça car les mecs qui foutent un bout de code sans expliquer les fonctions ça commence à bien faire :youhou: Merci !

Link to comment
Share on other sites

:D:transpi::win::win::win::win:

J'ai réussi à faire mon menu déroulant !

Je me suis bien servi du net mais j'ai compris le principe du script

$sql = "SELECT ipreseau FROM lan";
$requete = mysql_query($sql) or die ('Erreur de connexion');
echo "<SELECT NAME='reseauparent'>";
while ($result = mysql_fetch_array($requete))
{

echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";

}

echo "</SELECT>"; 

En clair, faut classer les données dans un tableau comme si je souhaitais les afficher normalement mais claquer le tout dans un SELECT des familles :D

Ai-je bon ?

Bon ben je continue... :francais:

Link to comment
Share on other sites

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=windows-1250">
 <meta name="generator" content="PSPad editor, www.pspad.com">
 <title>Ajouter une machine à un Réseau</title>
 </head>
 <body>
 Réseau Parent :
<?
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
$db=mysql_select_db('projetip') or die ('Base innaccessible');

$sql = "SELECT ipreseau FROM lan";
$requete = mysql_query($sql) or die ('Erreur de connexion');
echo "<SELECT NAME='reseauparent'>";
while ($result = mysql_fetch_array($requete)) {

         echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";

			}

			echo "</SELECT>"; 

?>

Voici mon code pour le moment qui m'affiche :

Réseau Parent :

Et bien sur mon menu déroulant qui va bien.

Si je continue mon formulaire en HTML, ca va poser un probleme pour la récupération de données ?

Ah oui et comment je peux récuperer les données de mon menu déroulant ? :francais:

Link to comment
Share on other sites

Bon j'ai plutot bien avancé (enfin pour mon niveau :francais: )

Donc j'ai fait le code qui permet d'ajouter une machine en sélectionnant le réseau (selon les réseaux crées précédemment), elle marche bien, les entrées se font bien. J'ai aussi fait une page pour afficher les différents réseaux (avec leur dénomination et commentaires associés) et pour afficher les différents machines (Hostname, Ip Réseau, Ip Machine et commentaire associé). Le projet avance plutôt bien dans le fond (la forme ça sera pour plus tard hein). Plus ça avance, plus j'ai envie de continuer et de l'améliorer, c'est bon signe.

Voici mes différents code, si vous voulez optimiser le bouzin n'hésitez pas :

Le "Showlan.php" qui affiche la liste des réseaux (si quelqu'un peut me dire comment classer ça comme il faut pour que les réseaux 146 par exemple passe apres le réseau 16 :transpi:

<HTML>
<HEAD>
<TITLE> Flux IP </TITLE>



<?
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
mysql_select_db('projetip') or die ('Erreur de base');
$result=mysql_query('select ipreseau,denomination,commentaire from lan order by ipreseau');
while ($row = mysql_fetch_array($result))
{
 echo $row[ipreseau].' - '.$row[denomination].' - '.$row[commentaire].' <br>';
}

?>

Le "ShowHosts.php"

<HTML>
<HEAD>
<TITLE> Flux IP </TITLE>



<?
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
mysql_select_db('projetip') or die ('Erreur de base');
$result=mysql_query('select hostname,IpMachine,IpReseau from machine order by IpReseau');
while ($row = mysql_fetch_array($result))
{
 echo $row[hostname].' - '.$row[ipReseau].'. '.$row[ipMachine].' - '.$row[commentaire].' <br>';
}

?>

Le addhost.php, formulaire pour ajouter une machine a un réseau

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=windows-1250">
 <meta name="generator" content="PSPad editor, www.pspad.com">
 <title>Ajouter une machine à un Réseau</title>
 </head>
 <body>
<FORM method=post action="addhost1.php">
Ajout d'une machine !
<table border="0">
<TR>
<TD>Reseau Parent</TD>
<TD>

<?
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
$db=mysql_select_db('projetip') or die ('Base innaccessible');

$sql = "SELECT ipreseau FROM lan";
$requete = mysql_query($sql) or die ('Erreur de connexion');
echo "<SELECT NAME='reseauparent'>";
while ($result = mysql_fetch_array($requete)) {
         echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";

			}

			echo "</SELECT>"; 


?> 
</TD>
</TR>
<TR>
     <TD>Suffixe de la machine</TD>
     <TD>
     <INPUT type=text name="suf">
     </TD>
</TR>
<TR>
     <TD>Commentaire (facultatif)</TD>
     <TD>
     <TEXTAREA rows="5" cols="25" name="comment">
     </TEXTAREA>
</TD>
<TR>
     <TD>Hostname</TD>
     <TD>
     <INPUT type=text name="host">
     </TD>
</TR>
<TR>
<TD COLSPAN=2>
<INPUT type="submit" value="Envoyer">
</TD>
</TR>
</table>
</form>
</body>
</html>

Et pour finir le script qui ajoute les entrées dans la BDD :

<?php
$ip = $_POST['suf'];
$lan = $_POST['reseauparent'];
$comm = $_POST['comment'];
$host = $_POST['host'];
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
$db=mysql_select_db('projetip') or die ('Erreur de base');
$sql = "INSERT INTO machine
         VALUES ( '$host', '$ip', '$lan', '$comm' )";

$requete = mysql_query($sql) or die (mysql_error() );
if($requete)
{
 echo("Insertion effectuée avec succès !");
}
else
{
 echo ("L'Insertion à échoué");
}

?>

Voilà c'est tout ce que j'ai fait pour le moment !

Dîtes moi si vous voyez un truc à améliorer, je prends tout :byebye:

Bonne journée et merci à nemesis93_75 pour son aide depuis le début !!!!!

Link to comment
Share on other sites

Ben en fait mes réseaux sont par exemple :

192.168.14.XXX

192.168.24.XXX

192.168.34.XXX

192.168.44.XXX

192.168.134.XXX

Et avec mon code actuel il me renvoie :

192.168.134.XXX

192.168.14.XXX

192.168.24.XXX

192.168.34.XXX

192.168.44.XXX

Le ASC règlerait mon probleme ? :mdr:

PS : Je continue mardi prochain (prochain jour d'entreprise, lundi RTT :eeek2: ). Le code Brut étant quasiment fini (à part une fonction recherche), je vais bosser l'interface donc ça sera une autre partie assez sympa et j'aurais besoin de votre aide en design parce que niveau artistique, je frôle le néan :roule:

Merci à tous (oui même ceux qu'on lu sans répondre, ça viendra peut être :D ) et à Mardi !!!

Link to comment
Share on other sites

En fait non l'ASC ne devrait pas changer le problème, ce mode de tri étant celui utilisé par défaut. Ce qu'il faut voir, c'est que ipreseau est en base sans doute de type VARCHAR ou affilié. De fait, il ne distingue pas les différentes parties de l'adresse IP, mais classe ça comme n'importe quelle chaîne de caractères : en regardant la relation qui existe entre des caractères situés au même niveau. Tes adresses IP commençant toutes par "192.168.", il utilise les caractères suivants pour réussir à faire le tri. '1' étant le plus petit caractères, il met "192.168.134.XXX" et "192.168.14.XXX" devant tout le monde, puis se sert du caractère suivant pour les départager.

Donc au final en terme de comparaison de chaînes, son comportement est exactement celui attendu, car "192.168.134.XXX" < "192.168.14.XXX", quand bien même ça n'est pas vrai si on compare ça comme des adresses IP. Le plus simple serait pour avoir un affichage correct serait d'utiliser une des fonctions de tri de tableau fourni par PHP. Il n'y en a pas une qui utiliserait une fonction passée en paramètre (qui gérerait correctement les adresses IP, sans doute à définir) pour trier un tableau ?

Link to comment
Share on other sites

Mon appli est là pour faciliter et fournir un affichage clair et précis. Si on doit changer un poste utilisateur et qu'on a son ancienne adresse en binaire, niveau gain de temps on est pas top :transpi:

Le champs ipreseau est en effet en Varchar. C'est donc du côté du PHP que je devrais régler ce problème et non pas au niveau du SQL ?

Je verrais ça mardi en tout cas si tu peux m'en dire plus ou me rediriger sur une page bien pour compléter mes recherches ce serait nickel :devil:

Bon Week end !

Link to comment
Share on other sites

J'imagine qu'il y a des SGBD qui devraient permettre de faire ce genre de tri, que cela soit à travers un type existant pour les IP ou des extensions. Mais ça ne me semble pas simple à impossible à mettre en place de ce côté-là. Reste côté PHP.

J'ai fait une rapide recherche sur PHP.net et j'ai trouvé les fonctions usort, uasort et uksort qui seraient susceptibles de t'aider. Je doute que tu sois dans un cas où uasort est à utiliser, reste les deux autres. Donc usort si jamais tu as juste un tableau d'objets, et uksort si jamais tu utilises aussi les adresses IP comme clefs pour ton tableau. Le fonctionnement est similaire. Il faudra juste que tu définisses correctement ta fonction de comparaison. Pour ça, il va falloir que tu utilises explode, que tu convertisses le contenu des deux tableaux résultat à comparer en valeurs numériques et que tu les compares une à une jusqu'à trouver des valeurs non égales, et que tu retourne la bonne valeur.

On te laisse t'en occuper, n'hésite pas à poster le code ici si tu n'es pas sûr de toi. Mais tu devrais assez facilement voir si ça fonctionne correctement ou non. :transpi:

Link to comment
Share on other sites

Yop !

J'ai regardé les fonctions que tu m'as passé ce matin mais j'ai pas su comment les adapter à mon problème. J'ai donc demander à un gars de ma boite qui "m'assiste" dans ce projet. Il a trouvé une petite solution mais hélas en testant un peu plus l'application, elle comporte un bug, pas des moindres.

Voici déjà le code qui permet de classer les IPs dans l'ordre croissant :

<HTML>
<HEAD>
<TITLE> Flux IP </TITLE>



<?
$tablo = array();
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
mysql_select_db('projetip') or die ('Erreur de base');
$result=mysql_query('SELECT * FROM machine');
while ($row = mysql_fetch_array($result))
{
   $tablo[intval(str_replace('.','',$row[ipReseau]))] = $row[ipReseau].'.'.$row[ipMachine].' - '.$row[hostname].' - '.$row[commentaire]; 
 //echo $row[hostname].' - '.$row[ipReseau].'. '.$row[ipMachine].' - '.$row[commentaire].' <br>';
}


ksort($tablo,SORT_NUMERIC);
     print_r($tablo);     
//echo '<pre>';

//echo '</pre>';

//foreach ($tablo as $key => $val) {
//  echo $val.'<br />';
//}


?>

Le soucis, c'est qu'elle n'affiche qu'une entré par "ipreseau", si j'ai 4 machines sur le réseau 16, elle me montre que le plus ancien, elle ne prend pas en compte les nouveaux. En clair le print_r($tablo); m'affiche ça

Array ( [19216816] => 192.168.16.107 - toto2 - [19216846] => 192.168.46.47 - 777 - 7777 [192168146] => 192.168.146.45 - lol - 444 ) 

Vous voyez de quoi ça peut venir ? :byebye:

Si je met le print_r avant le "ksort", le résultat est le même (mais non trié), ça ne vient donc pas de là :D

Sinon là je pensais regrouper les hosts en tableau selon leur réseau parent, il doit donc être dynamique. Je passe par le même principe que pour mon menu déroulant ?

Merci et bonne journée à vous !

EDIT : J'ai aussi commenté le ksort et malgré ça, ça ne change rien :yes:

Link to comment
Share on other sites

Bon en fait pour plus de clarté je vais faire plusieurs "showlan.php" selon les réseaux. Sinon ça va vite devenir le bordel quand toutes les données seront présentes. Je vais donc faire un menu qui permettra de choisir son réseau à partir d'un menu dynamique (je vais bidouiller le menu déroulant fait dans le "addhost.php" pour arriver à mes fins. En attendant je me suis penché sur la "search.php" qui servira à faire des recherches. Comme pour le "showlan" il y'aura un menu dynamique pour savoir si l'utilisateur veut rechercher par le suffixe utilisateur, le hostname etc... Je me suis attelé au search.php en imaginant pour le moment qu'on ne veut rechercher que par IP générale d'un réseau. Donc ma premiere page html comporte une textarea basique et un bouton submit. Voici le script qui va chercher dans la BDD et nous renvoie les infos :

<?php
$search = $_POST['search'];
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
$db=mysql_select_db('projetip') or die ('Erreur de base');
$sql = "SELECT * from machine where IpReseau = '$search'";
$req = mysql_query($sql);
$row = mysql_fetch_array($req);

{
 echo $row[hostname].' - '.$row[ipReseau].'. '.$row[ipMachine].' - '.$row[commentaire].' <br>';
}    
?>

Le script marche mais il m'affiche qu'un seul résultat (problème rencontré avec mon addhost précédemment sans réponse mais contourné). Donc je pense qu'il faudra faire une bouche qui récupère les résultats. Je m'y atèle et je vous poste la suite.

Sinon serait-il utile de libérer la mémoire après les requêtes SQL ou c'est useless vu mes petites requêtes et le petit nombre de connexion simultanée (3 admins réseaux) ?

Merci et bonne journée !

:D

Edit : comme prévu la boucle marche bien, ça baigne donc !

Sinon j'ai une petite question. Pour la recherche, vous pensez que l'User préfèrera choisir son type de requête avant de la faire ou un petit menu déroulant à coté de la textarea est plus intuitif ?

Perso je pense que le menu déroulant est plus sympa mais l'idée d'un menu principal de recherche permettrait une cohérence vu que ce sera appliqué dans les showlan, showhost etc...

Link to comment
Share on other sites

L'erreur vient de la manière dont tu remplis ta variable $tablo :

// Retourne 0 si les deux IP sont égales, un nombre négatif si la première est plus petite, un nombre positif sinon
function compareMachineByIp($mach1, $mach2) {
   $divIp1 = explode($mach1[ipReseau].$mach1[ipMachine], '.');
   $divIp2 = explode($mach2[ipReseau].$mach2[ipMachine], '.');
   for ($i = 0 ; i < 4 ; $i++) {
       if ($divIp1[$i] != $divIp2[$i]) {
           return $divIp1[$i] - $divIp2[$i];
       }
   }
   return 0;
}

// On suppose $tablo initialisé, et on ignore ses clefs
usort($tablo, 'compareMachineByIp');
// Si on utilise les IP comme clefs, adapter la fonction ci-dessus en une fonction "compareIp" et utiliser cette instruction
// uksort($tablo, 'compareIp');

Après il peut d'un point de vue confort d'utilisation être utile ton interface de sorte à avoir une page par réseau. Mais ça peut être gênant si jamais il n'y a jamais beaucoup de machine à gérer et que l'on a besoin de rapidement passer d'un réseau à un autre. Mais là, à toi de voir suivant l'usage qui sera fait de ton interface.

Link to comment
Share on other sites

Merci pour la réponse.

En effet je pense continuer avec une page/réseau. Comme tu le dis si bien, ça pourrait être génant s'il n'y a peu d'info/réseau et donc je pensais mettre en bas un menu déroulant pour switcher aisément de réseau sans avoir à revenir au menu.

Etant donné que nous avons des réseaux bien fourni (i.e active directory) et d'autres beaucoup moins, je vais coller un petit menu.

Sinon mon search.html ressemble à ça :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=windows-1250">
 <meta name="generator" content="PSPad editor, www.pspad.com">
 <title>Recherche</title>
 </head>
 <body>
 <FORM method=post action="search.php">
<TABLE BORDER=0>
<TR>
<TD>Recherche</TD>
<TD>
<INPUT type=text name="search">
</TD>
<TD>
<SELECT name="type">
	<OPTION VALUE="ipreseau">IP du Réseau</OPTION>
	<OPTION VALUE="ipmachine">IP de la Machine</OPTION>
	<OPTION VALUE="hostname">Nom de Machine</OPTION>	
 </SELECT>
</TD>
</TR>
<TR>
<TD COLSPAN=2>
<INPUT type="submit" value="Cherche !">
</TD>
</TR>
</TABLE>
</FORM>
</body>
</html>

le php est là :

<?php
$search = $_POST['search'];
$type = $_POST['type'];
$connect=mysql_connect('****','****','****') or die ('Erreur de connexion');
$db=mysql_select_db('projetip') or die ('Erreur de base');
switch ($type) {
case ipreseau:
   $sql = "SELECT * FROM machine WHERE IpResau LIKE '%$search%'";
   break;
case ipmachine:
   $sql = "SELECT * FROM machine WHERE IpMachine = '$search'";
   break;
case hostname:
   $sql = "SELECT * FROM machine WHERE hostname LIKE '%$search%'";
   break;
}
$req = mysql_query($sql);
while ($row = mysql_fetch_array($req))

{
 echo $row[hostname].' - '.$row[ipReseau].'. '.$row[ipMachine].' - '.$row[commentaire].' <br>';
}

echo '<a href="search.html">Retour à la recherche</a>';
?>

Seul un soucis subsiste quand je cherche par IP du Réseau, il me rapporte une erreur à la ligne 22

"while ($row = mysql_fetch_array($req))"

L'erreur est la suivante :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data/sites/ng/search.php on line 22

Donc là je bloque un peu, c'est pas le primordial mais si vous avez une idée je suis preneur.

Merci à vous !

EDIT : Je viens de jeter un oeil au fichier excel contenant tous les réseaux et toutes les IP rattachées aux réseaux et même dans les plus petits, y'a quand même bien une dizaine d'entrés. Sachant que les réseaux vont de 16 à 246 (+10 à chaque new reseau), ça fait beaucoup sachant qu'il y'en a des sacrément fourni (serveur d'impression, users & co). :yes:

EDIT² : Problème de SQL tout con, ça m'apprendra à pas me relire :yes:

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...