Avatar billede katja_kh Nybegynder
28. februar 2008 - 13:02 Der er 14 kommentarer og
1 løsning

Rand() billeder -gentag ikke billede

Hej

Jeg henter nogle billeder ud fra en database med en rand function. Der er plads til tre billeder, nogle gange får man så det samme billede på nogle af pladserne.

Mit spørgsmål er så om man kan skrive noget så den ikke gentager et billede i hver rand. Altså der skal komme 3 forskellige billeder hver gang.

<?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$r=mysql_query("select id, pic from sommerhus_info ORDER BY  RAND() LIMIT 1");
while($row=mysql_fetch_array($r)){
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
}
?>
Avatar billede pidgeot Nybegynder
28. februar 2008 - 13:06 #1
Ret LIMIT 1 til i stedet at give det antal rækker du skal bruge i alt (dvs. 3 i dette tilfælde), og nøjes så med at køre den query EN gang, for så at tage rækkerne derfra efter behov.
Avatar billede katja_kh Nybegynder
28. februar 2008 - 13:15 #2
forstår ikke helt. Mine billeder ligger vandret. Hvis jeg ændre LIMIT 1 til 3 så kommer de under hinanden.
Avatar billede pidgeot Nybegynder
28. februar 2008 - 13:43 #3
Når man laver en while, tager man alle på en gang - og da det ikke er det dit behov er, så skal du ikke bruge while *-)

Der er intet der forhindrer dig i at lave noget som følgende:
<?PHP
$r=mysql_query("SELECT ... LIMIT 3");
$row=mysql_fetch_array($r);
//Vis billede
//Lav det der skal laves inden næste billede
$row=mysql_fetch_array($r);
//Vis billede
//Lav det der skal laves inden næste billede
$row=mysql_fetch_array($r);
//Vis billede
//Resten af siden
?>
Avatar billede katja_kh Nybegynder
28. februar 2008 - 14:00 #4
jeg kan simpelthen ikke få det til at virke sådan som jeg har brug for det. men hvis du samler på point så smid et svar. Tak fordi du ville kigge på det.
Avatar billede pidgeot Nybegynder
28. februar 2008 - 14:20 #5
Jeg vil såmænd gerne hjælpe med at få det til at virke, men det kræver jeg ser mere kode end blot hvor det ene billede bliver skrevet ud - du må jo gøre noget mellem at det første billede og det andet billede bliver vist.

Springer over pointene hvis du ikke vil gøre mere ved det.
Avatar billede katja_kh Nybegynder
28. februar 2008 - 14:23 #6
jeg kalder op til databasen inde i tre forskellige div. Det sted med billederne ser sådan ud:

<div class="foto">
<?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$r=mysql_query("select id, pic from sommerhus_info where tilbud='ja' order by rand() LIMIT 1");
while($row=mysql_fetch_array($r)){
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
}
?>
</div>
       
<div class="foto2">
                <?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$r=mysql_query("select id, pic from sommerhus_info where tilbud='ja' order by rand() LIMIT 1");
while($row=mysql_fetch_array($r)){
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
}
?>
</div>
       
<div class="foto3">
                <?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$r=mysql_query("select id, pic from sommerhus_info where tilbud='ja' order by rand() LIMIT 1");
while($row=mysql_fetch_array($r)){
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
}
?>
</div>
Avatar billede katja_kh Nybegynder
28. februar 2008 - 14:26 #7
Det skal ikke være muligt at det samme billede bliver vist i to div.
Avatar billede pidgeot Nybegynder
28. februar 2008 - 14:28 #8
Jeg har tilladt mig at omdøbe den $r til et lidt mere unikt navn, i tilfælde af at du har andre database-kald mellem de tre ting.

Den eneste ulempe ved den her måde i forhold til din er at der skal være minimum 3 rækker at tage fra - skal den kunne klare at der er mindre, så skal jeg have at vide hvad den skal gøre de resterende steder. Til gengæld er du garanteret at den ikke vælger samme række.

<div class="foto">
<?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$randomimg=mysql_query("select id, pic from sommerhus_info where tilbud='ja' order by rand() LIMIT 3");
$row=mysql_fetch_array($randomimg);
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
?>
</div>
       
<div class="foto2">
                <?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$row=mysql_fetch_array($randomimg);
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
?>
</div>
       
<div class="foto3">
                <?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$row=mysql_fetch_array($randomimg);
echo "<a href='tilbud.php?id=".$row['id']."'><img src='billeder/$row[pic]' border='0' width='230' height='130'></a>";
echo "<br>";
echo "<div class='text5'>"."Tryk på billedet for information"."</div>";
?>
</div>

Jeg vil også godt lige tilføje, at det ser lidt besynderligt ud at du includer den samme fil tre gange - burde det ikke være nok at gøre det en gang?
Avatar billede showsource Seniormester
28. februar 2008 - 14:34 #9
Hvorfor ikke bare lave div's i en while?
Avatar billede showsource Seniormester
28. februar 2008 - 14:40 #10
<?php
include('../Backup2/includes/db_con.php');
$id = $_GET['id'];
$randomimg=mysql_query("select id, pic from sommerhus_info where tilbud='ja' order by rand() LIMIT 3");
$i = 0;

    while(mysql_fetch_array($randomimg)) {

    $i++;

    echo"<div class='foto".$i"'>\r\n\r\n";
    echo "<a href='tilbud.php?id=".$row["id"]."'><img src='billeder/".$row["pic"]."' border='0' width='230' height='130'></a>";
    echo "<br>\r\n";
    echo "<div class='text5'>"."Tryk på billedet for information"."</div>\r\n";
    echo"</div>\r\n\r\n";

    }

?>

utestet!
Avatar billede katja_kh Nybegynder
28. februar 2008 - 14:42 #11
tak pidgeot det virker med $randomimg.

Jo der er sikkert en smart måde at gøre det på så det ikke ser så keglet ud, men det kan jeg ikke lige overskue.
Avatar billede pidgeot Nybegynder
28. februar 2008 - 14:43 #12
Også en mulighed, ja - men jeg valgte at gå ud fra der kunne være fjernet noget kode mellem <div>'sene, som måske ikke egnede sig i en while (Hvad den kode ville gøre, har jeg ingen anelse om, men... :-))
Avatar billede pidgeot Nybegynder
28. februar 2008 - 14:44 #13
Svaret kommer her.
Avatar billede katja_kh Nybegynder
28. februar 2008 - 14:47 #14
showsource. den kode kan den ikke lide.. Den skriver et 3 tal og finder ingen billeder..

Men den måde pidgeot gav mig virker så han får point. For jeg er glad bare det virker. Husk vi skal ikke tænke på udseende. ;o)
Avatar billede showsource Seniormester
28. februar 2008 - 15:25 #15
Jaja, udseendet betyder ikke det store!
MEn det er jo ligeså nemt at udskrive div's
(glemte $row i while)
while($rows = mysql_fetch_array($randomimg)) {
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester