Utilisation de sql en php + problème php

Utilisation de sql en php + problème php - PHP - Programmation

Marsh Posté le 12-01-2005 à 20:31:07    

Salut j'ai des questions sur une page web que j'ai fait. Elle référence des serveurs ftp sur un réseau local. Vous pouvez en voir une version épurée sur simon333.free.fr/test.php. Voici le code:
 

Citation :

<HTML>
<BODY LINK="RED" ALINK="RED" VLINK="RED" TOPMARGIN="50" BOTTOMMARGIN="50" LEFTMARGIN="40" RIGHTMARGIN="40" BACKGROUND="606.gif">  
 
 
<table   border="0"  background="606.gif" align="center" cellpadding="5" cellspacing="1" bgcolor="black" >
    <tr >
    <td   align="center" colspan="8" bgcolor="#FFFFFF">
        <font face="Arial, Helvetica, sans-serif" size="+2"><b>Test des serveurs FTP</b></font>
    </td>
    </tr>
    <tr>
     <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Nom</b></font>
    </td>
     <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Serveur</b></font>
    </td>
    <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Port</b></font>
    </td>
    <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Statut.</font></b>
    </td>
     
     <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Login</font ></b>
    </td>  <td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Mot de passe</font ></b>
    </td><td align="center" bgcolor="#FFFFFF">
        <b><font size="+1">Commentaire</font ></b>
    </td>
    </td><td align="center" bgcolor="#FFFFFF">
        <b><font size="-1">Code d'erreur de la fonction fsockopen pour ceux qui maitrisent</font ></b>
    </td>
    </tr>
 
<?php
 
$server[1]['port'] = 21;        <===============
$server[1]['addr'] = '***.***.***.***';     <===============
$server[1]['login'] = '****';           <===============
$server[1]['mdp'] = '*****';               <===============
$server[1]['comm']= '20 Go de films, des jeux, des mp3  ';   <===============
$server[1]['nom']='Sibbboon'; <===============
 
 
 
 
for ($i = 1; $i <= count($server); $i++)
{
        if (is_array($server[$i]['port']))
        {
            $port = array();
            $port = $server[$i]['port'];
        }
        else
        {
            $port = array();
            $port[0] = $server[$i]['port'];
        }
        for ($j = 0; $j < count($port); $j++)
        {
             
            echo '<tr><td align="center" bgcolor="#FFFFFF" >'."\n";
            echo $server[$i]['nom'];  
            echo '</td>
      <td align="center" bgcolor="#FFFFFF" height="20">'."\n";
            if ($j == 0)
            {
                echo $server[$i]['addr']."\n";
            }
            else
            {
                echo '&nbsp;'."\n";
            }
            echo '</td><td align="center" bgcolor="#FFFFFF">'."\n";
            echo $port[$j]."\n";
            echo '</td><td align="center" bgcolor="#FFFFFF">'."\n";
            if ( @fsockopen( $server[$i]['addr'], $port[$j], $errno, $errstr, 0.5) )
            {
                echo '<font color="#00CC00" size="+1"><b>Online</b></font>'."\n";
            }
            else
            {
                echo '<font color="#CC0000"><b>Offline</b></font>'."\n";
                $ping = '&gt;1000';
            }
            echo '</td>
            <td align="center" bgcolor="#FFFFFF" >'."\n";
            echo $server[$i]['login'];  
            echo '</td>
            <td align="center" bgcolor="#FFFFFF" >'."\n";
            echo $server[$i]['mdp'];  
            echo '</td>
            <td align="center" bgcolor="#FFFFFF" >'."\n";
            echo $server[$i]['comm'];  
            echo '</td>
           <td align="center" bgcolor="#FFFFFF" >'."\n";
           echo "<FONT size=-2>$errstr \Code erreur numéro:$errno</FONT>";
            echo '</td>
           
           
            </tr>'."\n";
        }
}
?>
</BODY>
</HTML>


 
Première question: Comme vous pouvez les informations de chaque serveur sont assignées a des variables directement. Je voudrais savoir si il est possible (je suis sur que oui) et surtout comment lire ces informations dans une base de données ou dans un fichier texte? (j'ai des connaissances et j'utilise déja une base de données sous mysql pour les stats du site)
 
Deuxième question: J'arrive pas a mettre de couleur en fond de tableau. Comment faut t'il faire? quand je rajoute ce qui est souligné dans le code, la texture se charge mais pas dans le tableau, sur les bordures/traits du tableau. est ce normal?
 
Troisième question: Le tableau met du temps a se charger (le temps de faire les tests online/offline). Y'a pas moyen qu'il s'affiche tout de suite et que le online/offline s'affiche plus tard? Si c'est possible je pense que ça suppose une grosse modification du code, non?
 
 
Voila c'est tout pour l'instant. Je cherche pas forcément des réponses toutezs faites mais plutôt des pistes de travail. Merci d'avance


Message édité par sibbboon le 15-01-2005 à 11:25:06
Reply

Marsh Posté le 12-01-2005 à 20:31:07   

Reply

Marsh Posté le 12-01-2005 à 23:49:58    

up

Reply

Marsh Posté le 13-01-2005 à 07:27:50    

Question 1: Je sais pas. Désolé
 
Question 2: Utilise les feuilles de style (CSS), ca aide et ca donne un code plus propre.
 
Question 3: Avant l'affichage, tu fais tes "calcul", une fois ke tu as fini, tu peux afficher ton code HTML et tes données.

Reply

Marsh Posté le 13-01-2005 à 11:27:18    

ok merci par contre pour la 3 c'est ce qu'il se passe en fait

Reply

Marsh Posté le 13-01-2005 à 13:03:59    

Excuse moi, j'avais mal interprêté ton code.
 
Oubli ma réponse à ta question 3.
En faite, le mieu serai de voir si tu ne pourrais pas enlevé une boucle for, si c'est possible bien entendu. Je pense que ca te ferai gagner du temps.
 
Sinon je ne vois pas comment faire si ce n'est que de mettre un petit message pour faire patientr tes visiteurs en utilisant du javascript.


Message édité par AlphaZone le 13-01-2005 à 13:08:06
Reply

Marsh Posté le 14-01-2005 à 01:02:32    

Concernant ta question 3 j'ai eu un probleme similaire il y a quelques jours.
Ma solution fut de "tricher".
 
Si j'ai bien compris ton script dois afficher l'etat online/offline de certains serveurs ftps.
Le probleme est que si tu faits ces test dans ton script qui affiche le tableau, il suffit que quelques ftps soient offline et tu risque d'atteindre la limite d'execution de ton script php. Un autre probleme est le fait que ton script est tributaire de la vitesse de reponse des serveurs.
 
J'avais un probleme tres similaire, pour solutionner ca, j'ai triche. J'ai decoupe mon script en 2.  
La premiere partie affiche le tableau, et a la place du texte "online/offline" j'ai mis un lien vers une image.
 
Cette image est en realite "generee" par la 2e moitie de mon script. De cette facon quand le navigateur va aller chercher l'image il va lancer mon script php. Ce dernier fait le test et retourne l'image en fonction de l'etat du serveur.
 
Cette methode a quelques avantages, notament le fait que pour chaque serveur, le navigateur fait une requete differente. Par consequent il va lancer le script pour chaque serveur. Ce qui veut dire que chaque serveur aura le temps d'execution du script php pour repondre (et pas comme avant ou ils devaient tous se "partager" ce temps).
 
De plus en fonction du navigateur, ce dernier peut faire 2-3 requetes en meme temps.
 
Si tu decide d'utiliser cette methode, je te recommande de faire attention au "cache" de ton navigateur. En effet ce dernier met en caches les images. Donc va falloir t'assurer que tes images ne sont pas dans le cache afin d'eviter de donner un "faux" statut pour le serveur.
 
Voila j'espere avoir pu t'aider

Reply

Marsh Posté le 14-01-2005 à 07:23:07    

Merci beaucoup je vais chercher de ce coté là: ça m'a l'air d'être pas mal! Merci beaucoup. Si quelqu'un à d'autres choses a proposer, hésiter pas !!!! Merci encore

Reply

Marsh Posté le 14-01-2005 à 21:36:21    

Je fais des recherches sur la solution de cerel et je vois pas trop comment mettre ça en oeuvre quelqu'un voit?

Reply

Marsh Posté le 14-01-2005 à 21:52:44    

Ben en fait faut que "decoupes" ton script en 2.
 
La premiere partie va se charger de creer ton tableau, de lister les serveur et au lieu de faire le test de connexion et d'y afficher le status, tu mets une image.
Par exemple quelque chose comme ca:
<img src="test_conn.php?ip=127.0.0.1">
 
Ensuite dans ton fichier test_conn.php tu mets la partie de ton script qui s'occupe de verifier si le serveur est online ou offline.
La tu as 2 possibilitées. Soit tu utilises GD pour creer une image et la renvoyer, soit tu ne faits que renvoyer une image deja existente. Admetons que tu aies cree 2 images. Tu dois simplement jouer avec "header" (cf content-type) pour dire a ton browser que tu envoie une image, apres tu ouvre ton fichier avec fopen et tu balance le contenu du fichier au browser (evidement faut eviter les images trop lourdes).
 
La commande importante a retenir c'est "header", regarde dans le manuel de php, tu devrais avoir tout ce qui est necessaire pour y arriver.
 
Essaye en commencant par un truc vraiment simple. Du genre une page qui affiche une serie d'images, images que tu "cree" toi dans un script php. Une fois que tu arrive ca, le reste n'est que tu "recopiage" de code puisque ton script fonctionne.

Reply

Marsh Posté le 15-01-2005 à 01:43:00    

Bona lors le truc couille toujours et j'arrive pas a comprendre pourquoi. Si tu pourvais me corriger s'il te plait.
 
Voila la partie de mon ficheir avec l'appel  
 

Citation :

echo '<img src="image.php?ip=***.***.***.***&port=21" >';


 
et voila image.php
 

Citation :

<html>
<body>
<?php
header("Content-type: image/gif" );
 $ip=$_REQUEST["ip"];  
 $port=$_REQUEST["port"];
 if ( @fsockopen( $ip, $port, $errno, $errstr, 0.2) )
            {$image = "online.gif";}
            else
            {$image ="offline.gif";}
 readfile($image);
?>
</body>
</html>


 
je vois pas trop ou je dois utiliser fopen: Si tu peux m'éclairer
 
Et sinon sachant que chaque serveur est déclaré comme ça:
 

Citation :

$server[$i]['port'] = 21;
$server[$i]['addr'] = '***.***.***.***';
$server[$i]['login'] = '...'; etc...


 
comment dois je appeller image.php?
 
Comme ça?

Citation :

<img src="image.php?ip=echo'$server[$i]['addr']')&port=$server[$i]['port']'

 
 
 
Merci beaucoup de toute l'aide que tu m'as déja apporté, c'est vraiment sympa !!!

Reply

Marsh Posté le 15-01-2005 à 01:43:00   

Reply

Marsh Posté le 15-01-2005 à 02:59:40    

sibbboon a écrit :

[...]
et voila image.php  

Citation :

<html>
<body>
<?php
header("Content-type: image/gif" );
 $ip=$_REQUEST["ip"];  
 $port=$_REQUEST["port"];
 if ( @fsockopen( $ip, $port, $errno, $errstr, 0.2) )
            {$image = "online.gif";}
            else
            {$image ="offline.gif";}
 readfile($image);
?>
</body>
</html>




C'est normal que ca marche pas etant donne que tu as deja envoye les headers. Si tu inspecte attentivement ton code source, tu remarque qu'avant l'ouverture du tag php  (?php), tu as as 2 lignes html, a cause de celles-la le serveur web a deja commence a envoyer les donees au browser. Mais il les envoi comme du html et non comme une image.
Il faut donc que tu vire tout l'html de ton fichier image.php. En effet ce dernier n'est utilise que pour afficher des images et non pour afficher de l'html.
 

sibbboon a écrit :

je vois pas trop ou je dois utiliser fopen: Si tu peux m'éclairer


Tu as utilise readfile, ca va tres bien aussi. Fopen c'est simplement pour ouvrir un fichier, readfile fait deja tout (ouvre le fichier puis l'envois). Moi j'avais pense a une ouvrir le fichier avec fopen puis l'envoyer, mais c'est mieux de le faire avec readfile, c'est plus facile. Desole de t'avoir induit en erreur.
 

sibbboon a écrit :

Et sinon sachant que chaque serveur est déclaré comme ça:
 

Citation :

$server[$i]['port'] = 21;
$server[$i]['addr'] = '***.***.***.***';
$server[$i]['login'] = '...'; etc...


 
comment dois je appeller image.php?
 
Comme ça?

Citation :

<img src="image.php?ip=echo'$server[$i]['addr']')&port=$server[$i]['port']'

 
 
Merci beaucoup de toute l'aide que tu m'as déja apporté, c'est vraiment sympa !!!


 
Ben en fait ca depends comment tu ecris tes liens. Mais admetons que tu as une boucle for qui parcours ton tableau :

Citation :

foreach($server as $srv) {
  echo "
<img src=\"image.php?ip=$srv[addr]&port=$srv[port]\">";
}



 
Si tu veux creer un lien html ou tu ajoutes les valeurs via php tu dois faire comme ca :

Citation :

<img src="image.php?ip=<?php echo $server[$i]['addr'];?>&port=<?php $server[$i]['port'];?>">


 
Remarque bien la differences entre les deux. La premiere methode pourrais se ressumer a "retourner du code html a l'interieur de php", alors que la 2e methode est "l'inverse", ou "comment retourner des valeurs php a l'interieur d'html" (en gros).
Je te conseille la premiere methode qui reste plus lisible.
 
PS : Comme j'avais rien a faire a 3h du mat, j'ai ajoute un peu de couleur pour mieux differencier la partie html de la partie php dans les 2 exemples cites plus haut.


Message édité par cerel le 15-01-2005 à 03:00:29
Reply

Marsh Posté le 15-01-2005 à 11:24:23    

Bon ben  maintenant ça marche sauf que ça me met que des offlines (le fichier image.php marche nickel <<== testé manuellement).
 
Voice commment je transmet les valeurs (pas trop compris la première méthode). Cette ligne remplaçant ce que j'ai coloré en haut de la page
 

Citation :

 echo "<img src=\"image.php?ip=<?php echo $server[$i]['addr'] ?>&port=<?php $server[$i][port] ?>\">";


 
Je sens qu'on touche au but... merci beaucoup cerel pour ton aide

Reply

Marsh Posté le 15-01-2005 à 12:46:22    

Essaye plutot ca :
echo '<img src="image.php?ip='.$server[$i]['addr'].'&port='.$server[$i]['port'].'">';
Mais faut que tu fasse gaffe au cache de ton navigateur. Va voir ds la doc de php concernant la fonction header, ils donnent les entetes a envoyer pour eviter que le navigateur ne mete l'image dans le cache.

Reply

Marsh Posté le 15-01-2005 à 12:59:09    

Code :
  1. <meta http-equiv="Pragma" content="no-cache" />
  2. <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />


 
a mettre dans le <head> ;)


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 15-01-2005 à 13:33:00    

Ca c'est dans le cadre d'un fichier html, or ici il envoi lui meme les headers avec la fonction header.
Le manuel php nous donne ca :

Code :
  1. // Date in the past
  2. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
  3. // always modified
  4. header("Last-Modified: " . gmdate("D, d M Y H:i:s" ) . " GMT" );
  5. // HTTP/1.1
  6. header("Cache-Control: no-store, no-cache, must-revalidate" );
  7. header("Cache-Control: post-check=0, pre-check=0", false);
  8. // HTTP/1.0
  9. header("Pragma: no-cache" );

Reply

Marsh Posté le 15-01-2005 à 13:41:46    

Merci beaucoup, ça marche, tu gère mec il me reste plus qu'a vérifier les histoires de caches et c'est bon !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed