Faire une requete sql qui affiche les noms des domains actifs

Fermé
Gghizlane Messages postés 4 Date d'inscription mercredi 14 septembre 2016 Statut Membre Dernière intervention 15 septembre 2016 - Modifié par jordane45 le 14/09/2016 à 20:13
Gghizlane Messages postés 4 Date d'inscription mercredi 14 septembre 2016 Statut Membre Dernière intervention 15 septembre 2016 - 15 sept. 2016 à 10:53
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 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
14 sept. 2016 à 20:17
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 mercredi 14 septembre 2016 Statut Membre Dernière intervention 15 septembre 2016
15 sept. 2016 à 10:47
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
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 mercredi 14 septembre 2016 Statut Membre Dernière intervention 15 septembre 2016
15 sept. 2016 à 10:53
le code m'a bien marcher, merci infiniment
0
Gghizlane Messages postés 4 Date d'inscription mercredi 14 septembre 2016 Statut Membre Dernière intervention 15 septembre 2016
15 sept. 2016 à 10:43
merci beaucoup pour vos réponses.
0