Avatar billede qub- Novice
13. maj 2003 - 10:47 Der er 8 kommentarer og
1 løsning

Galleri - Billedtekst

Hejza.. jeg er igang med og lave et galleri..

Min addpic.php (den side hvor man oploader billeder) ser sådan her ud:

<form enctype="multipart/form-data" action="opload.php" method="post">
<input type="hidden"><div align="center">
Send this file: <input name="userfile" type="file"></div><br><br>
<center><input type="submit" value="Send File"></center>
</form>



Og min opload.php (opload script.. der får billederne til og komme i files/):

<?php

$uploadfile = $_FILES['userfile']['tmp_name'];
$uploaddir = "files/".$_FILES['userfile']['name'];

print "<pre>";
if (move_uploaded_file($uploadfile, $uploaddir)) {
  print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
  print_r($_FILES);
} else {
  print "Possible file upload attack!  Here's some debugging info:\n";
  print_r($_FILES);
}
?>



Min galleri.php (Der hvor alle billederne kommer):

<?php
#Indstillinger
$sum = 3; // Antal billeder ved siden af hinanden
$sumcount = 1;
$imgwidth = 100; // Billedets bredde
$imgheight = 100; // Bileddets højde
$mappe = "files/"; // Mappen med billeder
$pr_side = 15; // Antal billeder pr. side

if (isset($_GET['offset'])) {
    $offset = $_GET['offset'];
} else {
    $offset = 0;
}
$pics = $offset+$pr_side;
$i = $offset;

# Laver et array med billederne, så vi senere kan sortere dem alfabetisk
$handle = opendir($mappe);
while (($fil = readdir($handle)) !== false) {
    if ($fil != "." && $fil != ".." && !is_dir($mappe."/".$fil)) {
        $billeder[] = "$fil";
    }
}
closedir($handle);

# Udskriver billederne
sort($billeder);
while($i < $pics && $billeder[$i] != "") {
    echo "<a href=\"java script: PopUp('$mappe/$billeder[$i]')\"><img src=\"$mappe/$billeder[$i]\" border=\"1\" width=\"100\" height=\"100\"></a> ";
    if ($sumcount == $sum) {
        $sumcount = 0;
        echo "<br>";
    }
    $sumcount++;
    $i++;
}
?><br>
<?php
#Udskriver frem og tilbage links
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href=\"?offset=$forrige\">Forrige</a> ";
}
if (count($billeder) > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href=\"?offset=$naeste\">Næste</a>";
}
?>



<--- Det virker fint nok.. Alle billeder jeg oploader til filen files/ som jeg oploader via addpic.php og opload.php som er opload scriptet.. kommer ind og vises på galleri.php!!!

Men..

Jeg vil godt have så samtiddig med man oploader billedet.. Så kan man skrive en lille billedtekst.. Og det gemmer den så! Og det kommer til og stå nede under billedet i galleri.php..

Nogen der kan fixe / hjælpe? :D
Avatar billede max_max Nybegynder
13. maj 2003 - 11:15 #1
Har du adgang til en MySQL database på din server?
Avatar billede tkandersen Nybegynder
13. maj 2003 - 11:52 #2
Alternativt kan du gemme en tekstfil med samme navn som billedet på nær ext.
Eks: landskab.jpg og så lave en tilsvarende landskab.txt med tekstdata.
Ved upload:
$tmpnavn = basename($_FILES['userfile']['tmp_name']);
$fnavn = substr($tmpnavn, 0, strrpos($tmpnavn, "."));

$txtfilnavn = $fnavn.".txt";
$fd = fopen($txtfilnavn, "w");
fwrite($fd, $_REQUEST["beskrivelse"]);
fclose($fd);

Når du udskriver billederne i galleri.php kan du for hver gang du har en billedfil:

$tmp = basename($billeder[$i]); // uden path (overflødig i dit tilfælde)
$fnavn = substr($tmp, 0, strrpos($tmp, "."));
$txtfilnavn = $fnavn.".txt";
if (file_exists($mappe."/".$txtfilnavn)) {
  readfile($mappe."/".$txtfilnavn);
}

Håber det funker
Avatar billede qub- Novice
13. maj 2003 - 21:52 #3
ja jeg har adgang til mysql :)

Så det må det meget gerne være i :D

tkandersen...

Jeg er ikke den vilderen php'er.. Så der skal jo også være så den selv opretter den fil?
Avatar billede tkandersen Nybegynder
13. maj 2003 - 22:09 #4
qub- > Det er derfor jeg også har skrevet hvordan den opretter filen...

fopen() opretter tekstfilen
fwrite() skriver teksten til filen
fclose() lukker filen

hvis billedet hedder landskab.jpg vil den oprette en tekstfil med navnet landskab.txt.

Det tages der også højde for i kodestumpen til galleri.php hvor din kode finder billedfilen - og det navn snupper ovenstående kodestump og erstatter .jpg med .txt og viser teksten (det gør readfile()).
Avatar billede tkandersen Nybegynder
13. maj 2003 - 22:17 #5
Eksempel:
Din addpic.php:
<form enctype="multipart/form-data" action="opload.php" method="post">
<input type="hidden"><div align="center">
Send this file: <input name="userfile" type="file"></div><br><br>

Billedbeskrivelse: <input type=text name=beskrivelse><br><br>

<center><input type="submit" value="Send File"></center>
</form>


Din opload.php:

<?php

$uploadfile = $_FILES['userfile']['tmp_name'];
$uploaddir = "files/".$_FILES['userfile']['name'];

print "<pre>";
if (move_uploaded_file($uploadfile, $uploaddir)) {
  print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
  print_r($_FILES);

  $tmpnavn = basename($_FILES['userfile']['tmp_name']);
  $fnavn = substr($tmpnavn, 0, strrpos($tmpnavn, "."));
  $txtfilnavn = $fnavn.".txt";
  $fd = fopen($txtfilnavn, "w");
  fwrite($fd, $_REQUEST["beskrivelse"]);
  fclose($fd);

} else {
  print "Possible file upload attack!  Here's some debugging info:\n";
  print_r($_FILES);
}
?>


og til sidst din galleri.php:
<?php
#Indstillinger
$sum = 3; // Antal billeder ved siden af hinanden
$sumcount = 1;
$imgwidth = 100; // Billedets bredde
$imgheight = 100; // Bileddets højde
$mappe = "files/"; // Mappen med billeder
$pr_side = 15; // Antal billeder pr. side

if (isset($_GET['offset'])) {
    $offset = $_GET['offset'];
} else {
    $offset = 0;
}
$pics = $offset+$pr_side;
$i = $offset;

# Laver et array med billederne, så vi senere kan sortere dem alfabetisk
$handle = opendir($mappe);
while (($fil = readdir($handle)) !== false) {
    if ($fil != "." && $fil != ".." && !is_dir($mappe."/".$fil)) {
        $billeder[] = "$fil";
    }
}
closedir($handle);

# Udskriver billederne
sort($billeder);
while($i < $pics && $billeder[$i] != "") {
    echo "<a href=\"java script: PopUp('$mappe/$billeder[$i]')\"><img src=\"$mappe/$billeder[$i]\" border=\"1\" width=\"100\" height=\"100\"></a> ";

  $tmp = basename($billeder[$i]); // uden path (overflødig i dit tilfælde)
  $fnavn = substr($tmp, 0, strrpos($tmp, "."));
  $txtfilnavn = $fnavn.".txt";
  if (file_exists($mappe."/".$txtfilnavn)) {
    readfile($mappe."/".$txtfilnavn);
  }


    if ($sumcount == $sum) {
        $sumcount = 0;
        echo "<br>";
    }
    $sumcount++;
    $i++;
}
?><br>
<?php
#Udskriver frem og tilbage links
if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href=\"?offset=$forrige\">Forrige</a> ";
}
if (count($billeder) > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href=\"?offset=$naeste\">Næste</a>";
}
?>

Når du udskriver billederne er der ikke taget højde for formatering i forhold til tekst og billede, men det kan du evt. sætte i en table.
Avatar billede qub- Novice
15. maj 2003 - 20:18 #6
Warning:  fopen(".txt", "w") - Permission denied in /var/www/hotels/1go/online/html/allan/opload.php on line 16

Warning:  Supplied argument is not a valid File-Handle resource in /var/www/hotels/1go/online/html/allan/opload.php on line 17

Warning:  Supplied argument is not a valid File-Handle resource in /var/www/hotels/1go/online/html/allan/opload.php on line 18


Det skriver den =(
Avatar billede tkandersen Nybegynder
16. maj 2003 - 01:41 #7
OK - du har ikke skrive rettighed fra PHP i den mappe ?!
Avatar billede qub- Novice
17. maj 2003 - 09:59 #8
w00t???
Avatar billede qub- Novice
18. maj 2003 - 16:07 #9
bahh
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