Page 1 sur 1

Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 08:14
par wagscd
Bonjour à toutes et à tous,

Encore moi :oops:

J'ai une table mysql contenant des données qui sont affectées à un "bot" par le biais d'un champ ID.

Certains "bot" ont plusieurs lignes de données qui leur sont attribuées par le biais de cet ID.

J'ai une page php où je sélectionne un bot et ça m'amène à une page xxxx.php?editId=XX
Jusque là tout va bien.

J'ai des données provenant de diverses tables et le tri est bon mais cette fois-ci, ma table ayant plusieurs données pour le même ID, je n'ai l'affichage que de la première ligne trouvée avec l'ID correspondant.

Ceci est le code permettant le "filtrage par ID"
 $row_backtest	=	$db->getAllRecords('tbl_backtest','*',' AND num_bot_backtest="'.$_REQUEST['editId'].'"');
Je suppose qu'il y a une histoire de tant que ou de boucle mais j'arrive pas à comprendre comment intégrer cela dans cette partie de code.

Merci d'avance pour votre aide?

Je vous souhaite une bonne journée.

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 11:21
par @rthur
Alors il faut effectivement faire une boucle, mais pas dans cette ligne là à priori, mais plutôt après.
Sans connaitre ton code ni la fonction getAllRecords() c'est difficile de t'en dire plus.

Si getAllRecords() renvoie plusieurs résultats (fait un var_dump($row_backtest) pour le savoir) alors tu devrai pouvoir faire une boucle pour les afficher un par un

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 14:33
par wagscd
Bonjour @rthur,

Merci pour ta réponse.

En fait j'ai fait un test sans "filtre editID" et j'ai bien la liste complète en utilisant ce code.
<?php
	
	$userData	=	$db->getAllRecords('tbl_backtest','*','ORDER BY id_backtest ASC');
	?>
Et celui-ci pour afficher le tableau
<?php 
					if(count($userData)>0){
						$s	=	'';
						foreach($userData as $val){
							$s++;
					?>

                    <tr>
                        <td align="center">
                            <?php echo $val['date_backtest'];?>
                        </td>

Le code getAllRecords est
public function getAllRecords($tableName, $fields='*', $cond='', $orderBy='', $limit='')
    {
        //echo "SELECT  $tableName.$fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
        //print "<br>SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
        $stmt = $this->pdo->prepare("SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit);
        //print "SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." " ;
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }  
Ok pour le var_dump mais où et combien ?

J'ai lu la doc php (du coup, je comprends à quoi ça sert mais ....

Merci pour vos aides.

Bonne journée ;)

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 14:43
par or 1
si cela marche sans la condition, il faut enlever le commentaire de
//echo "SELECT $tableName.$fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
exécuter la requête dans phpmyadmin et comprendre, si cela n'affiche pas tout ce qui attendu, pourquoi.

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 15:02
par wagscd
Oui sans condition, j'ai bien la liste complète, toute la table s'affiche. Pas de souci.

Le filtre editID fonctionne aussi puisque j'ai la première ligne contenant l'ID qui s'affiche mais pas les suivantes.

@ or 1 : on ne parle plus de boucle là ?

Merci

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 15:14
par or 1
si tout s'affiche sans condition, c'est que la boucle fait son travail. si avec la condition, il n'y a qu'une ligne, c'est que la requête ne retourne qu'une seule ligne. il faut donc vérifier dans phpmyadmin, regarder si les tables ont bien un contenu qui fait qu'avec la condition, il devrait y avoir plusieurs résultats.

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 19:47
par wagscd
Merci pour cette indication.

Je fouille tout ça.

Bonne soirée

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 08 avr. 2021, 20:28
par wagscd
Voilà fouille effectuée ;)

Quand je fais ceci dans phpmyadmin
SELECT * FROM tbl_backtest where num_bot_backtest = "2";
Cela fonctionne parfaitement. J'ai bien toutes les données du bot 2.

J'ai donc vérifié le fonctionnement de mes autres pages qui dépendent de la page principale et le code est identique.
if(isset($_REQUEST['editId']) and $_REQUEST['editId']!=""){
	$row_bot_detail	=	$db->getAllRecords('tbl_bot_details','*',' AND num_bot_bot_details="'.$_REQUEST['editId'].'"');
        $row_nom_bot	=	$db->getAllRecords('tbl_nom_bot','*',' AND id_nom_bot="'.$_REQUEST['editId'].'"');
        $row_capital	  =	$db->getAllRecords('tbl_capital','*',' AND num_bot_capital="'.$_REQUEST['editId'].'"');
       $row_backtest	=	$db->getAllRecords('tbl_backtest','*',' AND num_bot_backtest="'.$_REQUEST['editId'].'"');
   
}
Cela renvoie donc à ceci
public function getAllRecords($tableName, $fields='*', $cond='', $orderBy='', $limit='')
    {
        //echo "SELECT  $tableName.$fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
        //print "<br>SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit;
        $stmt = $this->pdo->prepare("SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit);
        //print "SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." " ;
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }  
Et mes codes des autres pages sont dans ce genre
<div class="container">
    <div class="row justify-content-md-center">

        <div class="col-sm-2">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">Capital Crypto</h5>
                    <p class="card-text">
                        <?php echo $row_capital[0]['capital_crypto_capital'];?>
                    </p>
                </div>
            </div>
        </div>

        <div class="col-sm-2">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">Capital Dollar</h5>
                    <p class="card-text">
                        <?php echo $row_capital[0]['capital_dollar_capital'];?>
                    </p>
                </div>
            </div>
        </div>

        <div class="col-sm-1.5">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">Levier</h5>
                    <p class="card-text">
                        <?php echo $row_capital[0]['levier_capital'];?>
                    </p>
                </div>
            </div>
        </div>

        <div class="col-sm-2">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">Remarques</h5>
                    <p class="card-text">
                        <?php echo $row_capital[0]['remarques_capital'];?>
                    </p>
                </div>
            </div>
        </div>

                
        <div class="ml-auto">
            <p class="card-text-nom-action">Capital : <a href="capital-edit.php?editId=<?php echo $_REQUEST['editId'];?>" class="text-primary"><i class="fa fa-fw fa-edit"></i> Edit</a></p>
        </div>

    </div>
</div>
Cela fonctionne parce que les autres pages n'ont qu'une seule ligne de données correspondant à l'ID sélectionné.

Dans le cas présent de la page backtest, il peut y en avoir plusieurs.


Merci.

Bonne soirée.

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 09 avr. 2021, 11:00
par wagscd
Re bonjour,

J'ai fait un test complet dans un fichier et ça fonctionne mais alors comment adapter le code et récupérer ce fameux editID ????
<?php
	$userData	=	$db->getAllRecordslist($sql=
    "SELECT * FROM tbl_backtest 
    where num_bot_backtest = '3'"
    );
	?>

<tbody>
                    <?php 
					if(count($userData)>0){
						$s	=	'';
						foreach($userData as $val){
							$s++;
					?>

                    <tr>
                        <td align="center">
                            <?php echo $val['date_backtest'];?>
                        </td>
                        <td align="center">
                            <?php echo $val['net_profit_backtest'];?>
                        </td>



Merci d'avance pour votre aide.

Bonne journée

Re: Tableau qui n'affiche qu'une ligne de données alors qu'il y en a plusieurs

Posté : 10 avr. 2021, 10:21
par wagscd
Deuxième auto correction de la matinée, pourvu que ça dure ;);)

J'ai trouvé la solution.

<?php 
          if(count($userData)>0){
            $s	=	'';
            foreach($userData as $val){
              $s++;
          ?>
J'avais oublié de modifier les $ pour que ça corresponde au getallrecord
$row_backtest	=	$db->getAllRecords('tbl_backtest','*',' AND num_bot_backtest="'.$_REQUEST['editId'].'"');

<?php 
					if(count($row_backtest)>0){
						$s	=	'';
						foreach($row_backtest as $row_backtest){
							$s++;
					?>


<?php echo $row_backtest['date_backtest'];?>

Merci à vous pour votre aide et vos pistes.

Bonne journée