affichage aléatoire

Eléphanteau du PHP | 12 Messages

15 mars 2007, 11:41

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 ?

ViPHP
ViPHP | 3607 Messages

15 mars 2007, 11:58

tu est sous quelle base de données ?

Eléphanteau du PHP | 12 Messages

15 mars 2007, 15:16

tu est sous quelle base de données ?
je suis sous Easy php 1.7 qui utilise MySQL 4.0.15

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 mars 2007, 16:40

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 12 Messages

22 mars 2007, 21:25

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 mars 2007, 01:36

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 mars 2007, 01:44

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2007, 12:05

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);
?>

Eléphanteau du PHP | 12 Messages

23 mars 2007, 12:09

le message posté par "invité" est de ag3c, désolé erreur de manip..

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 mars 2007, 13:53

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 ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 12 Messages

23 mars 2007, 16:28

voilà la réponse de PhpMyAdmin
#1064 - Erreur de syntaxe près de '$ = "SELECT * FROM produits ORDER BY RAND LIMIT 2"' à la ligne 1

Mammouth du PHP | 693 Messages

23 mars 2007, 17:26

Enleve '$ =' et ca marchera peut être mieux...

Eléphanteau du PHP | 12 Messages

23 mars 2007, 18:44

voilà réponse de phpmyadmin
#1064 - Erreur de syntaxe près de '"SELECT * FROM produits ORDER BY RAND LIMIT 2"' à la ligne 1

Mammouth du PHP | 693 Messages

23 mars 2007, 19:21

IL faut aussi enlever les guillemets

Eléphanteau du PHP | 12 Messages

23 mars 2007, 19:26

voilà la réponse de phpMyAdmin
#1054 - Champ 'rand' inconnu dans order clause