Just nu i M3-nätverket
Gå till innehåll

visa innehåll i mapp


kungmats

Rekommendera Poster

Hej!

 

Skulle det vara möjligt att göra en PHP-fil som kollar vilka filer som ligger i en mapp och sen "Includar"(Gärna slumpmässigt) dessa för visning på en sida.

 

Typ.

 

...läser mapp och hittar fil1.php, fil4.php & fil7.php

 

include ("fil1.php");

echo "<br>";

include ("fil7.php");

echo "<br>";

include ("fil4.php");

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Tack för tips!

 

At lista filerna lyckades jag med på några få rader som jag hittade efter att ha läst ditt tips, men att få till slumpmässig visning av dom, det fixar jag inte.

 

Tacksam för tips!

=======================================

 

$handle=opendir('.');

 

while (false!==($file = readdir($handle))) { if (!is_dir($file)) {

echo "$file";

echo "<br>";

} } closedir($handle);

 

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Ett sätt att slumpa skulle vara att läsa in filnamnen i en array och sedan slumpa ur arrayen (array-index).

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Problemet är bara att jag inte klarar det. Har suttit och klurat ett bra tag nu men det är överkurs för mej än så länge.

 

Länk till kommentar
Dela på andra webbplatser

För att fortsätta på din egen kod, och slumpa fram en fil att inkludera:

$handle=opendir('.');
while (false!==($file = readdir($handle))) { 
if (!is_dir($file)) {
	$filer[] = $file; 
} 
} closedir($handle); 

list($usec,$sec)=explode(" ",microtime());
mt_srand($sec * $usec);
include ($filer[mt_rand(0, sizeof($filer)-1)]);

 

Vill du har inkludera fler filer misstänker jag att du inte villha samma fil inkluderad flera gånger. Då kan du prova något liknande det här:

$handle=opendir('.');
while (false!==($file = readdir($handle))) { 
if (!is_dir($file)) {
	$filer[] = $file; 
} 
} closedir($handle); 

$antalfiler = 3;
list($usec,$sec)=explode(" ",microtime());
mt_srand($sec * $usec);
$slumptal[] = mt_rand(0, sizeof($filer)-1);
while (sizeof($slumptal)<$antalfiler){
$temp = mt_rand(0, sizeof($filer)-1);
if(!in_array($temp, $slumptal)) $slumptal[] = $temp;
}
for ($i=0; $i<sizeof($slumptal);$i++){
include ($filer[$slumptal[$i]]);
}

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hmm!

 

Intressant!

 

Skulle jag kunna göra så här då?

 

=================================

$handle=opendir('.');

 

while (false!==($file = readdir($handle))) { if (!is_dir($file)) {

include (shuffle ("$file")) ;

echo "<br>";

} } closedir($handle);

=================================

 

Till Paddskalle:

Tack för all hjälp du ger mej!

 

Jag höll på före påsk med lite datumstrul som du hjälpte mej med, men jag gav till slut upp.

 

[inlägget ändrat 2002-04-03 10:34:17 av kungmats]

Länk till kommentar
Dela på andra webbplatser

Nej, använd shuffle() för att "slumpa" ordningen i arrayen. Kolla exemplet i manualen. Du bör göra en srand() innan.

 

Följ B Wissers exempel och läs in filnamnen i en array och gör sen shuffle() på den.

Inkludera sen filerna med ex.vis

 

foreach ($shuffled_array as $file) {

include($file);

}

 

 

 

Länk till kommentar
Dela på andra webbplatser

Jag får inte detta att fungera.

Jag får följande felmedd.

=====

Warning: Division by zero in ....php on line 22 (alltså include-raden)

 

Tacksam för tips.

 

 

 

 

$handle=opendir('.');

while (false!==($file = readdir($handle))) {

if (!is_dir($file)) {

$filer[] = $file;

}

} closedir($handle);

 

$antalfiler = 3;

list($usec,$sec)=explode(" ",microtime());

mt_srand($sec * $usec);

$slumptal[] = mt_rand(0, sizeof($filer)-1);

while (sizeof($slumptal)<$antalfiler){

$temp = mt_rand(0, sizeof($filer)-1);

if(!in_array($temp, $slumptal)) $slumptal[] = $temp;

}

for ($i=0; $i<sizeof($slumptal);$i++){

include ($filer[$slumptal[$i]]);

}

 

 

Länk till kommentar
Dela på andra webbplatser

Jag får det att fungera; både på min windowsmaskin hemma och på linuxmaskinen på mitt webbhotell.

 

Kolla här: http://www.a-kok.com/filer/kungsmats/dir/test.php

Sriptet listar filerna i samma katalog som skriptet, så jag har lagt till följande kodsnutt för att inte inkludera sig själv:

if($file != "test.php")

Jah har även lagt till en funktion ifall filerna i katalogen är färre än $antalfiler eller det inte finns några filer alls.

 

Ligger filerna i en annan katalog så får man göra lite annorlunda: http://www.a-kok.com/filer/kungsmats/test.php

Kodsnutten if($file != "test.php") kan du ta bort. Den finns kvar för jag har en test.php även i den katalogen (Den första länken).

 

Jag kör Apache både på min testmaskin och på webbhotellet. Vet inte om det gör någon skillnad om du använder IIS.

 

 

 

Länk till kommentar
Dela på andra webbplatser

1000-Tack!!!!!

 

Nu fungerar det!

 

Undrar vad som blev vid först försöket!?!

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Hej igen!

 

Ditt förslag på detta fungerar utmärkt, med ett enda litet "men"

 

Om mappen innehåller en eller färre filer fås felmeddelandet: Error division by zero .....

 

Dock så skrivs den enda filen ut trots felmmedd.

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Tack!

 

Jag skall testa så fort jag kan, men just nu ligger servern nere för hotellet jag hyr på.

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Hej B Wisser!

 

Tror du att scriptet (innan den sista ändrigen du gjorde) skulle kunna loopa oändligt om det inte finns någon fil alls i mappen? Jag har svårt att läsa ut det själv.

 

Jag har lyckats "hänga" servern där jag hyr plats 3ggr på kort tid pga "to many connections"

 

Detta händer dock bara om jag kör där mappen är tom, men jag är ju inte hundra på att det beror på detta script.

 

Jag har ju även en db connection som inte hittar det den söker. (Bifogas längre ner.

 

 

// Ditt script

 

<?php

$handle=opendir('.');

while (false!==($file = readdir($handle))) {

if (!is_dir($file)) {

if($file != "lista.php") $filer[] = $file;

}

}

closedir($handle);

 

$antalfiler = 5;

if (sizeof($filer)<$antalfiler) $antalfiler = sizeof($filer);

list($usec,$sec)=explode(" ",microtime());

mt_srand($sec * $usec);

$slumptal[] = mt_rand(0, sizeof($filer)-1);

while (sizeof($slumptal)<$antalfiler){

$temp = mt_rand(0, sizeof($filer)-1);

if(!in_array($temp, $slumptal)) $slumptal[] = $temp;

}

if($antalfiler>0) for ($i=0; $i<sizeof($slumptal);$i++){

include ($filer[$slumptal[$i]]);

echo "<br>";

}

 

?>

 

 

 

 

// Db Connection

 

<?php

$open = mysql_connect("localhost", "databas", "losen");

 

 

$dagensdatum = date("ymd");

 

 

$data = mysql_db_query("databas", "SELECT * FROM tabellen WHERE (omrade = 'Stockholm') AND ((startdatum = $dagensdatum) OR ( startdatum <= $dagensdatum AND stopdatum >= $dagensdatum )) ORDER BY omrade");

 

 

if (!mysql_num_rows($data))

{

print "Det blev ingen träff.";

}

 

else

 

{

while ($event = mysql_fetch_array ($data)) {

 

print "$event["omrade"]";

 

 

}

}

 

mysql_close($open);

 

 

?>

 

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Jag ser att du inte använt den reviderade kod jag la upp sist. Den tog bort problemet med för få filer. Jag har nu gjort ytterligare revideringar. Kolla länkarna jag skickade med i tidigare inlägg.

Heter din fil "lista.php" så borde den inte köra fast i en slinga. Heter den däremot något annat eller du har en annan fil med likadant innehåll i katalogen, så kommer den att fastna i en oändlig loop.

För säkerhets skull lägg include-filerna i en katalog och skriptet i en annan. Mer lätthanterligt med det skript jag har lagt upp nu.

Jag har testat skriptet på på min windows-maskin lokalt hemma och på mitt webbhotell (Linux/Apache) utan några problem. Går bra även när det inte finns filer.

 

Sen till databasen. Först ett citat från PHP-manualen: "This function has been deprecated since PHP 4.0.6. Do not use this function. Use mysql_select_db() and mysql_query() instead.".

Det innebär att funktionen mysql_db_query kommer att försvinna i senare versioner av PHP och du rekommenderas att inte använda det. Skriv så här istället:

$open = @mysql_connect("localhost", "databas", "losen")
or die("Kunde inte ansluta till databas-servern"); 

mysql_select_db("databas", $open) 
 or die("Kunde inte ansluta till databasen !!");

$dagensdatum = date("ymd");

$data = mysql_query( "SELECT * FROM ..... ORDER BY omrade"); 

Då får du dessutom felmeddelande om anslutning till servern eller databasen misslyckades.

 

Förstår inte av din fråga om det var databasanslutningen som misslyckades eller om resultat blev "Det blev ingen träff" eller ingenting.

Använder du koden ovan så kan du se om det var databasanslutningen som misslyckades. I såfall är det fel antingen på användarnamn, lösenord eller databasnamn. Jag vet inte hur känsligt databasanslutningen är för stora och små bokstäver, men för säkerhets skull var noga.

 

En liten tanke på sql-frågan: Sparar du datum under formatet 020409 ?

Och som frågan är formulerad så måste du ha rader med tomt stoppdatum. Dessa rader kommer aldrig att bli hittade om inte startdatum är lika med dagendatum.

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

1000-tack för fix och tips.

Testar senare ikväll.

 

Felet var att jag inte fick några träffar alls och att scriptet du fixade loppade oändligt. Men felet var inte ditt, utan mitt.

Jag hade glömt att föra över katalogen med filerna som skulle listas, vilket gjorde att scriptet inte hittade katalogen och att servern till slut hängde sig pga för många öppna connections.

Det fungerar nu. (med undantag för när bara en fil finns, men jag testar ditt senare ikväll.)

 

 

.... till datumet.

 

Jag använder formatet 2002-04-09 och ja, jag ställer dubbla frågor därför att....(har inte kommit på nåt annat sätt)

 

Dels har jag evenemang som bara har startdatum (dvs dom händer bara en dag)

 

... dels har jag evenemang som håller på under en period.

 

Jag skulle gärna ha ett bättre system, men som nybörjare går det långsamt.

 

Jag skulle vilja kunna:

==========================

* Mata in bara ett datum och visa det aktuell dag.

* Mata in en period för att visas varje dag.

* Mata in en period men bara visa t.ex. torsdagar under perioden.

 

Dessutom skulle jag vilja kunna välja idag, imorgon, en vecka eller en månad.

 

För att visas så här:

 

DATUM VECKODAG EVENEMANG ARENA TID

========================================

 

..... men jag jobbar på det.

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Ett förtydligande av mitt tidigare svar.

 

date("ymd") ger format 020409

 

date("Y-m-d") ger format 2002-04-09

 

Du jämför alltså päron med äpplen i din sql-fråga.

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Din kod fungerar super!!!

 

 

Jag förstod vad du menade med "äpplen" och "päron" med om jag ändrade till Y-m-d får jag ingen träff alls.

 

Det fungerar som jag har det, Varför?

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Om det fungerar och sql-satsen ger de svar du förväntar dig, så tycker jag du ska ha det så. Är allt för mycket nybörjare på MySql för att kunna förklara och förstå.

Det enda jag kan tänka är att det i databasen är lagrat i formatet 020409, men så är det ju inte !!

 

Vad får du för utfall med:

$data = mysql_query( "SELECT startdatum FROM tabellen");
while ($event = mysql_fetch_array ($data)) { 
echo $event['startdatum']."<br>";
} 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Jag får felkod:

 

Warning: Supplied argument is not a valid MySQL result resource in ..... testar.php on line 6

 

... med denna kod.

 

<?

 

$open = mysql_connect("localhost", "databas", "pass");

 

$data = mysql_query( "SELECT startdatum FROM tabellen ");

while ($event = mysql_fetch_array ($data)) {

echo $event['startdatum']."<br>";

}

mysql_close($open);

 

?>

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Prova det här:

 

<?php

 

$open = mysql_connect("localhost", "databas", "pass")

or die("Kunde inte ansluta till databas-servern !!");

mysql_select_db("databas", $open)

or die("Kunde inte ansluta till databasen !!");

 

$data = mysql_query("SELECT startdatum FROM tabellen");

while ($event = mysql_fetch_array ($data)) {

echo $event['startdatum']."<br>";

}

mysql_close($open);

 

?>

 

Redigerat:

Förutsätter att din tabell heter tabellen (från dina tidigare exempel).

 

[inlägget ändrat 2002-04-09 20:42:29 av B Wisser]

Länk till kommentar
Dela på andra webbplatser

Det listar alla datum enligt xxxx-xx-xx

 

 

Kan datumformatet (ymd) i förhållande till (Y-m-d) ha att göra med att kolumnerna i tabellen för startdatum och stopdatum är satta till date och inte text?

[inlägget ändrat 2002-04-09 21:27:38 av kungmats]

[inlägget ändrat 2002-04-09 21:28:41 av kungmats]

Länk till kommentar
Dela på andra webbplatser

Jag förutsatte att du hade använt DATE.

Testade date("Y-m-d") == databas.DATE och fick SANT. Med det resultatet så skulle din kod fungera med date("Y-m-d"), men inte med date("ymd") ?!?!

 

Får fundera lite.

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...