Mise en page PHP...

yan_ucci
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 23:14

Salut!!

Mon code va chercher toutes les photos dispo dans ma base et me les insere dans ma page l'une a coté de l'autre tant qu'il y a des photos, voila mon code :

____________________________________________________________
echo '<table border="0" cellpadding="2" cellspacing="0">';
echo '<tr>';
$sql2="select numphotonews, photosmallnews from photonews where numnews='".$row[0]."';";
$req2=mysql_query($sql2) or die(mysql_error());
while ($row2=mysql_fetch_row($req2))
{
echo "<td><img height=\"60\" src=\"photo/$row2[1]\"></td>";
}
echo '</tr>';
echo '</table>';
...
_____________________________________________________________

Moi j'aimerai afficher 4 photos l'une a coté de l'autre et ensuite passer a la ligne pour en afficher 4 autres et ainsi de suite...

Quelqu'un aurait une idée pour m'aider...

Merci d'avance!!

Yan.

Mammouth du PHP | 1311 Messages

07 juin 2005, 23:16

salut
essaye un modulo 4 comme condtion de sorti sur une boiucle d'affichage

yan_ucci
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 23:32

J'ai essayé avec une boucle for mais ca m'affiche 4 fois la meme image avant de passer a la suivante... :(

Mammouth du PHP | 19672 Messages

08 juin 2005, 07:38

Tiens, essaye avec ça, normalement, ça devrait fonctionner: je suis parti de ton script original, j'ai ajouté quelques éléments et ajouté quelques commentaires:
<table border="0" cellpadding="2" cellspacing="0" summary="">
<?php
$sql2="select numphotonews, photosmallnews from photonews where numnews='".$row[0]."';";
/* On détermine le nombre de photos */
$nb2 = mysql_num_rows($sql2);
/* On établit un pointeur pour compter les tours */
$i = 0;

$req2=mysql_query($sql2) or die(mysql_error());

while ($row2=mysql_fetch_row($req2))
{
    /* Si on est à la première de 4 photos, on crée la nouvelle ligne */
    if($i % 4 == 0);
    {
?>
  <tr>
<?php
    }
?>
    <td><img height="60" src="photo/<?php echo($row2[1]); ?>" alt=""></td>
<?php
    /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
    if(($i + 1) % 4 == 0);
    {
?>
  </tr>
<?php
    }
    $i++;
}
/* Si le nombre de photo est un multiple de 4, on ferme le tableau */
if($nb2 % 4 == 0)
{
?>
</table>
<?php
}
/* Sinon, on comlpète avec des cellules vides avant de fermer le tableau */
else
{
    $reste = ($nb2 % 4);
    for($j = 0; $j < $reste; $j++)
    {
?>
    <td>&nbsp;</td>
<?php
    }
?>
  </tr>
</table>
<?php
}
?>
Reviens poser des questions s'il y a quelque chose que tu ne comprends pas.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 12:05

Merci pour ce code commenté tres clair!!!!!

Par contre j'ai cette erreur pour la ligne 5 de ton code :
mysql_num_rows(): supplied argument is not a valid MySQL result

Encore merci de ton aide!!

Yan

Mammouth du PHP | 19672 Messages

08 juin 2005, 13:08

Tu as raison, j'ai inversé deux ligne: le corrigé:
<table border="0" cellpadding="2" cellspacing="0" summary="">
<?php
$sql2="select numphotonews, photosmallnews from photonews where numnews='".$row[0]."';";
/* On établit un pointeur pour compter les tours */
$i = 0;

$req2=mysql_query($sql2) or die(mysql_error());

/* On détermine le nombre de photos */
$nb2 = mysql_num_rows($req2);

while ($row2=mysql_fetch_row($req2))
{
    /* Si on est à la première de 4 photos, on crée la nouvelle ligne */
    if($i % 4 == 0);
    {
?>
  <tr>
<?php
    }
?>
    <td><img height="60" src="photo/<?php echo($row2[1]); ?>" alt=""></td>
<?php
    /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
    if(($i + 1) % 4 == 0);
    {
?>
  </tr>
<?php
    }
    $i++;
}
/* Si le nombre de photo est un multiple de 4, on ferme le tableau */
if($nb2 % 4 == 0)
{
?>
</table>
<?php
}
/* Sinon, on comlpète avec des cellules vides avant de fermer le tableau */
else
{
    $reste = ($nb2 % 4);
    for($j = 0; $j < $reste; $j++)
    {
?>
    <td>&nbsp;</td>
<?php
    }
?>
  </tr>
</table>
<?php
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 13:51

Je pense avoir bien intégré mon code php dans ma page mais en fait toutes les photos sont l'une en dessous de l'autre... 4 photos ne sont pas l'une a coté de l'autre avant de passer a la ligne...
je dois avoir une erreur quelque part...

_____________________________________________________________<html>
<head>
	<title></title>

<style>

.bordure {
border-collapse:collapse;
border-bottom: 1px solid black;
}

</style>

<script language="Javascript">
<!--
function ouvreFenetre(page, largeur, hauteur) {
  window.open(page, "", "scrollbars=no,menubar=no,toolbar=no,resizable=no,width="
              + largeur + ",height=" + hauteur);
}
// -->
</script>	

</head>

<body bgcolor="#D9DAD">

<table width="250" border="0" cellpadding="0" cellspacing="0">
	<?php
	//connexion à la base de données.
	$db=mysql_connect("localhost", "root");
	//sélection de la base de données.
	mysql_select_db("metz", $db);
	//préparation de la requête.
	$sql1="select numnews, titrenews, textenews from news order by numnews desc;";
	//exécution de la requête.
	$req1=mysql_query($sql1) or die(mysql_error());
	//traitement des lignes de la requête.
	while ($row=mysql_fetch_row($req1))
	{     			
	echo '<tr>';
	echo '<td align="left"><div align="left"><font face="Arial"><b>'.$row[1].'</b></font></div></td>';	
	echo '</tr>';
	echo '<tr>';
	echo '<td><div align="left"><font face="Arial" size="1">'.$row[2].'</font></div></td>';
	echo '</tr>';
 	echo '<tr>';
 	echo '<td>';
 	echo '<table border="0" cellpadding="2" cellspacing="0">';
 	echo '<tr>';
		$sql2="select numphotonews, photosmallnews from photonews where numnews='".$row[0]."';";
		/* On établit un pointeur pour compter les tours */
		$i = 0;
		$req2=mysql_query($sql2) or die(mysql_error());		
		/* On détermine le nombre de photos */
		$nb2 = mysql_num_rows($req2);

		while ($row2=mysql_fetch_row($req2))
			{
    		/* Si on est à la première de 4 photos, on crée la nouvelle ligne */
    		if($i % 4 == 0);
    			{
			  	echo '<tr>';
    			}
    		echo "<td><a href = \"javascript:ouvreFenetre('popup.php?refer=$row2[0]', 330, 430)\"><img height=\"60\" src=\"photo/$row2[1]\" border=\"0\"></a></td>";
		    /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
    		if(($i + 1) % 4 == 0);
    			{
  				echo '</tr>';
			    }
    		$i++;
			}
			/* Si le nombre de photo est un multiple de 4, on ferme le tableau */
			if($nb2 % 4 == 0)
				{
				echo '</table>';
				}
			/* Sinon, on complète avec des cellules vides avant de fermer le tableau */
			else
				{
    			$reste = ($nb2 % 4);
    			for($j = 0; $j < $reste; $j++)
    				{
    				echo '<td>&nbsp;</td>';
    				}
				echo '</tr>';
				echo '</table>';
				}

	echo '<hr color="#000000" size="1">';
	echo '</td>';
	echo '</tr>';
	echo '</table>';	
	}

	//libération de la requête.
	mysql_free_result($req1);
	mysql_close($db);
	?>
</table>

</body>
</html>
_____________________________________________________________

Si vous trouvez quelque chose...

Merci d'avance!!
YAn

Mammouth du PHP | 19672 Messages

08 juin 2005, 13:55

fais voir le code html que ça génère en éditant la source de la page quand tu affiches ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 14:13

Voici la source de ma page...

Code : Tout sélectionner

<html> <head> <title></title> <style> .bordure { border-collapse:collapse; border-bottom: 1px solid black; } </style> <script language="JavaScript"> <!-- function SymError() { return true; } window.onerror = SymError; var SymRealWinOpen = window.open; function SymWinOpen(url, name, attributes) { return (new Object()); } window.open = SymWinOpen; //--> </script> <script language="Javascript"> <!-- function ouvreFenetre(page, largeur, hauteur) { window.open(page, "", "scrollbars=no,menubar=no,toolbar=no,resizable=no,width=" + largeur + ",height=" + hauteur); } // --> </script> </head> <body bgcolor="#D9DAD"> <table width="250" border="0" cellpadding="0" cellspacing="0"> <tr><td align="left"><div align="left"><font face="Arial"><b>titre</b></font></div></td></tr><tr><td><div align="left"><font face="Arial" size="1">news</font></div></td></tr><tr><td><table border="0" cellpadding="2" cellspacing="0"><tr></table><hr color="#000000" size="1"></td></tr></table><tr><td align="left"><div align="left"><font face="Arial"><b>Titre</b></font></div></td></tr><tr><td><div align="left"><font face="Arial" size="1">CE ke tu veux</font></div></td></tr><tr><td><table border="0" cellpadding="2" cellspacing="0"><tr></table><hr color="#000000" size="1"></td></tr></table><tr><td align="left"><div align="left"><font face="Arial"><b>News</b></font></div></td></tr><tr><td><div align="left"><font face="Arial" size="1">Test news!!!</font></div></td></tr><tr><td><table border="0" cellpadding="2" cellspacing="0"><tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=5', 330, 430)"><img height="60" src="photo/test1.jpg" border="0"></a></td></tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=6', 330, 430)"><img height="60" src="photo/test.jpg" border="0"></a></td></tr><td>&nbsp;</td><td>&nbsp;</td></tr></table><hr color="#000000" size="1"></td></tr></table><tr><td align="left"><div align="left"><font face="Arial"><b>Titre1</b></font></div></td></tr><tr><td><div align="left"><font face="Arial" size="1">Texte1 : Blabla</font></div></td></tr><tr><td><table border="0" cellpadding="2" cellspacing="0"><tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=1', 330, 430)"><img height="60" src="photo/test.jpg" border="0"></a></td></tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=2', 330, 430)"><img height="60" src="photo/test.jpg" border="0"></a></td></tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=3', 330, 430)"><img height="60" src="photo/test.jpg" border="0"></a></td></tr><tr><td><a href = "javascript:ouvreFenetre('popup.php?refer=4', 330, 430)"><img height="60" src="photo/test.jpg" border="0"></a></td></tr></table><hr color="#000000" size="1"></td></tr></table></table> </body> </html> <script language="JavaScript"> <!-- var SymRealOnLoad; var SymRealOnUnload; function SymOnUnload() { window.open = SymWinOpen; if(SymRealOnUnload != null) SymRealOnUnload(); } function SymOnLoad() { if(SymRealOnLoad != null) SymRealOnLoad(); window.open = SymRealWinOpen; SymRealOnUnload = window.onunload; window.onunload = SymOnUnload; } SymRealOnLoad = window.onload; window.onload = SymOnLoad; //--> </script>

:shock:

Mammouth du PHP | 19672 Messages

08 juin 2005, 14:19

Bon, il y a un problème: d'abord, c'est quoi ce JavaScript en bas de page APRÈS </html> ? à remonter dans <head></head>. Mais peu importe pour le moment.

Chaque image est dans une ligne propre, ce qui fait que les images sont l'une au dessus de l'autre: l'affichage est normal, le code généré l'est moins.

Je vais regarder si j'ai pas oublié un truc dans mon code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 14:28

alors la je ne comprend pas pourquoi mon javascript se retrouve en bas... dans mon code il est pourtant entre le <head></head> comme tu peux le voir dans les post précédents....

Yan

Mammouth du PHP | 19672 Messages

08 juin 2005, 14:33

Bizarre, je ne trouve pas: voici le code à peine corrigé, surtout pour obtenir un code html lisible sans modifications:
<head>
    <title></title>

<style>

.bordure {
border-collapse:collapse;
border-bottom: 1px solid black;
}

</style>

<script language="Javascript">
<!--
function ouvreFenetre(page, largeur, hauteur)
{
    window.open(page, "", "scrollbars=no,menubar=no,toolbar=no,resizable=no,width="
    + largeur + ",height=" + hauteur);
}
// -->
</script>    

</head>

<body bgcolor="#D9DAD">

<table width="250" border="0" cellpadding="0" cellspacing="0">
<?php
//connexion à la base de données.
$db=mysql_connect("localhost", "root");
//sélection de la base de données.
mysql_select_db("metz", $db);
//préparation de la requête.
$sql1="select numnews, titrenews, textenews from news order by numnews desc;";
//exécution de la requête.
$req1=mysql_query($sql1) or die(mysql_error());
//traitement des lignes de la requête.
while ($row=mysql_fetch_row($req1))
{
?>
  <tr>
    <td align="left"><div align="left"><font face="Arial"><b><?php echo($row[1]); ?></b></font></div></td>
  </tr>
  <tr>
    <td><div align="left"><font face="Arial" size="1"><?php echo($row[2]); ?></font></div></td>
  </tr>
  <tr>
    <td>
      <table border="0" cellpadding="2" cellspacing="0">
<?php
    $sql2="select numphotonews, photosmallnews from photonews where numnews='".$row[0]."';";
    /* On établit un pointeur pour compter les tours */
    $i = 0;
    $req2=mysql_query($sql2) or die(mysql_error());
    /* On détermine le nombre de photos */
    $nb2 = mysql_num_rows($req2);

    while ($row2=mysql_fetch_row($req2))
    {
        /* Si on est à la première de 4 photos, on crée la nouvelle ligne */
        if($i % 4 == 0);
        {
?>
          <tr>
<?php
        }
?>
            <td><a href = "javascript:ouvreFenetre('popup.php?refer=$row2[0]', 330, 430)"><img height="60" src="photo/<?php echo($row2[1]); ?>" border="0"></a></td>
<?php
        /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
        if(($i + 1) % 4 == 0);
        {
?>
          </tr>
<?php
        }
        $i++;
    }
    /* Si le nombre de photo est un multiple de 4, on ferme le tableau */
    if($nb2 % 4 == 0)
    {
?>
      </table>
<?php
    }
    /* Sinon, on complète avec des cellules vides avant de fermer le tableau */
    else
    {
        $reste = ($nb2 % 4);
        for($j = 0; $j < $reste; $j++)
        {
?>
            <td>&nbsp;</td>
<?php
        }
?>
          </tr>
        </table>
<?php
    }
?>
<hr color="#000000" size="1">
</td>
</tr>
</table>
<?php
}
//libération de la requête.
mysql_free_result($req1);
mysql_close($db);
    ?>
</table>
</body>
</html>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 14:42

Je commence a desesperer... :(

je pense qu'on est sur la bonne voie avec cette solution... mais pour moi le chemin est encore long et semé d'embuches...

Quel est l'interet de mettre le code en html plutot que derriere des echo'';?

Le dernier code que tu as posté a juste était changé sur ce point?


MERCI!! ;)

Mammouth du PHP | 19672 Messages

08 juin 2005, 14:47

au lieu de mettre du HTML dans un echo ou un print, on a intérêt à le séparer et limiter la charge de travail serveur, dans ce cas inutile: le HTML est envoyé directement au navigateur qui va l'interpréter et le PHP sera interprété coté serveur: moins on a de code à faire interpréter à PHP, plus rapide sera la génération de la page.

Les changements sont en effet à peu près limités à ça. Et ce qui est curieux, c'est qu'on dirait que le modulo ne fonctionne pas si le code html que tu as donné correspond au résultat de ce script.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yan_ucci
Invité n'ayant pas de compte PHPfrance

08 juin 2005, 14:50

D'accord j'ai compris pour les echos...

Et oui j'ai bien mis la source que mon navigateur affiche qui correspond au code que tu m'as envoyé...

Yan