Merci de déplacer le sujet dans Jquery si vous pensez que c'est plus adéquate..
Bonjour,

J'ai un problème sur la réalisation finale de cette partie de code.
Voila un aperçu de que ce que le code en dessous donne : http://prntscr.com/kob8s0

<?php
if(isset($TAB){
    ?>
          <div class="content">
                <div class="container-fluid">
                    <div class="row">

                    <h3 class="title text-center">Mes TAB</h3>
                    <?php
                }
                    $sql = "SELECT * FROM TAB WHERE user_id = '$user_id'";
                    $req = $db->query($sql);
                    $req->setFetchMode(PDO::FETCH_ASSOC);

                    foreach($req as $row)
                    {

                    ?>

                        <div class="col-md-8 col-md-offset-2">
                            <br />
                            <div class="card">
                                <div class="card-content table-responsive">
                                    <style type="text/css">
                                        .text_align_right { text-align: right; }
                                        .text_align_left  { text-align: left; }
                                        .td1              { width: 50%; }
                                        .first-half       { text-align: right; float: left; width: 50%; }
                                        .second-half      { float: right; width: 50%; }
                                    </style>
                                                                        <table class="table table-hover">
                                        <tbody>
                                            <tr>
                                                <td class="text_align_right td1">Type d'offre :</td>
                                                <td>

                                                    <?php
                                                            echo $row['product'];
                                                        ?>
                                                </td>
                                            </tr>
                                            <tr>
                                            <td class="text_align_right">Identifiant :</td>
                                                    <td>
                                                        <?php
                                                            echo $row['identifiant'];
                                                        ?>
                                                    </td>
                                            </tr>                                            

                                             <tr>
                                                <td class="text_align_right">Serveur :</td>
                                                <td>
                                                <?php
                                                    echo $row['serveur'];
                                                    $numserveur = $row['serveur'];
                                                ?>
                                                </td>
                                             </tr>

                                             <tr>
                                                <td class="text_align_right"><strong>TEST :</strong></td>
                                                <td><strong>

                                            <?php

                                                $identifiant = $row['identifiant'];
                                            ?>
                                               </strong></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                             <table style="width:100%;">
                                            <tbody>
                                                     <tr>
                                                        <td>
                                                            <center>

   <?php
 $selectip = $db->query("SELECT * FROM serveur WHERE nom='$numserveur'");
                                                            $rip = $selectip->fetch(PDO::FETCH_OBJ);
                                                            $ip = $rip->ip;
                                                            $port = $rip->port;

                                                        ?>

<script>

function go(){
    var identifiant = '<?php echo $identifiant; ?>';
    var ip = '<?php echo $ip; ?>';
    var port = '<?php echo $port; ?>';

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port},
    function(data) {
     $('#results4').html(data);

    });

}
go();
$(document).ready(function(){
 setInterval(go,10000);
});
</script>

<div id="results">
</div>
<div id="results2">
</div>
<div id="results3">
</div>
<div id="results4">
</div>

                                                            </center>
                                                        </td>
                                                    </tr>
                                                                                            </tbody>
                                        </table>                                                                      
                                </div>
                            </div>
                        </div>
                        <?php
        }
?>

Une fois ma page totalement chargée, c'est à dire que chaque tableau contient les infos qui lui appartiennent, une requête AJAX est envoyée a un autre serveur qui récupère un pourcentage.
Voila ce que sa donne -> http://prntscr.com/kobafd ( à la place du Nan c'est un pourcentage dans le réel ;) )

Comme vous avez pu le voir la requete ajax fait appel à un fichier script.php que voici :


<?php
$identifiant = $_POST['identifiant'];
$ip = $_POST['ip'];
$port = $_POST['port'];

$connection_string = ssh2_connect($ip, $port);

// $connection_string = ssh2_connect('127.0.0.1', 22);

if (@ssh2_auth_password($connection_string, 'tobi', 'MDP'))
{

}
else
{
    throw new Exception("Authentication failed!");
    echo'Connexion échouée, le serveur est surement down ! ';
}

$stream = ssh2_exec($connection_string, 'php /var/www/html/autre.php '.$identifiant);

stream_set_blocking($stream, true);

$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

$pourcentage = stream_get_contents($stream_out);
echo $pourcentage;
?>
<table style="width:100%;">
                                            <tbody>
                                                <div class="alert alert-info">
                                                                    <div class="container-fluid">
                                                                        <b>CHargement : 
                                                                            <script>

                                                                            </script>
                                                                            <?php

                                                                                $pourcentage = trim($pourcentage);

                                                                            ?>
                                                                                  </b>
                                                                        </div>
                                                                </div>
                                                     <tr>
                                                        <style>
                                                        .progress {background: rgba(227, 227, 227, 1); border: 1px solid rgba(163, 148, 148, 1); border-radius: 25px; height: 24px;}
.-progressbar {background: rgba(4, 192, 209, 1);} 
.progress-striped -progressbar {background-color: rgba(4, 192, 209, 1); background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255, 255, 255, 0.15),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255, 255, 255, 0.15)),color-stop(0.75,rgba(255, 255, 255, 0.15)),color-stop(0.75,transparent),to(transparent))); background-image: -webkit-linear-gradient(45deg,rgba(255, 255, 255, 0.15) 25%,transparent 25%,transparent 50%,rgba(255, 255, 255, 0.15) 50%,rgba(255, 255, 255, 0.15) 75%,transparent 75%,transparent); background-image: linear-gradient(45deg,rgba(255, 255, 255, 0.15) 25%,transparent 25%,transparent 50%,rgba(255, 255, 255, 0.15) 50%,rgba(255, 255, 255, 0.15) 75%,transparent 75%,transparent); background-size: 40px 40px;}
</style>

                                                <div class="col-md-6 col-md-offset-3">

                                                 <div class="progress progress-striped">
    <div class="progress-bar cust-progressbar active" role="progressbar" aria-valuenow="<?php echo $pourcentage; ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $pourcentage;?>%;">
        <?php echo $pourcentage; ?> prêt
    </div>
</div>

                                            </div>
                                             </tr>
                                                                                            </tbody>
                                        </table>

Et comme vous l'avez vu dans le deuxième screen, il y a une barre bleu qui s'est affichée par rapport au premier screen, c'est le resultat de la requete ajax, mais malheureusement mon problème est la.

Le pourcentage change ce qui est normal car je recharge ajax, et la requete ajax prend pour valeur le deuxième identifiant du tableau, et bien sur le rectangle reste dans le premier service du tableau ce qui devient incorrect...

Donc en clair ;) J'ai un problème pour executer cette requete ajax pour chacun des services et que le résultat s'affiche en dessous de chaque service ! ( sa semble tellement facile à dire .. xD )

Voila le réusltat révée :) , Make me dream :) : http://prntscr.com/kobd4z
Merci d'avoir lu !

27 réponses


Bonsoir.
La valeur d'un attribut id doit être unique sur une page, sauf que toi, en plus de répéter un script javascript et un script css, tu répêtes également des éléments HTML qui répêtent les valeurs d'attribut id.
Donc, pour commencer, sort les scripts Javascript et css de ta boucle PHP, ainsi que les <div id="results"></div><div id="results2"></div><div id="results3"></div><div id="results4"></div>.
Car tu auras beau répéter ses éléments HTML, le javascript sélectionnera toujours le premier élément ayant comme valeur d'attribut id results4.

Je répète un script css ? Ah , je vois pas xD

<?php
if(isset($TAB){
    ?>
          <div class="content">
                <div class="container-fluid">
                    <div class="row">

                    <h3 class="title text-center">Mes TAB</h3>
                    <?php
                }
                    $sql = "SELECT * FROM TAB WHERE user_id = '$user_id'";
                    $req = $db->query($sql);
                    $req->setFetchMode(PDO::FETCH_ASSOC);

                    foreach($req as $row)
                    {

                    ?>

                        <div class="col-md-8 col-md-offset-2">
                            <br />
                            <div class="card">
                                <div class="card-content table-responsive">
                                    <style type="text/css">
                                        .text_align_right { text-align: right; }
                                        .text_align_left  { text-align: left; }
                                        .td1              { width: 50%; }
                                        .first-half       { text-align: right; float: left; width: 50%; }
                                        .second-half      { float: right; width: 50%; }
                                    </style>
                                                                        <table class="table table-hover">
                                        <tbody>
                                            <tr>
                                                <td class="text_align_right td1">Type d'offre :</td>
                                                <td>

                                                    <?php
                                                            echo $row['product'];
                                                        ?>
                                                </td>
                                            </tr>
                                            <tr>
                                            <td class="text_align_right">Identifiant :</td>
                                                    <td>
                                                        <?php
                                                            echo $row['identifiant'];
                                                        ?>
                                                    </td>
                                            </tr>                                            

                                             <tr>
                                                <td class="text_align_right">Serveur :</td>
                                                <td>
                                                <?php
                                                    echo $row['serveur'];
                                                    $numserveur = $row['serveur'];
                                                ?>
                                                </td>
                                             </tr>

                                             <tr>
                                                <td class="text_align_right"><strong>TEST :</strong></td>
                                                <td><strong>

                                            <?php

                                                $identifiant = $row['identifiant'];
                                            ?>
                                               </strong></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                             <table style="width:100%;">
                                            <tbody>
                                                     <tr>
                                                        <td>
                                                            <center>

   <?php
 $selectip = $db->query("SELECT * FROM serveur WHERE nom='$numserveur'");
                                                            $rip = $selectip->fetch(PDO::FETCH_OBJ);
                                                            $ip = $rip->ip;
                                                            $port = $rip->port;

                                                        ?>

                                                            </center>
                                                        </td>
                                                    </tr>
                                                                                            </tbody>
                                        </table>                                                                      
                                </div>
                            </div>
                        </div>
                        <?php
        }
?>

<script>

function go(){
    var identifiant = '<?php echo $identifiant; ?>';
    var ip = '<?php echo $ip; ?>';
    var port = '<?php echo $port; ?>';

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port},
    function(data) {
     $('#results4').html(data);

    });

}
go();
$(document).ready(function(){
 setInterval(go,10000);
});
</script>
<div id="results4">
</div>

Dans ce code, le script ainsi que le div id sont sortit de la boucle ( PS : Les result , result 2 , result3 ne sont pas pour le code présent ici , ils sont le retour d'autre fonction appelé au clic.

Pour ce code seul le result4 nous intéresse, j'ai enlevé les 3 autres.

Ce n'est pas du code css là juste après l'ouverture de ta boucle foreach ?

                    foreach($req as $row)
                    {

                    ?>

                        <div class="col-md-8 col-md-offset-2">
                            <br />
                            <div class="card">
                                <div class="card-content table-responsive">
                                    <style type="text/css"><-- ICI !!! -->
                                        .text_align_right { text-align: right; }
                                        .text_align_left  { text-align: left; }
                                        .td1              { width: 50%; }
                                        .first-half       { text-align: right; float: left; width: 50%; }
                                        .second-half      { float: right; width: 50%; }
                                    </style>

J'y ai pensé juste après oui biensur ! mais il me le faut absolument c'est lui qui me sentre les deux , ou X tableau qui suivent, si je le place juste avant la boucle seul le premier tableau est centré

Absolument pas, un code CSS s'applique à toute une page et non juste à une partie de code HTML qui suit le dit code.

[EDIT] Ok je viens de comprendre, j'avais pas fait cette réduction dans ma tête, le style est désormais sortit de la boucle
Donc maintenant l'affichage des tableau est correct par contre le div s'affiche sur tous les ecran, j'imagine qu'il faut juste appliquer de nouvelles propriétées dans le script.php non ?

Et maintenant pour qu'ajax s'execute plusieurs fois avec des id différents et qu'il s'affiche en dessous de chaque tableau tu vois comment faire ?

pour moi ton fichier script n'est pas bon :
script.php

<?php
$identifiant = $_POST['identifiant'];
$ip = $_POST['ip'];
$port = $_POST['port'];

$connection_string = ssh2_connect($ip, $port);

if (@ssh2_auth_password($connection_string, 'tobi', 'MDP')){
    $stream = ssh2_exec($connection_string, 'php /var/www/html/autre.php '.$identifiant);
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    $pourcentage = stream_get_contents($stream_out);
    header("HTTP/1.1 200 OK");
    echo json_decode(["pourcentage"=>$pourcentage]);
}else{
    header("HTTP/1.1 401 Unauthorized");
    echo json_decode(["error"=>"Authentication failed!"]);
}
?>

ça dois te renvoyer genre en cas de success:

{"pourcentage":"30"}

avec ça apres dans ton javascript tu genere la barre de pourcentage (avec bootstrap) :

<div class="progress" id="ICI-ID-UNIQUE">
  <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
    <span class="sr-only">60% Complete</span>
  </div>
</div>

Bonjour, et merci pour ta réponse, désolé mais la je mouline en me demandant si je garde les modifs que l'on m'a demandé de faire ou non.. Voila le code réecrit en tenant compte de vos deux modifs, est-ce bien cela que tu pense ?

<?php
if(isset($TAB){
    ?>
          <div class="content">
                <div class="container-fluid">
                    <div class="row">

                    <h3 class="title text-center">Mes TAB</h3>
                    <?php
                }
                    $sql = "SELECT * FROM TAB WHERE user_id = '$user_id'";
                    $req = $db->query($sql);
                    $req->setFetchMode(PDO::FETCH_ASSOC);

?>

<style type="text/css">
                                        .text_align_right { text-align: right; }
                                        .text_align_left  { text-align: left; }
                                        .td1              { width: 50%; }
                                        .first-half       { text-align: right; float: left; width: 50%; }
                                        .second-half      { float: right; width: 50%; }
                                    </style>

                                    <?php 
                    foreach($req as $row)
                    {

                    ?>
                        <div class="col-md-8 col-md-offset-2">
                            <br />
                            <div class="card">
                                <div class="card-content table-responsive">

                                                                        <table class="table table-hover">
                                        <tbody>
                                            <tr>
                                                <td class="text_align_right td1">Type d'offre :</td>
                                                <td>

                                                    <?php
                                                            echo $row['product'];
                                                        ?>
                                                </td>
                                            </tr>
                                            <tr>
                                            <td class="text_align_right">Identifiant :</td>
                                                    <td>
                                                        <?php
                                                            echo $row['identifiant'];
                                                        ?>
                                                    </td>
                                            </tr>                                        

                                             <tr>
                                                <td class="text_align_right">Serveur :</td>
                                                <td>
                                                <?php
                                                    echo $row['serveur'];
                                                    $numserveur = $row['serveur'];
                                                ?>
                                                </td>
                                             </tr>
                                             <tr>
                                                <td class="text_align_right"><strong>TEST :</strong></td>
                                                <td><strong>
                                            <?php
                                                $identifiant = $row['identifiant'];
                                            ?>
                                               </strong></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                             <table style="width:100%;">
                                            <tbody>
                                                     <tr>
                                                        <td>
                                                            <center>

   <?php
 $selectip = $db->query("SELECT * FROM serveur WHERE nom='$numserveur'");
                                                            $rip = $selectip->fetch(PDO::FETCH_OBJ);
                                                            $ip = $rip->ip;
                                                            $port = $rip->port;
                                                        ?>                                       
                                                        </center>
                                                        </td>
                                                    </tr>
                                                                                            </tbody>
                                        </table>                                                                      
                                </div>
                            </div>
                        </div>
                        <?php
        }
?>

<script>
function go(){
    var identifiant = '<?php echo $identifiant; ?>';
    var ip = '<?php echo $ip; ?>';
    var port = '<?php echo $port; ?>';

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port},
    function(data) {
     $('#results4').html(data);
    });
}
go();
$(document).ready(function(){
 setInterval(go,10000);
});
</script>

<div id="results4">
</div>

Et le script.php

<?php
$identifiant = $_POST['identifiant'];
$ip = $_POST['ip'];
$port = $_POST['port'];

$connection_string = ssh2_connect($ip, $port);

if (@ssh2_auth_password($connection_string, 'tobi', 'MDP')){
    $stream = ssh2_exec($connection_string, 'php /var/www/html/autre.php '.$identifiant);
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    $pourcentage = stream_get_contents($stream_out);
    header("HTTP/1.1 200 OK");
    echo json_decode(["pourcentage"=>$pourcentage]);

    <div class="progress" id="<?php echo $identifiant ?>">
  <div class="progress-bar" role="progressbar" aria-valuenow="<?php echo trim($pourcentage) ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo trim($pourcentage) ?>%;">
    <span class="sr-only"><?php echo trim($pourcentage) ?>% Complete</span>
  </div>
</div>

}else{
    header("HTTP/1.1 401 Unauthorized");
    echo json_decode(["error"=>"Authentication failed!"]);
}
?>

J'espère ne pas mettre raté..

Première chose qui ne va pas, ta déclaration des variables sur ta page, à chaque tour de ta boucle foreach, les variables seront écrasés et tu ne te retrouvera qu'avec la dernière déclaration, le mieux serait que tu définisses une variable avant ta boucle PHP, exemple :

$data = [];

Puis à chaque tour de boucle, tu y ajoute un nouveau tableau :

$data[] = [
    'identifiant' => $identifiant,
    'ip' => $ip,
    'port' => $port
];

De cette manière tu te retrouvera avec un tableau du genre :

[
    ['identifiant' => 'joe', 'ip' => '192.168.89.65', 'port' => 265],
    ['identifiant' => 'jack', 'ip' => '192.168.95.25', 'port' => 285],
    // etc
]

Ensuite il te suffit de définir une variable au niveau de ton javascript, qui contiendra ce tableau mais sous format json bien sùr, il te suffira par la suite de boucler ce tableau au niveau javascript :

var data = '<?= json_encode($data) ?>';
function go()
{
    $.each(data, function(user) {
        var identifiant = user.identifiant, port = user.port, ip = user.ip;
        // puis ton appel ajax
    });
}

La seconde chose qui ne va pas, est au niveau de ton fichier script.php, tu ne peux pas écrire du code HTML dans du code PHP comme ça, soit tu définies ta chaîne HTML dans une variable, exemple :

$html = '<div class="progress" id="' . $identifiant . '">
  <div class="progress-bar" role="progressbar" aria-valuenow="' . trim($pourcentage) . '" aria-valuemin="0" aria-valuemax="100" style="width: ' . trim($pourcentage) . '%;">
    <span class="sr-only">' . trim($pourcentage) . '% Complete</span>
  </div>
</div>';

Puis tu renvoies la variable avec celle nommée pourcentage, ou alors tu fermes et rouvre la balise PHP autour du HTML.
Dernière chose qui ne va pas, concerne ton retour pour l'ajax, tu envoies une variable nommée pourcentage mais à quoi ça sert si tu ne l'utilise pas par la suite ?
Surtout que comme côté PHP, en javascript tu réécrit par dessus les retour précédent, du coup dans ta div ayant l'ID results4, tu ne te retrouvera qu'avec le résultat de ton dernier appel ajax.

Merci pour cette réponse explicite, je test ton code a 18H !
La variable poucentage renvoyée ne servait qu'à vérifie que le poucentage s'affichait correctement.

Au final que dois-je faire de ma div result4 ?
Sommes nous d'accord sur le fait de sortir la fonction go ainsi que la result4 de la boucle php ? Ou au contraire la mettre à l'intérieur de la boucle ?

Voila la modification du code PHP tel que je l'ai compris.
J'ai commenté les ajouts pour se repérer.

Avec le code ci dessous, sur la page il ne se passe aucun ajout de barre de progress, en allant dans le console il me rapport une erreur dans la fonction go de parenthèse, j'imagine qu'il y a un problème de syntaxe, j'ai surement mis une chose qu'il ne fallait pas..

A titre indicatif, en allant dans le code source, le tableau "data" récupère bien les valeurs :

var data = '[{"identifiant":"id1","ip":"7.7.7.7","port":"5656"},{"identifiant":"id2","ip":"8.8.8.8","port":"896"}]';

<?php
if(isset($TAB)){
    ?>
          <div class="content">
                <div class="container-fluid">
                    <div class="row">

                    <?php
                }
                    $sql = "SELECT * FROM TAB WHERE user_id = '$user_id'";
                    $req = $db->query($sql);
                    $req->setFetchMode(PDO::FETCH_ASSOC);
                    ?>
                    <style type="text/css">
                                        .text_align_right { text-align: right; }
                                        .text_align_left  { text-align: left; }
                                        .td1              { width: 50%; }
                                        .first-half       { text-align: right; float: left; width: 50%; }
                                        .second-half      { float: right; width: 50%; }
                                    </style>

<?php
<!-- Ajout --!>
$data = [];
<!-- Fin --!>

                    foreach($req as $row)
                    {
                    ?>
                        <div class="col-md-8 col-md-offset-2">
                            <br />
                            <div class="card">
                                <div class="card-content table-responsive">
                                                                                                            <table class="table table-hover">
                                        <tbody>
                                            <tr>

                                                <td>
                                                    <?php
                                                            echo $row['product'];
                                                        ?>
                                                </td>
                                            </tr>
                                            <tr>
                                            <td class="text_align_right">Identifiant :</td>
                                                    <td>
                                                        <?php
                                                            echo $row['identifiant'];
                                                        ?>
                                                    </td>
                                            </tr>                                                                                        
                                            </tr>
                                        </tbody>
                                    </table>
                                             <table style="width:100%;">
                                            <tbody>
                                                     <tr>
                                                        <td>
                                                            <center>
                                                                <div class="alert alert-info">
                                                                    <div class="container-fluid">                                                                        <b>Info :

                                                                            <?php
                                                                                echo $row['status'];
                                                                            ?>

                                                                                  </b>
                                                                        </div>
                                                                </div>
   <?php
 $selectip = $db->query("SELECT * FROM serveur WHERE nom='$numserveur'");
                                                            $rip = $selectip->fetch(PDO::FETCH_OBJ);
                                                            $ip = $rip->ip;
                                                            $port = $rip->port;

                                                        ?>
                                                            </center>
                                                        </td>
                                                    </tr>
                                                                                            </tbody>
                                        </table>
                                </div>
                            </div>
                        </div>

  <!-- Ajout --!>                      
         <?php
          $data[] = [
    'identifiant' => $identifiant,
    'ip' => $ip,
    'port' => $port
];

<!-- Fin --!>

<!-- Sortie boucle php--!>

        }

?>
<script>

<!-- Ajout --!>

    var data = '<?= json_encode($data) ?>';

    function go(){
    $.each(data, function(user) {
    var identifiant = user.identifiant, port = user.port, ip = user.ip;

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port},
    function(data) {
     $('#results4').html(data);

    });

}
}

go();
$(document).ready(function(){
 setInterval(go,10000);
});

</script>

<div id="results4">
</div>

script.php

<?php
$identifiant = $_POST['identifiant'];
$ip = $_POST['ip'];
$port = $_POST['port'];

$connection_string = ssh2_connect($ip, $port);

// $connection_string = ssh2_connect('127.0.0.1', 22);

if (@ssh2_auth_password($connection_string, 'tobi', MDP')){
  $stream = ssh2_exec($connection_string, 'php /var/www/html/autre.php '.$identifiant);
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    $pourcentage = stream_get_contents($stream_out);
    header("HTTP/1.1 200 OK");
    echo json_decode(["pourcentage"=>$pourcentage]);

    $html = '<div class="progress" id="' . $identifiant . '">
  <div class="progress-bar" role="progressbar" aria-valuenow="' . trim($pourcentage) . '" aria-valuemin="0" aria-valuemax="100" style="width: ' . trim($pourcentage) . '%;">
    <span class="sr-only">' . trim($pourcentage) . '% Complete</span>
  </div>
</div>';
echo json_decode(["html"=>$html]);

}else{
    header("HTTP/1.1 401 Unauthorized");
    echo json_decode(["error"=>"Authentication failed!"]);
}
?>

C'est normal puisque tu envoies les données depuis le code PHP vers ton javascript sous forme de variables, du coup tu essaies d'insérer une variable dans du code HTML, ce qui ne risque pas de fonctionner et puis si tu ne te sert plus de la variable $pourcentage dans le javascript, pourquoi l'envoies tu toujours dans celui-ci ?
Tu devrais regarder dans l'inspecteur de ton navigateur pour voir quel est le retour que ton ajax reçoit.
Et comme je te l'ai déja dit, à chaque boucle dans ton javascript, tu écrases le contenu précédemment injecté dans ton élément HTML si tu continues comme tu le fais actuellement.
Je veux bien t'aider, mais je ne vais pas non plus te donner la solution de A à Z.

Le premier problème c'est que je n'arrive pas à comprendre l'endroit ou doit être placé ma fonction go() ainsi que le result4.
Selon moi à l'endroit ou il est placé actuellement , c'est le bon , à chaque boucle sont contenu n'est pas effacé.

Ok pour la variable $pourcentage , j'enlève cette ligne :

echo json_decode(["pourcentage"=>$pourcentage]);

"Tu écrase le contenu" ->
Pourtant j'ai adapté comme tu l'a montré avec la variable $html.

Et l'autre problème dans ma tête c'est est-ce que ma fonction go en tenant compte de ta modification est correcte ou non ?

Je vais tenter de voir le retour qu'ajax reçoit, encore désolé si je mouline...

Pour moi ton fichier Script.php ne devrai renvoyer que du Json ...
soit le pourcentage {"pourcentage":50} .... soit une erreur ...

comme ça tu as un petit fichier leger que tu peu re-utilisé si tu as a nouveau besoin de recuperé le % de quelque chose ... pourquoi le saturé d'HTML ?

le HTML avec la progress bar tu la fais generé par le javascript , basé sur le % ...

<script type="text/javascript">
$.ajax({
        method: "POST",
        url: "script.php",
        cache: false,
        dataType: "json"
        data: { identifiant: "John", ip: "127.0.0.1", port: "22" },
        success:function(data){
                console.log(data);
// ici tu recupere pourcentage via la variable data.pourcentage .... et tu genere du HTML
            $( "#id" ).html("ici ma barre de progression");
        },
        error:function(msg){
                console.log(msg);
        }
});

</script>

Le premier problème c'est que je n'arrive pas à comprendre l'endroit ou doit être placé ma fonction go() ainsi que le result4.

Il faut qu'elle se trouve en dehors de ta boucle PHP, soit après celle-ci et logiquement après que tu aies définies la variable qu'utilisera ta fonction go.
Pour ce qui concerne ton élément avec l'ID result4, tu auras forcément des problèmes si tu continues à utiliser un seul élément HTML pour les différentes progressbar.

Selon moi à l'endroit ou il est placé actuellement , c'est le bon , à chaque boucle sont contenu n'est pas effacé.

La méthode html insére le contenu dans l'élément, elle ne va donc pas regarder s'il y a déja du contenu ou non, elle va donc écraser le contenu qu'il peut y avoir dans cet élément.
Par contre, ça m'étonne que tu n'aies pas de problème avec la variable identificant, étant donné que contrairement aux variables ip et port, tu ne la définie à aucun moment dans ta page.

Et l'autre problème dans ma tête c'est est-ce que ma fonction go en tenant compte de ta modification est correcte ou non ?

Utilises la méthode du debug pour voir comment tu reçois les données dans la variable user, je te donnes des pistes et des explications, ça ne veut pas pour autant dire que tu dois utiliser le code tel que je te le donne, sinon tu n'apprendras jamais.
Autre chose, tu dis que le fichier php vers lequel tu fais ta requête Ajax se nomme script.php sauf que dans ton appel Ajax de ton dernier post, tu fais appel à un fichier nommé scripttaille.php.

Merci à vous , mais si chacun propose des modifications totalement différentes , je ne sais même plus quoi tester..
A chaque fois j'adapte le code mais à force il doit rester des poussières..
Ce que je remarque c'est qu'avec chacun de vos codes la page script.php n'est executée, il ne se passe strictement rien dans la console et donc rien en retour

La variable $identifiant est définie dans le code ( source mon premier code : $identifiant = $row['identifiant']; "
( dans le dernier post, j'ai enlevé les parties artificielle pour avoir un code petit )

EDIT : Oui tinquiète pour sa j'adapte

EDIT : Pour utiliser un id unique on est d'accord que cette modification convient ? :

<script>

    var data = '<?= json_encode($data) ?>';

    function go(){
    $.each(data, function(user) {
    var identifiant = user.identifiant, port = user.port, ip = user.ip;

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port, id:id},
    function(data) {
     $('#id').html(data);

    });

}
}

go();
$(document).ready(function(){
 setInterval(go,10000);
});

</script>

<div id="<?php echo $identifiant; ?>">
</div>

Bonjour

Quelque chose qui peut t'être aussi utile c'est l'onglet Network de ton Inspecteur sur Google Chrome et Firefox, en cliquant sur XHR tu peux voir toutes les requêtes ajax exécuté sur ta page et en cochant "Preserve log" (sur Chrome) tu pourras conserver tes résultats même après un rechargement. Essaye de voir ce que tu as en retour et si t'as requête à bien fonctionné.

Tu ne peux pas faire ceci, en faisant ceci tu obtiens la réponse "Undefined".

var identifiant = user.identifiant, port = user.port, ip = user.ip;

Si tu veux séparer par une virgule ces différentes informations tu dois expliquer à jQuery que ta virgule est une chaine de caractère, et donc dans ce cas pas besoin de déclarer une nouvelle variable :

var identifiant = user.identifiant + ', ' + user.port + ', ' + user.ip;

Sinon il existe aussi deux méthode qui font le même job :

La méthode serializeArray me semble être plus adapté à ton cas, tu dois par contre changer les données que tu passes dans ta requête tu veux que tu passes de plusieurs donnée à une seul grosse chaine de caractère, je te laisse lire la doc pour mieux comprendre.

Et si tu veux juste déclarer différents variable, tu peux le faire en ligne, par contre pour bien expliquer à jQuery que tu change de variable tu devras impérativement mettre un point virgule

var identifiant = user.identifiant; var port = user.port; var ip = user.ip;

Peut être que tu ne nous montre pas le code en entier, mais je ne vois pas où est ce que tu récupère la variable id mise dans ta requête Ajax.

Lu, et adapté, vous avez le code pratiquement en entier, seul certains champs sont enlevés car ils ne nous servent pas du tout ici, désolé pour l"id c'est "identifiant"

<script>
    var data = '<?= json_encode($data) ?>';
    function go(){
    $.each(data, function(user) {
    var identifiant = user.identifiant;
    var port = user.port;
    var ip = user.ip;

    $.post("script.php", { identifiant: identifiant, ip:ip, port:port},
    function(data) {
     $('#identifiant').html(data);
    });
}
};

go();
$(document).ready(function(){
 setInterval(go,5000);
});
</script>

<div id="<?php echo $identifiant; ?>">
</div>

Comme dis plus haut, aucun ajax n'est executée , donc rien n'est visible dans HXR, la console ma rapporte cette erreur : http://prntscr.com/kp5z9l "Uncaught SyntaxError: missing ) after argument list"

Le script.php n'a pas changé depuis :

<?php
$identifiant = $_POST['identifiant'];
$ip = $_POST['ip'];
$port = $_POST['port'];

$connection_string = ssh2_connect($ip, $port);

// $connection_string = ssh2_connect('127.0.0.1', 22);

if (@ssh2_auth_password($connection_string, 'tobi', 'MDP')){
  $stream = ssh2_exec($connection_string, 'php /var/www/html/autre.php '.$identifiant);
    stream_set_blocking($stream, true);
    $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
    $pourcentage = stream_get_contents($stream_out);
    header("HTTP/1.1 200 OK");

    $html = '<div class="progress" id="' . $identifiant . '">
  <div class="progress-bar" role="progressbar" aria-valuenow="' . trim($pourcentage) . '" aria-valuemin="0" aria-valuemax="100" style="width: ' . trim($pourcentage) . '%;">
    <span class="sr-only">' . trim($pourcentage) . '% Complete</span>
  </div>
</div>';
echo json_decode(["html"=>$html]);

}else{
    header("HTTP/1.1 401 Unauthorized");
    echo json_decode(["error"=>"Authentication failed!"]);
}
?>

http://prntscr.com/kp5z9l "Uncaught SyntaxError: missing ) after argument list"

Cette erreur t'indique qu'il manque une parenthèse à un endroit.
Tu as normalement un numéro de ligne en lien avec cette erreur, si tu as pensé à activer le preserve log il ne l'a pas enlevé. (normalement il y le nom de ton fichier:le numéro de la ligne exemple : app.js:120).

Le problème est qu'il n'y a pas de parenthèse en trop.. , regarde les parenthèses d'ouverture et de fermeture , je viens encore de vérifié, non aucune en trop : http://prntscr.com/kp64cr

Dans ce cas là c'est qu'il a mal interprété ton code, mais il y a forcément un problème quelque part, il n'est pas du genre à se tromper.

Le problème est qu'il n'y a pas de parenthèse en trop.. , regarde les parenthèses d'ouverture et de fermeture , je viens encore de vérifié,

Même la capture d'écran de ton inspecteur ou de ton éditeur de code te prouve que si, si tu regardes bien à la fin, il te l'indique avec le cercle rouge avec une croix blanche.
Il ne te faut pas confondre parenthèses ( ) et accolades { }.

Normalement les trois derniers caractères que tu devrais avoir, devraient être ceci :

    }); // Là il te manque bien une parenthèse, de la méthode each !!!
}

Sauf que toi tu as :

    }
}

Et puis, missing veut dire manquant/absent dans ce cas là et non en plus.

Bien vu Latrak Le Linx ;) , une fois cette erreur corrigée, il est apparu celle-ci , Uncaught TypeError: Cannot use 'in' operator to search for 'length' , corrigée par

$.each(JSON.parse(data), function(user){

Maintenant le problème dans la console est une erreur 401 , dans le xhr, la réponse est vide

[EDIT] Le code actuel est le dernier message de la page 1.

Ce n'est pas json_decode que tu dois utiliser pour renvoyer les données à ta requête Ajax, mais json_encode.
Et puis pour utiliser ce qui est contenu dans ta variable html, tu dois accéder à la propriété html de la variable data, soit par exemple :

$('#results4').html(data.html);

En modifiant par encode, et en adaptant la ligne par

$('#identifiant').html(data.html);

Je me retrouve avec pour réponse d'AJAX dans la boucle else :

else{
    header("HTTP/1.1 401 Unauthorized");
    echo json_encode(["error"=>"Authentication failed!"]);
}

J'ai une Authentification Failed, le port est OK, user OK, MDP OK
Je suis sur que le problème ne vient pas de l'authentification, problème identique pour se connecter à un autre serveur et le problème n'est pas présent avec mon premier code posté dans le forum.

[EDIT] Re testé mon ancien code, et toujours ok, le problème viens donc de la fonction go

Vous ne voyez pas l'erreur ? :(

@Lartak et @Laznet aucune idée ? Je cherche désespérement.. :(