Faire une requete sql qui affiche les noms des domains actifs

Gghizlane Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
Gghizlane Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
bonjour, j'ai besoin de votre aide.
j'ai une table domain dont je stock des adresses ip et des noms de domains, ce que je veux faire c'est que lors de l'affichage le programme ping sur chaque domain ou ip et n'affiche que ceux qui sont actifs, mais la requete ne marche pas, voilà mon code:
<?php
include("connexion.php");
ini_set ('max_execution_time', 0);

$sql="select * from domain limit 4";
$rep1=mysql_query($sql,$base);

while ($data = mysql_fetch_array($rep1)){
  $a=$data['nom_domain'];
  exec ("ping -n 1 $a", $output, $result) ;
  
  if($result==0){
     $x='actif';
  }else {
     $x='down';
  }
}

$rep="select nom_domain from domain where $x='actif'";
$rep=mysql_query($sql,$base);
while ($data = mysql_fetch_array($rep)){
   echo $data['nom_domain'];
}

?>



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.


merci d'avance.

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

1 - Attention ... tu utilises l'ancienne extension Mysql (considérée comme obsolète ! )
Je t'invite fortement à passer à mysqli ou ( perso je préfère...) la PDO.

Je t'invite à lire ceci :
- https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete
- https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli


2 - Ton if
   if($result==0){
     $x='actif';
  }else {
     $x='down';
  }

Peut s'écrire beaucoup plus simplement comme ceci (via l'écriture TERNAIRE)
   $x = $result==0  ? 'actif' : 'down';


3 - Je pense que la boucle de ton premier WHILE se termine trop top...
Tu devrais ta seconde requête....

4 - J'ai l'impression que cette requête n'est pas bonne :
$rep="select nom_domain from domain where $x='actif'";

$x ???

As tu testé ta requête DIRECTEMENT dans ta BDD au moins ???
0
Gghizlane Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour la réponse, oui j'ai testé la requete à l'execution je n'ai aucune erreur mais il m'affiche tous les domaines, alors que mon but c'est de n'afficher que ceux qui sont actifs
0
Utilisateur anonyme
 
Normal car tu recherche un champ $x ou ici un champ nommé actif ou down, vu qu'avec des double quote les variables sont directement utilisées, et donc la base SQL ne connait pas les champs. Après ici même si la requête fonctionne, ça ne serait que pour le dernier domaine vu que tu l'as fait après la boucle.

Enfin tu as déjà le nom_domain dans la requête pour la boucle pas besoin d'en relancer une pour le récupérer:

include("connexion.php");
ini_set('max_execution_time', 0);
$sql = "SELECT * FROM domain LIMIT 4";
$rep1 = mysql_query($sql,$base);
while($data = mysql_fetch_array($rep1)){
 exec("ping -n 1 $a", $output, $result);
 if($result == 0) echo $data['nom_domain']."<br>";
}


Ton code peut être optimisé comme ceci, ensuite il est préférable d'utiliser PDO et non la fonction mysql_query pour tout ce qui est BDD.
0
Gghizlane Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
le code m'a bien marcher, merci infiniment
0
Gghizlane Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup pour vos réponses.
0