Page 1 sur 2

affichage aléatoire

Posté : 15 mars 2007, 11:41
par ag3c
bonjour,
avec dream 8 j'ai crée une page principale/détail qui me génère un tableau en région répétée dans ma page principale avec un lien (j'ai choisi la photo de mon produit) vers la page détail.
Je veux afficher 2 produits par page principale, mais de manière aléatoire, est-ce possible ?

Posté : 15 mars 2007, 11:58
par jojolapine
tu est sous quelle base de données ?

Posté : 15 mars 2007, 15:16
par ag3c
tu est sous quelle base de données ?
je suis sous Easy php 1.7 qui utilise MySQL 4.0.15

Posté : 15 mars 2007, 16:40
par zeus
Pour trier de manière aléatoire, il existe le fameux ORDER BY RAND

Pour ne sélectionner que 2 lignes, tu peux utiliser LIMIT 2

Ta requête ressemblera donc à ça :

Code : Tout sélectionner

SELECT ma, liste, de, champ, FROM matable ORDER BY RAND LIMIT 2

Posté : 22 mars 2007, 21:25
par ag3c
j'ai essayé mais ça ne fontionne pas. Encore une fois je suis en région répétée avec une page principale liée à une page détail. voici le code ma page principale.
<?php require_once('Connections/ag3cconnec.php'); ?>
<?php
$currentPage = $_SERVER["PHP_SELF"];

$maxRows_annonces = 2;
$pageNum_annonces = 0;
if (isset($_GET['pageNum_annonces'])) {
  $pageNum_annonces = $_GET['pageNum_annonces'];
}
$startRow_annonces = $pageNum_annonces * $maxRows_annonces;

mysql_select_db($database_ag3cconnec, $ag3cconnec);
$query_annonces = "SELECT * FROM produits";
$query_limit_annonces = sprintf("%s LIMIT %d, %d", $query_annonces, $startRow_annonces, $maxRows_annonces);
$annonces = mysql_query($query_limit_annonces, $ag3cconnec) or die(mysql_error());
$row_annonces = mysql_fetch_assoc($annonces);

if (isset($_GET['totalRows_annonces'])) {
  $totalRows_annonces = $_GET['totalRows_annonces'];
} else {
  $all_annonces = mysql_query($query_annonces);
  $totalRows_annonces = mysql_num_rows($all_annonces);
}
$totalPages_annonces = ceil($totalRows_annonces/$maxRows_annonces)-1;

$queryString_annonces = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_annonces") == false && 
        stristr($param, "totalRows_annonces") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_annonces = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_annonces = sprintf("&totalRows_annonces=%d%s", $totalRows_annonces, $queryString_annonces);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Agence des 3 communes</title>
<link href="styles/fond.css" rel="stylesheet" type="text/css" />
<link href="styles/bord.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
a:link {
	color: #CC6600;
}
a:visited {
	color: #CC6600;
}
a:hover {
	color: #FEE3AE;
}
a:active {
	color: #CC6600;
}
.Style5 {font-size: small; font-family: Verdana, Arial, Helvetica, sans-serif;}
.Style6 {color: #CC0000}
.Style7 {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	color: #CC0000;
	font-weight: bold;
}
.Style9 {font-family: Verdana, Arial, Helvetica, sans-serif}
.Style10 {
	font-size: 11px;
	font-weight: bold;
	color: #666666;
}
.Style13 {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-weight: bold;
	color: #000000;
}
.Style15 {font-family: Verdana, Arial, Helvetica, sans-serif; color: #CC0000; font-weight: bold; font-size: 14px; }
.Style18 {color: #CC6600}
.Style20 {color: #666666; font-size: 14px; }
.Style23 {font-size: 14px}
.Style24 {color: #666666}
.Style25 {font-family: Verdana, Arial, Helvetica, sans-serif; color: #CC6600; font-weight: bold; font-size: 14px; }
-->
</style>
</head>

<body>
<table width="970" border="0" cellpadding="0" cellspacing="0" class="fond">
  <!--DWLayoutTable-->
  <tr>
    <td width="13" height="13"></td>
    <td width="15"></td>
    <td width="387"></td>
    <td width="7"></td>
    <td width="110"></td>
    <td width="7"></td>
    <td width="402"></td>
    <td width="29"></td>
  </tr>
  <tr>
    <td height="78">&nbsp;</td>
    <td colspan="2" valign="top" class="bord"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="400" height="76">
      <param name="movie" value="images/trans.swf" />
      <param name="quality" value="high" />
      <embed src="images/trans.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="76"></embed>
    </object></td>
    <td>&nbsp;</td>
    <td valign="top"><a href="index.php"><img src="images/logo.jpg" width="110" height="76" border="0" /></a></td>
    <td>&nbsp;</td>
    <td valign="top" class="bord"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="400" height="76">
      <param name="movie" value="images/guide.swf" />
      <param name="quality" value="high" />
      <embed src="images/guide.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="76"></embed>
    </object></td>
    <td>&nbsp;</td>
  </tr>
  
  
  
  <tr>
    <td height="7"></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td height="20"></td>
    <td></td>
    <td colspan="5" valign="top"><div align="center" class="Style5"> 
        <div align="center"><span class="Style24">2 Pasteur (Angle 46 rue de Jouy) 78220 Viroflay. Tel.</span> <span class="Style18">01.30.24.06.07.</span> <span class="Style24">Fax. 01.30.24.06.33. Mail.</span> <span class="Style6"><a href="mailto:[email protected]">[email protected]</a></span> </div>
    </div></td>
    <td></td>
  </tr>
  <tr>
    <td height="7"></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td height="365"></td>
    <td colspan="6" valign="top"><table width="735" border="1" align="center" cellpadding="4" bordercolor="#CC6600">

        <?php do { ?>
          <tr>
            <td width="256" rowspan="3"><div align="center" class="Style9">
              <div align="right" class="Style10"><?php echo $row_annonces['descriptif']; ?> </div>
            </div>            </td>
            <td width="184"><div align="center" class="Style25"> <?php echo $row_annonces['Commune']; ?></div>            </td>
            <td width="255" rowspan="3" align="left" valign="bottom" class="Style13"><div align="left">
              <p><span class="Style25"><?php echo $row_annonces['Type']; ?></span><br />
                <span class="Style25"><?php echo $row_annonces['surfhab']; ?></span> <span class="Style25">m&sup2;</span><span class="Style7"><span class="Style20"> habitables</span></span> <br />
                  <span class="Style25"><?php echo $row_annonces['surfterr']; ?></span> <span class="Style25">m&sup2;</span><span class="Style20"> de terr. </span><br /> 
                  <span class="Style25"><?php echo $row_annonces['nbrepieces']; ?></span> <span class="Style20">pi&egrave;ce(s) </span><br />              
                  <span class="Style25"><?php echo $row_annonces['nbrechbres']; ?></span><span class="Style7"> <span class="Style20">chambre(s)</span> </span><span class="Style24"><br />
                  <span class="Style23">Etat g&eacute;n&eacute;ral : </span></span><span class="Style15 Style18"><?php echo $row_annonces['etatgeneral']; ?></span><br />
                  <span class="Style20">Chauffage :</span> <span class="Style25"><?php echo $row_annonces['chauffage']; ?></span><br />
                <br />
              </p>
            </div>            </td>
          </tr>
          <tr>
            <td>
              <div align="center"><a href="details.php?recordID=<?php echo $row_annonces['ID']; ?>"></a><a href="details.php?recordID=<?php echo $row_annonces['ID']; ?>"><img src="http://localhost/ag3c/images/<?php echo $row_annonces['Photo']; ?>" border="0" /></a></div>            </td>
          </tr>
          <tr>
            <td height="27"><div align="center" class="Style7"><span class="Style25"><?php echo $row_annonces['prix']; ?></span> <span class="Style25">&euro;</span> </div>            </td>
          </tr>
          <?php } while ($row_annonces = mysql_fetch_assoc($annonces)); ?>
      </table>
      <br />
      <table border="0" width="50%" align="center">
        <tr>
          <td width="23%" height="15" align="center"><a href="<?php printf("%s?pageNum_annonces=%d%s", $currentPage, 0, $queryString_annonces); ?>"><img src="images/First.gif" width="18" height="13" border="0" /></a></td>
          <td width="31%" align="center"><a href="<?php printf("%s?pageNum_annonces=%d%s", $currentPage, max(0, $pageNum_annonces - 1), $queryString_annonces); ?>"><img src="images/Previous.gif" width="14" height="13" border="0" /></a></td>
          <td width="23%" align="center"><a href="<?php printf("%s?pageNum_annonces=%d%s", $currentPage, min($totalPages_annonces, $pageNum_annonces + 1), $queryString_annonces); ?>"><img src="images/Next.gif" width="14" height="13" border="0" /></a></td>
          <td width="23%" align="center"><a href="<?php printf("%s?pageNum_annonces=%d%s", $currentPage, $totalPages_annonces, $queryString_annonces); ?>"><img src="images/Last.gif" width="18" height="13" border="0" /></a></td>
        </tr>
      </table>    </td>
    <td></td>
  </tr>
  <tr>
    <td height="40"></td>
    <td colspan="6" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
    <td></td>
  </tr>
  <tr>
    <td height="10"></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

</body>
</html>
<?php
mysql_free_result($annonces);
?>

merci de votre aide

Posté : 23 mars 2007, 01:36
par Truc
Modération :
ag3c, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Posté : 23 mars 2007, 01:44
par zeus
1/ "Ca ne marche pas" ne nous aide pas à t'aider. Il nous faut plus de détail . "La requête fonctionne mais j'ai toujours les même affichages", "La requête me renvoi tel message d'erreur" sont des messages beaucoup plus explicite pour t'aider

2/ Je vois bien le LIMIT mais par le ORDER BY RAND ... Si tu n'essayes pas les solutions qu'on te donne, je ne sais pas comment t'aider ...

3/ pourquoi ne pas mettre toute ta requête dans $query_annonce plutôt que d'utiliser un sprintf() pour ajouter le LIMIT à la requête ?

Posté : 23 mars 2007, 12:05
par Invité
J'ai donc modifié mon code selon le
order by rand 
(comme je l'avais déjà fait, mais j'étais revenu à mon code initial)

voici la réponse du navigateur :
Erreur de syntaxe près de 'LIMIT 0, 2' à la ligne 1
Il va de soi que je dois modifier
$query_limit_annonces = sprintf("%s LIMIT %d, %d", $query_annonces, $startRow_annonces, $maxRows_annonces);
voire le supprimer, mais déjà au niveau de
$query_annonces = "SELECT * FROM produits ORDER BY RAND LIMIT 2";
il y a une erreur, laquelle

j'espère que je suis plus clair... J'ai l'impression que
$maxRows_annonces = 2;
établit déjà le nombre de lignes de ma db à afficher par page.
Encore merci pour votre aide.
<?php require_once('Connections/ag3cconnec.php'); ?>
<?php
$currentPage = $_SERVER["PHP_SELF"];

$maxRows_annonces = 2;
$pageNum_annonces = 0;
if (isset($_GET['pageNum_annonces'])) {
  $pageNum_annonces = $_GET['pageNum_annonces'];
}
$startRow_annonces = $pageNum_annonces * $maxRows_annonces;

mysql_select_db($database_ag3cconnec, $ag3cconnec);
$query_annonces = "SELECT * FROM produits ORDER BY RAND LIMIT 2";
$query_limit_annonces = sprintf("%s LIMIT %d, %d", $query_annonces, $startRow_annonces, $maxRows_annonces);
$annonces = mysql_query($query_limit_annonces, $ag3cconnec) or die(mysql_error());
$row_annonces = mysql_fetch_assoc($annonces);

if (isset($_GET['totalRows_annonces'])) {
  $totalRows_annonces = $_GET['totalRows_annonces'];
} else {
  $all_annonces = mysql_query($query_annonces);
  $totalRows_annonces = mysql_num_rows($all_annonces);
}
$totalPages_annonces = ceil($totalRows_annonces/$maxRows_annonces)-1;

$queryString_annonces = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_annonces") == false && 
        stristr($param, "totalRows_annonces") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_annonces = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_annonces = sprintf("&totalRows_annonces=%d%s", $totalRows_annonces, $queryString_annonces);
?>

Posté : 23 mars 2007, 12:09
par ag3c
le message posté par "invité" est de ag3c, désolé erreur de manip..

Posté : 23 mars 2007, 13:53
par zeus
dans $query annonce, tu met déjà le ORDER BY et le LIMIT, pas besoin du sprintf dans ce cas.

D'une manière générale, il faut toujours afficher la requête qui plante, avec un simple echo, pour l'executer directement depuis PhpMyAdmin qui te donnera l'erreur ...

Posté : 23 mars 2007, 16:28
par ag3c
voilà la réponse de PhpMyAdmin
#1064 - Erreur de syntaxe près de '$ = "SELECT * FROM produits ORDER BY RAND LIMIT 2"' à la ligne 1

Posté : 23 mars 2007, 17:26
par orgerix
Enleve '$ =' et ca marchera peut être mieux...

Posté : 23 mars 2007, 18:44
par ag3c
voilà réponse de phpmyadmin
#1064 - Erreur de syntaxe près de '"SELECT * FROM produits ORDER BY RAND LIMIT 2"' à la ligne 1

Posté : 23 mars 2007, 19:21
par orgerix
IL faut aussi enlever les guillemets

Posté : 23 mars 2007, 19:26
par ag3c
voilà la réponse de phpMyAdmin
#1054 - Champ 'rand' inconnu dans order clause