Page 1 sur 1

Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 09:58
par wagscd
Bonjour à toutes et à tous,

J'ai fouillé, fouillé partout (enfin pas certain mais j'ai fouillé ;) ) pour trouver comment faire un tableau avec des données provenant de 2 tables différentes.

Avec la base de code que j'ai, je n'arrive à rien.
<?php
	$condition	=	'';
	if(isset($_REQUEST['exchange_bots_details']) and $_REQUEST['exchange_bots_details']!=""){
		$condition	.=	' AND exchange_bots_details LIKE "%'.$_REQUEST['exchange_bots_details'].'%" ';
	}
		
	$userData	=	$db->getAllRecords('tbl_bots_details','*',$condition,'ORDER BY nom_du_bot_bots_details ASC');
	?>

J'ai essayé de trouver si je pouvais utiliser UNION avec getallrecords mais rien trouver qui fonctionne.

<?php 
					if(count($userData)>0){
						$s	=	'';
						foreach($userData as $val){
							$s++;
					?>
                    
                    	
                    <tr>
						
                        <td align="center">      
                            <?php echo $val['nom_du_bot'];?>
                        </td>
                        
                        <td align="center">      
                            <?php echo $val['exchange_bots_details'];?>
                        </td>
                        
                        <td align="center">      
                            <?php echo $val['nom_du_bot_bots_details'];?>
                        </td>
						
                        		
                        <td align="center">
							<a href="bot-detail-edit.php?editId=<?php echo $val['id_nom_bots_details'];?>" class="text-primary"><i class="fa fa-fw fa-edit"></i> Edit</a>
                        </td>

					</tr>
Je voudrais afficher nom_du_bot dans la première colonne. La relation entre les 2 tables se fait id_nom_bot de la table tbl_nom_bot.

Merci d'avance pour votre aide.

Je suis perdu là.

Bonne journée.

Re: Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 12:42
par or 1
il faut arriver à quelque chose comme :
select table1.champ, table2.champ1, table2.champ2 from table1, table2 where table1.id=table2.id and table1.id=4 ORDER BY table1.champ ASC

il faut donc adapter la ligne :
$db->getAllRecords('tbl_bots_details','*',$condition,'ORDER BY nom_du_bot_bots_details ASC')
la fonction getAllRecords ne fait que concaténer des chaines.

Re: Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 13:26
par wagscd
Bonjour Or 1,

Donc tout se joue dans la ligne $db->getAllRecords .....

Je vais regarder de ce côté.

Merci beaucoup.

Re: Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 15:51
par wagscd
Re bonjour,

Je n'arrive à rien. Que des messages d'erreurs ou alors la non prise en compte de la 2eme table.
J'ai pas trouvé grand chose comme info sur getallrecords.

$userData	=	$db->getAllRecords('tbl_bots_details.exchange_bots_details','ORDER BY tbl_bots_details.nom_du_bot_bots_details ASC');

Et dans cette partie du code.
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;
    }

J'ai tenté

$userData	=	$db->getAllRecords('tbl_bots_details','*','ORDER BY nom_du_bot_bots_details ASC');
 $userData1	=	$db->getAllRecords('tbl_nom_bots','*','ORDER BY id_nom_bots ASC');

Mais du coup, j'ai un souci ici

<?php 
					if(count($userData)>0){
						$s	=	'';
						foreach($userData as $val){
							$s++;
                      
					?>
Merci pour votre aide.

Bonne journée

Re: Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 19:44
par or 1
il faut commencer par trouver la bonne syntaxe basée sur
select table1.champ, table2.champ1, table2.champ2 from table1, table2 where table1.id=table2.id and table1.id=4 ORDER BY table1.champ ASC
dans phpmyadmin

ensuite, trouver les arguments à passer à getAllRecords pour que
"SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit
soit égale à la requête sql validée sous phpmyadmin

ou, plus simple, ne pas avoir 2 tables quand une seule suffit (bon, il arrivera bien un moment où il faudra faire une jointure sur 2 tables).

Re: Données de 2 tables dans le même formulaire

Posté : 01 avr. 2021, 19:58
par wagscd
Rebonjour or 1,

Je te remercie pour ta réponse.

Ok je pense comprendre le raisonnement. Vais tenter tout cela et retour ici en espérant avoir trouvé la solution.
ou, plus simple, ne pas avoir 2 tables quand une seule suffit (bon, il arrivera bien un moment où il faudra faire une jointure sur 2 tables).
Tu m'as déjà fait part de cette remarque.
Effectivement dans ce cas, je pourrais regrouper dans une seule table (me suis basé sur ce que j'ai fait en access dont j'ai mis le print screen des tables dans un autre message) Peut-être qu'une table avec une quinzaine de champs ne posera pas de souci de rapidité et de gestion.

Mais effectivement, à un moment, je vais devoir joindre certains tables. Je n'en suis qu'au début du projet même si la majorité des pages seront des "copies" des pages actuelles mais avec des tables différentes.

Bref, merci encore pour ton aide précieuse. Je vais me pencher sur phpmyadmin pour trouver la bonne syntaxe et ensuite ...

Bonne soirée

Re: Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 08:13
par wagscd
Bonjour,

J'ai le code phpmyadmin
SELECT `tbl_nom_bots`.`nom_bots`, `tbl_bots_details`.`id_nom_bots_details`, `tbl_bots_details`.`num_bot_bot_detail`, `tbl_bots_details`.`exchange_bots_details`, `tbl_bots_details`.`nom_du_bot_bots_details`
FROM `tbl_nom_bots`
	, `tbl_bots_details`
where tbl_nom_bots.id_nom_bots=tbl_bots_details.num_bot_bot_detail ;
Je comprends bien le principe mais je n'arrive pas à comprendre comment l'intégrer dans le code existant.
$userData	=	$db->getAllRecords('table','*','ORDER BY champs ASC');
C'est bien à cette ligne qu'il faut faire les modifications mais quand j'ajoute plusieurs choses, cela ne fonctionne pas vu que ça renvoie à ce code ci-dessous (enfin je suppose)
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 ce code me semble prévu pour une seule table ?

Merci d'avance pour votre aide.

Bonne journée.

Re: Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 13:11
par or 1
la fonction getAllRecords nécessite que la requête commence, par select, c'est le cas. qu'il y est ensuite un from, c'est le cas, ensuite un where 1, ce n'est pas le cas mais cela pourrait sans aucun souci. la fonction n'empêche donc en rien à ce qu'il y ai plusieurs tables.

la remplacer par
public function getAllRecords($sql){
$stmt = $this->pdo->prepare($sql);
}
aurait du sens.

Re: Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 15:00
par wagscd
Un grand merci,

Ca fonctionne.

Mais quand même une question.

Le code SELECT est dans la page OK normal.

Cela fait appel à ce code qui est dans database.php.
 public function getAllRecords($sql)
    {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }
Mais le code d'origine 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;
    }
Donc cela risque de me poser des soucis avec les autres pages qui utilisent ce code.

J'ai modifié le getAllRecords par getAllRecords2 dans les 2 fichiers.

Cela fonctionne mais dès que j'ajoute le premier code avec getAllRecords, ça ne fonctionne plus.

Avez-vous une idée ?

Sinon je crée un fichier database_specifique pour les pages qui affichent des listent mais bon ....

Merci d'avance.

Bonne fin de journée

Re: Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 15:05
par or 1
il faut 2 fonctions, que celle qui nécessite plusieurs paramètres s'appelle toujours getAllRecords pour ne pas avoir à changer les autres pages.

public function getAllRecords($tableName, $fields='*', $cond='', $orderBy='', $limit='')
{
getAllRecordsAutreNom("SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit);
}
pour limiter les doublons de code.

Re: Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 15:26
par wagscd
Merci.

Parfait ça fonctionne.

Bizarre que ça n'ait pas fonctionné durant mes tests.

J'ai dû faire une erreur quelque part.

Un très grand merci.

Mon projet avance grâce à toi et à ton aide précieuse.

Je te souhaite un bon week end.

Re: [RESOLU] Données de 2 tables dans le même formulaire

Posté : 02 avr. 2021, 19:04
par or 1
public function getAllRecords($tableName, $fields='*', $cond='', $orderBy='', $limit='')
{
return getAllRecordsAutreNom("SELECT $fields FROM $tableName WHERE 1 ".$cond." ".$orderBy." ".$limit);
}
il manquait le return. mais pour la requête donnée, cette seconde fonction n'est pas indispensable.

Re: [RESOLU] Données de 2 tables dans le même formulaire

Posté : 03 avr. 2021, 06:57
par wagscd
Ok je vais tester comme cela.

En fait, j'ai fait deux codes avec getAllRecords et getAllRecordsAutreNom

Merci beaucoup.