Mise en page PHP...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mise en page PHP...

par yan_ucci » 08 juin 2005, 22:42

Merci pour ces précisions, c'est bien ce que j'avais a peu pres compris!!

A bientot!!

Yan...

par Cyrano » 08 juin 2005, 22:32

En fait le code n'est pas difficile à comprendre: Il est basé sur des tests:

Dans un premier temps, on teste s'il y a des photos, s'il n'y en a pas, on passe au suivant et on ne crée pas de table pour les images; S'il y en a, on teste le modulo. Comme on veut 4 photos par lignes, on met un pointeur au départ et on récupère le nombre de photo. Si le modulo $i % 4 == 0, ça veut dire qu'on est avec un pointeur qui est multiple de 4 (ou qui vaut 0), donc on est sur la première d'une série de quatre, donc on crée l'ouverture de la ligne avec <tr>
Ensuite on continue la boucle en incrémentant le pointeur tant qu'on a pas atteint le nombre total de photos.

Comme on ne sait pas combien il y a exactement photos et qu'on veut que le tableau ait un nombre correct de cellules, si on sort de la boucle fautes de photos, on vérifie ou en était le pointeur à la dernière photo et en fonction de ça, on calcule combien il manque de cellules : on les crées avec un espace insécable &nbsp; et on ferme le tableau. Si la dernière photo était la quatrième d'une série, on ferme directement le tableau et on sort pour traiter la news suivante s'il en reste une.

Voilà :)

par yan_ucci » 08 juin 2005, 21:21

Bon bah respect bravo tout ce que tu veux...
tu te sera bien pris la tete mais au final ca marche!!!

J'ai juste fait un copier/coller, j'ai essayé avec 5 photos ca passe et il y a les cellules vides comme prévu...

Par contre j'ai pas eu le temps de comprendre le code, je vais essayé de comprendre et si j'ai un probleme je te demande...


MERCI ENCORE!!! Beau Boulot!! ;)


Yan...

par Cyrano » 08 juin 2005, 21:07

J'aime pas quand je reste en échec devant.... un ";" en trop, j'ai eu du mal à le trouver: en principe ça devrait mercher:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
<style type="text/css">
body {background-color: #D9DADD}
.bordure {
border-collapse:collapse;
border-bottom: 1px solid black;
}
td {border: 1px solid #6600ff}
</style>

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

</head>

<body>

<table width="250" border="0" cellpadding="0" cellspacing="0" summary="">
<?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>
    <?php
    $sql2 = "SELECT numphotonews, photosmallnews FROM photonews WHERE numnews='".$row[0]."';";
    $req2 = mysql_query($sql2) or die(mysql_error());
    /* On détermine le nombre de photos */
    $nb2 = mysql_num_rows($req2);
    if($nb2 > 0)
    {
        ?>
      <table border="0" cellpadding="2" cellspacing="0" summary="">
        <?php
        /* On établit un pointeur pour compter les tours */
        $i = 0;
        while ($row2=mysql_fetch_row($req2))
        {
            /* Si on est à la première de 4 photos, on crée la nouvelle ligne */
            $r = $i % 4;
            if($r == 0)
            {
?>
          <tr>
<?php
            }
            ?>
            <td><a href="#" onclick = "javascript:ouvreFenetre('popup.php?refer=<?php echo($row2[0]); ?>', 330, 430)"><img src="../logos-distribution/www/images/vignettes/<?php echo($row2[1]); ?>" style="height: 60px; border: none" alt=""></a></td>
            <?php
            /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
            if($r == 3)
            {
?>
          </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 = 4 - ($nb2 % 4);
            for($j = 0; $j < $reste; $j++)
            {
?>
            <td>&nbsp;</td>
<?php
            }
?>
          </tr>
        </table>
<?php
        }
    }
?>
      <hr style="color: #000000; height: 1px">
    </td>
  </tr>
<?php
}
//libération de la requête.
mysql_free_result($req1);
mysql_close($db);
    ?>
</table>
</body>
</html>
Refais un essai. L'erreur ? un ";" à la fin d'un if($r == 0); qui mettait tout par terre. Le code était bon, et j'ai apporté quelques corrections mineures qui ne changent rien. Tu me raconteras.

Je n'ai pas testé avec plus de 4 images, mais normalement, ça devrait aussi fonctionner et afficher des lignes de 4 cellules, avec ou sans photos sur la dernière ligne, exemple 6 photos, une ligne de 4 et une ligne de 2 photos et 2 cellules vides.

par yan_ucci » 08 juin 2005, 20:51

okok encore merci de t'acharner!!! ;)

Yan

par Cyrano » 08 juin 2005, 20:03

Je trouve pas, mais je l'aurai, pas ce soir, mais je l'aurai ;)

par yan_ucci » 08 juin 2005, 19:24

merci beaucoup...

Yan

par Cyrano » 08 juin 2005, 19:19

Je vois, y a un os dans le paté, pas normal, je vais faire des essais avec plusieurs phptos par article.

par yan_ucci » 08 juin 2005, 19:12

Pour le premier tableau, j'ai bien 4 cellules l'une a coté de l'autre dont la premiere remplie et les autres vides.
pour les autres photos elles sont dans une meme cellule l'une en dessous de l'autre

Image

voila ce que ca donne...

Yan[/img]

par Cyrano » 08 juin 2005, 18:10

Bon, pour la requête, j'ai peut-être biens laissé une coquille en remttant des propres noms de table et de champs que j'avais modifié pour utiliser une base à moi, tout comme j'ai oublié de te remettre les adresses d'images. Mais ce problème mis à part, ça fonctionnait: avec chaque news, j'ai l'image, comme dans ce que j'ai, je n'avais qu'une image par article, j'avais l'image et trois cellules vides

Qu'est-ce qui ne fonctionne pas au juste ?

par yan_ucci » 08 juin 2005, 17:28

ca marchait bien chez toi??

Yan.

par yan_ucci » 08 juin 2005, 16:04

j'ai recopié ton code a l'identique...

j'ai une erreur dans $sql2, dans la requete il y a un "==" qui ne passe pas, je l'ai remplacé...
et mes images s'affichent l'une au dessus de l'autre...
toujours le meme probleme de javascript a l'affichage de la source...
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
<style type="text/css">
body {background-color: #D9DADD}
.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 type="text/javascript">
<!--
function ouvreFenetre(page, largeur, hauteur)
{
    window.open(page, "", "scrollbars=no,menubar=no,toolbar=no,resizable=no,width="
    + largeur + ",height=" + hauteur);
}
// -->
</script>

</head>

<body>

<table width="250" border="0" cellpadding="0" cellspacing="0" summary="">
  <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">
      </table>
      <hr style="color: #000000; height: 1px">
    </td>

Voila...

En tout cas merci pour l'interet et le travail que tu fournit pour m'aider...

Yan

par Cyrano » 08 juin 2005, 15:44

T'inquiète, j'ai de la matière ;)

Là, ça a l'air de fonctionner:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
<style type="text/css">
body {background-color: #D9DADD}
.bordure {
border-collapse:collapse;
border-bottom: 1px solid black;
}
</style>

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

</head>

<body>

<table width="250" border="0" cellpadding="0" cellspacing="0" summary="">
<?php
//connexion à la base de données.
$db = mysql_connect("localhost", "root");
//sélection de la base de données.
mysql_select_db("logosdist", $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" 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><a href="#" onclick = "javascript:ouvreFenetre('popup.php?refer=<?php echo($row2[0]); ?>', 330, 430)"><img height="60" src="../logos-distribution/www/images/vignettes/<?php echo($row2[1]); ?>" border="0" alt=""></a></td>
<?php
        /* Si on est à la dernière d'une série de 4 photos, on ferme la ligne */
        if(($i % 4) == 1)
        {
?>
          </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 = 4 - ($nb2 % 4);
        for($j = 0; $j < $reste; $j++)
        {
?>
            <td>&nbsp;</td>
<?php
        }
?>
          </tr>
        </table>
<?php
    }
?>
      <hr style="color: #000000; height: 1px">
    </td>
  </tr>
<?php
}
//libération de la requête.
mysql_free_result($req1);
mysql_close($db);
    ?>
</table>
</body>
</html>
Essaye et dis moi ce qui déconne si tu as pas le résultat voulu.

par yan_ucci » 08 juin 2005, 14:58

Voila mon script ce sera plus simple...


-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mercredi 08 Juin 2005 à 14:56
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
--
-- Base de données: `metz`
--

-- --------------------------------------------------------

--
-- Structure de la table `news`
--

CREATE TABLE `news` (
`NumNews` int(11) NOT NULL default '0',
`TitreNews` longtext,
`TexteNews` longtext,
PRIMARY KEY (`NumNews`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `news`
--

INSERT INTO `news` VALUES (1, 'Titre1', 'Texte1 : \r\nBlablaBlabla');
INSERT INTO `news` VALUES (3, 'Titre', 'CE ke tu veux');
INSERT INTO `news` VALUES (2, 'News', 'Test news!!!');
INSERT INTO `news` VALUES (5, 'titre', 'news');

-- --------------------------------------------------------

--
-- Structure de la table `photonews`
--

CREATE TABLE `photonews` (
`NumPhotoNews` int(11) NOT NULL default '0',
`PhotoSmallNews` longtext NOT NULL,
`PhotoBigNews` longtext NOT NULL,
`NumNews` int(11) NOT NULL default '0',
PRIMARY KEY (`NumPhotoNews`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `photonews`
--

INSERT INTO `photonews` VALUES (1, 'test.jpg', 'test1.jpg', 1);
INSERT INTO `photonews` VALUES (2, 'test.jpg', 'test1.jpg', 1);
INSERT INTO `photonews` VALUES (3, 'test.jpg', 'test1.jpg', 1);
INSERT INTO `photonews` VALUES (4, 'test.jpg', 'test1.jpg', 1);
INSERT INTO `photonews` VALUES (5, 'test1.jpg', 'test1.jpg', 2);
INSERT INTO `photonews` VALUES (6, 'test.jpg', 'test1.jpg', 2);

par Cyrano » 08 juin 2005, 14:53

Faudrait que je fasse un test avec une base de données, je vais essayer de voir ce que j'ai d'utilisable pas trop complexe à convertir.