Page 1 sur 2
problème de boucle
Posté : 28 avr. 2023, 00:22
par nestor94
<table>
<?php
$sql = "SELECT * FROM avatars ORDER BY name ASC";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$rowAll = $pdostat->fetchAll();
?>
<table>
<tr>
<?php
foreach ( $rowAll as $row )
{
// DONNEES A AFFICHER dans chaque cellule de la ligne
?>
<td><a href="/choix_avatar_fin.php?id=<?php echo $row['id']; ?>"><?php echo '<img src="'.$row['name'].'">'; ?></a>
</td>
</tr>
<?php
}
}
?>
</table>
Ce script affiche les avatars verticalement et l'un sous l'autre. Je voudrais qu'ils s'affichent sous forme de tableau lignes et colonnes. Pouvez vous me donner une piste concernant les éléments manquants?
Re: problème de boucle
Posté : 28 avr. 2023, 08:51
par Spols
Il faut que tu insère des </tr><tr> à chaque fin de ligne, pour cela il faut compter chaque affichage et utiliser la fonction modulo (%) pour savoir quand.
D'ailleurs si tu regarde ton code html généré, tu verra qu'il n'est pas correct. trop de </tr> pour un seul <tr> et 2 balise <table>
Re: problème de boucle
Posté : 28 avr. 2023, 14:15
par nestor94
Je souhaite obtenir cela
[url=
https://i.postimg.cc/TPJYBw0d/Sans-titre-2.jpg[url]
j'ai modifié ainsi mais ca coince
<?php
$sql = "SELECT count(*) FROM avatars ORDER BY name ASC";
$pdostat = $bdd->prepare($sql);
$pdostat->execute(array($name));
$rows= $pdostat->fetchAll();
$num_rows = count($rows);
?>
<center>
<table>
<tr>
<td><a href="/choix_avatar_fin.php?id=<?php echo $rows['id']; ?>"><?php echo '<img src="'.$rows['name'].'">'; ?></a>
</td>
</tr>
</table>
Warning: Undefined variable $name in /home/clients/78f15c369c0786c4a419608e9e60028a/sites/xxxxx/choix_avatar.php on line 40
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /home/clients/78f15c369c0786c4a419608e9e60028a/sites/xxxxx/choix_avatar.php:40 Stack trace: #0 /home/clients/78f15c369c0786c4a419608e9e60028a/sites/xxxx.fr/choix_avatar.php(40): PDOStatement->execute(Array) #1 {main} thrown in /home/clients/78f15c369c0786c4a419608e9e60028a/sites/xxxxx/choix_avatar.php on line 40
Re: problème de boucle
Posté : 28 avr. 2023, 14:33
par or 1
css float pour avoir un nombre de colonne qui s'adapte à la largeur de l'écran.
https://jsfiddle.net/xg5hudze/ cliquer sur run et faire varier la taille de la fenêtre de son navigateur.
Re: problème de boucle
Posté : 28 avr. 2023, 14:37
par nestor94
c'est déjà au niveau de php que cela déconne.
Re: problème de boucle
Posté : 28 avr. 2023, 14:48
par or 1
c'est mille fois plus simple de générer le code html avec du float que de le faire avec une table, et la table, bonjour pour l'adapter à la taille de l'écran.
Re: problème de boucle
Posté : 28 avr. 2023, 16:14
par Saian
Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Je suppose qu'il s'agit de cette requête "SELECT count(*) FROM avatars ORDER BY name ASC" qui ne contient pas de paramètre, il ne faut donc pas passer de paramètre au execute $pdostat->execute(array($name));.
Le code était bon au départ ($pdostat->execute();), pourquoi avoir ajouter ce tableau (array($name)) ?
Re: problème de boucle
Posté : 28 avr. 2023, 16:40
par two3d
Spols ta pas dit d'enlever ton foreach

seulement rajouter des tr dans ton foreach (boucle)
Re: problème de boucle
Posté : 28 avr. 2023, 19:24
par nestor94
<?php
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>choix avatar</title>
<style type="text/css">
body {
color:black;
background-color:white;
background-image:url(images/fond.jpg);
background-attachment:fixed;
background-repeat: no-repeat;
background-size: cover;
background-position: center;
color:#000000;
text-align:center;
margin: auto;
}
img{
float: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 5px;
text-align: left;
}
</style>
</head>
<body>
<div id="entete">
<center><img src="images/banniere.jpg"></center>
</div>
<br>
<table>
<tr>
<td>
<?php
$sql = "SELECT * FROM avatars ORDER BY name ASC";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$rowAll = $pdostat->fetchAll();
foreach ( $rowAll as $row )
{
?>
<a href="/choix_avatar_fin.php?id=<?php echo $row['id']; ?>"><?php echo '<img src="'.$row['name'].'">'; ?></a>
</tr>
</td>
<?php
}
?>
</body>
</html>
là, j'ai la banniere a gauche suivi de tous les avatars horizontalement.
Re: problème de boucle
Posté : 28 avr. 2023, 19:51
par two3d
Raisonne logiquement : une table c'est quoi ? :
<table>
<tr>
<td>Info 1</td>
</tr>
<tr>
<td>Info 2</td>
</tr>
etc...
</table>
Tu dois absolument boucler avec les balises nécessaires, donc
<tr> <!-- un tr d'ouverture -->
<td>...</td> <!-- un td de contenu -->
</tr> <!-- un tr de fermeture -->
Plus d'infos sur la balise table
Re: problème de boucle
Posté : 28 avr. 2023, 20:19
par or 1
une table, c'est à utiliser quand on veut que des cellules aient une bordure. est-ce le cas ici ? non, donc il faut virer cette table inutile. la mise en page, cela se fait en css.
Re: problème de boucle
Posté : 28 avr. 2023, 21:02
par nestor94
J'ai laissé tomber la table et cela semble presque bon ( ai mis center pour attribut css de img float).
dernier bémol ?
les avatars affichés prennent toute la largeur de l'écran, ça fait un peu mal aux yeux.
Comment faire pour faire un "saut de ligne" toutes les 20 images, par exemple?
Re: problème de boucle
Posté : 28 avr. 2023, 21:18
par or 1
mettre le tout dans un div et fixer en css une largeur maximale.
Re: problème de boucle
Posté : 28 avr. 2023, 22:45
par two3d
Comment faire pour faire un "saut de ligne" toutes les 20 images, par exemple?
C'est hors sujet mais utilise les flexbox pour gérer le nombre d'élément sur une ligne :
Maîtriser le passage à la ligne des éléments flexibles
Re: problème de boucle
Posté : 29 avr. 2023, 00:14
par nestor94
Génial, c'est bon à présent. Merci à vous
<?php
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>choix avatar</title>
<style type="text/css">
body {
color:black;
background-color:white;
background-image:url(images/fond.jpg);
background-attachment:fixed;
background-repeat: no-repeat;
background-size: cover;
background-position: center;
color:#000000;
text-align:center;
margin: auto;
}
img{
float: center;
}
</style>
</head>
<body>
<center><img src="images/banniere.jpg"></center>
<br><b>CHOISISSEZ UN AVATAR</b><br>
<center>
<br>
<style type="text/css">
div {
max-width: 60%;
}
img{
float: center;
}
</style>
<div>
<?php
$sql = "SELECT * FROM avatars ORDER BY name ASC";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$rowAll = $pdostat->fetchAll();
foreach ( $rowAll as $row )
{
?>
<a href="/choix_avatar_fin.php?id=<?php echo $row['id']; ?>"><?php echo '<img src="'.$row['name'].'">'; ?></a>
<?php
}
?>
</div>
</body>
</html>