Avatar billede julemandenb Nybegynder
24. januar 2010 - 15:10 Der er 11 kommentarer og
2 løsninger

Udskriv et tilfældig felt fra tilfældig colonne & tilfældig række

Hej (:

- Ja overskriften siger lidt sig selv
Jeg har en side hvor jeg har en møbelliste
listen henter møblerns information ud fra
møbellistens egen database og ud for kategoriet
har de ders egen tabel.

Jeg kunne godt tænke mig at denne kode
selv valgte en tilfældig tabel og en tilfældig række
og skrev den du. når man så opdater sin browser
finder den en ny

(Hvad skal der stå ved "Hjælp" for at den selv vælger database? :D)


<?php /*
include "mobel_connect.php";
$sql = "select * from HJÆLP order by rand() limit 1;";
$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_assoc($result))
{
echo $row['navn'];?> - <? echo $row['pris'];?>Mønter & <? echo $row['hc'];?> Hc<br>
                   
<?php
}*/
?>



Hilsen
Mikkel (:
Avatar billede intenz Novice
24. januar 2010 - 15:26 #1
Du er nødt til at have en liste over de taller der er til rådighed. Dem kan du så putte i et array:

$tables = array();
$tables[] = "første_tabel";
$tables[] = "anden_tabel";
$tables[] = "tredje_table";
osv...

Så skal du finde ud af hvor mange muligheder der er:
$muligheder = count($tables);

Så kan du hente et tilfældigt tal indenfor det antal muligheder der er.
$tabel_id = rand(0, $muligheder-1);

Og så har du en tilfældig tabel her, som du kan indsætte i dit kald:
echo $tables[$tabel_id];
Avatar billede intenz Novice
24. januar 2010 - 15:26 #2
Ja, 'taller' skulle så selvfølgelig hedder 'tabeller' :P
Avatar billede julemandenb Nybegynder
24. januar 2010 - 15:42 #3
#1
Kan du forklare lidt bedere?
har ikke arbejdet med array før ;D
Avatar billede intenz Novice
24. januar 2010 - 18:10 #4
Et array kan sammenlignes med en liste. Hvis vi tager det eksempel jeg skrev:
$tables = array();
$tables[] = "første_tabel";
$tables[] = "anden_tabel";
$tables[] = "tredje_table";

Første linje over arrayet i variablen $tables.
Næste linjer indsætter nye indhold på næste position af arrayet (position 0):
$tables[] = "første_tabel";

Den kan så kaldes frem igen, ved at kalde:
print $tables[0]; // udskriver 'første_tabel'

De efterfølgende værdi kan udskrives ved:
print $tables[1]; // udskriver 'anden_tabel'
print $tables[2]; // udskriver 'tredje_tabel'

Osv. Så du samlet alle værdierne i samme variabel, hvilket er et array.

Den næste linje:
$muligheder = count($tables);

Den tæller hvor mange værdier arrayet indholder, så:
print $muligheder; // vil i dette tilfælde udskrive 3.

Næste linje:
$tabel_id = rand(0, $muligheder-1);

Den finder et tilføldigt tal mellem 0 og 2. Jeg trækker en fra muligheder, fordi arrayet starter med at tælle fra 0 og ikke fra 1. Så hvis du udskriver:
print $tabel_id; // udskriver enten 0, 1 eller 2.

Da arrayet indholdet tabel navnet på 0, 1 eller 2. Kan du så bruge det tal til at hente en værdi ud igen fra arrayet:
echo $tables[$tabel_id]; // udskriver enten første_-, anden_- eller tredjetabel (som er tabelnavnet).
Avatar billede julemandenb Nybegynder
24. januar 2010 - 18:23 #5
Det lyder egentlig ikke særlig svart,
MEN
Hvordan får jeg det til at virke?

skal jeg bikse det sammen med det jeg har i forvejen?
Avatar billede showsource Seniormester
24. januar 2010 - 18:32 #6
Lavede lige en:

<?php

$host = "localhost";
$user = "brugernavn";
$password = "password";
$database = "database";

$con = @mysql_connect($host,$user,$password) or die (mysql_error());

mysql_select_db($database, $con) or die (mysql_error());

$tabelsql = "SHOW TABLES FROM ".$database;
$tables = mysql_query($tabelsql) or die (mysql_error());

$tables_ialt = mysql_num_rows($tables);

    if($tables_ialt < 1) {
    echo("Der er ingen tabeller i databasen ".$database." !!!");
    exit;
    }

$tabeller = array();

    while($tbnavn = mysql_fetch_row($tables)) {
    $tabeller[] = $tbnavn[0];
    }

mysql_free_result($tables);

echo"Mulige tabeller:<br />";
print_r($tabeller);

echo"<p>";

$brugtabel = $tabeller[rand(0,(count($tabeller)-1))];
echo"Bruger tabellen:<br />";
echo $brugtabel;

echo"</p><p>";

// Find kolloner:

$colsql = "SHOW COLUMNS FROM ".$brugtabel;
$cols = mysql_query($colsql) or die (mysql_error());
$cols_antal = mysql_num_rows($cols);

    if($cols_antal < 1) {
    echo"Ingen kolonner fundet i ".$_GET["tb"];
    exit;
    }

$allcols = array();

    while($c = mysql_fetch_object($cols)) {
    $allcols[] = $c->Field;
    }

mysql_free_result($cols);

echo"Mulige kolonner:<br />";
print_r($allcols);

$colvalg = $allcols[rand(0,(count($allcols)-1))];

echo"</p><p>";

echo"Bruger kolonnen:<br />";
echo $colvalg;

echo"</p><p>";

$finalsql = "SELECT ".$colvalg." FROM ".$brugtabel." ORDER BY RAND() LIMIT 1";
$row = mysql_query($finalsql) or die (mysql_error());

echo"Tilfældigt valg:<br />";
echo mysql_result($row,0);

mysql_free_result($row);

?>

Kan evt. også laves så den vælger en tilfældig database, hvis du har flere.
Avatar billede julemandenb Nybegynder
24. januar 2010 - 18:51 #7
showsource
Nu har jeg opsat en test

http://coolboom.dk/mobel_test.php

Håber ikke der var noget jeg skulle rette, ud over mysql oplysninget?
Avatar billede showsource Seniormester
24. januar 2010 - 18:58 #8
Ved ikke du, jeg har selv kørt det på min comp.
Men du må jo prøve at ta' den linie for linie.
Måske du er komemt til at slette et tegn?
Avatar billede showsource Seniormester
24. januar 2010 - 19:04 #9
Prøver lige igen med lidt mere evt. info ved fejl:

<?php

$host = "localhost";
$user = "brugernavn";
$password = "password";
$database = "database";

$con = @mysql_connect($host,$user,$password) or die ("Kan ikke connecte: ".mysql_error());

mysql_select_db($database, $con) or die ("Kan ikke vælge db: ".mysql_error());

$tabelsql = "SHOW TABLES FROM ".$database;
$tables = mysql_query($tabelsql) or die ("Kan ikke hente tabeller: ".mysql_error());

$tables_ialt = mysql_num_rows($tables);

    if($tables_ialt < 1) {
    echo("Der er ingen tabeller i databasen ".$database." !!!");
    exit;
    }

$tabeller = array();

    while($tbnavn = mysql_fetch_row($tables)) {
    $tabeller[] = $tbnavn[0];
    }

mysql_free_result($tables);

echo"Mulige tabeller:<br />";
print_r($tabeller);

echo"<p>";

$brugtabel = $tabeller[rand(0,(count($tabeller)-1))];
echo"Bruger tabellen:<br />";
echo $brugtabel;

echo"</p><p>";

// Find kolloner:

$colsql = "SHOW COLUMNS FROM ".$brugtabel;
$cols = mysql_query($colsql) or die ("Kan ikke hente kolloner i tabellen: ".mysql_error());
$cols_antal = mysql_num_rows($cols);

    if($cols_antal < 1) {
    echo"Ingen kolonner fundet i ".$_GET["tb"];
    exit;
    }

$allcols = array();

    while($c = mysql_fetch_object($cols)) {
    $allcols[] = $c->Field;
    }

mysql_free_result($cols);

echo"Mulige kolonner:<br />";
print_r($allcols);

$colvalg = $allcols[rand(0,(count($allcols)-1))];

echo"</p><p>";

echo"Bruger kolonnen:<br />";
echo $colvalg;

echo"</p><p>";

$finalsql = "SELECT ".$colvalg." FROM ".$brugtabel." ORDER BY RAND() LIMIT 1";
$row = mysql_query($finalsql) or die ("Kan ikke vælge tilfældig resultat: ".mysql_error());

echo"Tilfældigt valg:<br />";
echo mysql_result($row,0);

mysql_free_result($row);

?>
Avatar billede julemandenb Nybegynder
24. januar 2010 - 21:00 #10
Jeg har besluttet mig for at lave det på en nemmere måde da jeg har snakket med en anden og har fortalt mig at det bliver sværer for mig selv senere hvis jeg ikke laver det om

Jer som har hjulper og har lyst til point kan evt smide et svar (:
Avatar billede intenz Novice
24. januar 2010 - 21:43 #11
Lægger et.
Avatar billede showsource Seniormester
25. januar 2010 - 06:52 #12
øhh, hvad bliver sværere ?
Så længe det er php og mysql kan mit ex. jo blot bruges som en includefil.
Visning er uden brugerinput, så der er ikke noget farligt i det.

Men det kunne jo klart forenkles hvis du vælger en bestemt tabel, med kun en kolonne og så x antal rows med det du vil vise random.

Og point er ikke noget for mig her.
Avatar billede julemandenb Nybegynder
27. januar 2010 - 12:42 #13
Lukket
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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