Peter Anskjær wrote:
> "Per Thomsen" <pert@pert.dk> skrev i en meddelelse
> news:40b23d96$0$441$edfadb0f@dread14.news.tele.dk...
> [klip]
[klip]
>>
>>I index.php:
>>$serialize = serialize($pictures);
>>// link eks.
>>echo '<a href="view.php?no='.$picNo.'&pictures='.$serialized.'">';
>>echo '<img bla bla bla>';
>>echo '</a>';
>>
>>I view.php:
>>$pictures = unserialize($_REQUEST['pictures']);
>>
>>Men det kommer til at give nogle grimme url'er.
>>
[klip]
>
> Tak, jeg kan forestille mig at det giver nogle meget grimme url'er, men det
> vil løse problemet. Det er et lidt irreterende at det ikke kan laves
> flottere synes jeg, hvordan ville du løse problemet?
>
Jeg tror jeg ville vælge at bruge sessions.
Men ikke helt på den måde, som Kim Emax foreslog.
Jeg vil holde fast i $pictures array'et, og så putte det i en session
variabel.
Både i index.php og view.php vil jeg så starte med at se om denne
variable er sat, og hvis den ikke er det, så genererer og sætte den.
Både i index.php og view.php:
session_start();
if( !isset($_SESSION['pictures']) ) {
//Generer array med variable
$pictures = array();
if( ($dh=opendir('.')) ) {
while( $file = readdir($dh) ) {
if( !is_dir($file) ) {
array_push($pictures,$file);
}
}
}
// Eller hvordan du nu har lyst til at gøre det.
$_SESSION['pictures'] = $pictures;
} else {
$pictures = $_SESSION['pictures'];
}
//Resten af koden
På den måde kan du stadig linke direkte til view.php?pic=something eller
index.php. Findes pictures array'et ikke i sessionen, vil det det blive
lavet, men når du kommer tilbage til siden (i samme session), vil det
være tilgængeligt.
Hvis du vil holde fast i ikke at bruge sessions, har jeg et andet
forslag til at fjerne de grimme url'er: Brug POST.
Lav det serializede $pictures ($serialized = serialize($pictures);
Lav en form, der omslutter hele siden, i toppen af denne form:
echo '<input type="hidden" name="pictures" value="'.$serialized.'">';
Jeg går ud fra at du på nuværende tidspunkt viser thumbs i <A*></A>
tags, men gør det i stedet med
echo '<input type="image" style="width: 32px; height: 32px;"
alt="'.$thumb.'" name="picture" value="'.$thumb.'">';
Tjek så i toppen af siden om $_POST['pictures'] er sat.
Her er en grov og utestet skitse:
Ny fil function.generatePicturesArr.php:
<?php
function generatePicturesArr() {
//Generer array med variable
$pictures = array();
if( ($dh=opendir('.')) ) {
while( $file = readdir($dh) ) {
if( !is_dir($file) ) {
array_push($pictures,$file);
}
}
}
// Eller hvordan du nu har lyst til at gøre det.
return $pictures;
}
?>
index.php:
<?php
if( strcasecmp($_SERVER['REQUEST_METHOD'],'POST')!==0 ) {
include_once('function.generatePictures.php');
$pictures = generatePictures();
$serialized = serialize($pictures);
} else {
if( isset($_POST['serialized']) ) {
$serialized = $_POST['serialized'];
$pictures = unserialize($serialized);
} else {
include_once('function.generatePictures.php');
$pictures = generatePictures();
$serialized = serialize($pictures);
}
}
echo '<form action="view.php" method="post">';
echo '<input type="hidden" name="serialized" value="'.$serialized.'">';
foreach($pictures as $picture) {
echo '<input type="image" style="width: 32px; height:32px;
value="'.$picture.'" src="thumbs/'.$picture.'">';
}
echo '</form>';
?>
view.php:
<?php
if( strcasecmp($_SERVER['REQUEST_METHOD'],'POST')!==0 ) {
include_once('function.generatePictures.php');
$pictures = generatePictures();
$serialized = serialize($pictures);
// Så du også kan linke direkte til et billede
if( isset($_GET['picture']) ) {
$picture = $_GET['picture'];
} else {
$picture = $pictures[0];
// eller smid en fejl eller hvad nu du har lyst til.
}
} else {
if( isset($_POST['serialized']) ) {
$serialized = $_POST['serialized'];
$pictures = unserialize($serialized);
} else {
include_once('function.generatePictures.php');
$pictures = generatePictures();
$serialized = serialize($pictures);
}
if( isset($_POST['picture']) ) {
$picture = $_POST['$picture'];
} else {
$picture = $pictures[0];
// eller smid en fejl eller hvad nu du har lyst til.
}
}
$currentKey = array_search($picture);
if( $currentKey>0 ) {
$prevKey = $currentKey-1;
$prevForm = '<form action="view.php" method="post">';
$prevForm.= '<input type="hidden" name="serialized"
value="'.$serialized.'">';
$prevForm.= '<input type="hidden" name="picture"
value="'.$pictures[$prevKey].'">';
$prevForm.= '<input type="submit" value="Tilbage">';
$prevForm.= '</form>';
} else {
$prevForm = '';
}
if( $currentKey<(count($pictures)-1) ) {
$nextKey = $currentKey+1;
$nextForm = '<form action="view.php" method="post">';
$nextForm.= '<input type="hidden" name="serialized"
value="'.$serialized.'">';
$nextForm.= '<input type="hidden" name="picture"
value="'.$pictures[$nextKey].'">';
$nextForm.= '<input type="submit" value="Frem">';
$nextForm.= '</form>';
} else {
$nextForm = '';
}
$upForm = '<form action="index.php" method="post">';
$upForm.= '<input type="hidden" name="serialized" value="'.$serialized.'">';
$upForm.= '<input type="submit" value="Op">';
$upForm.= '</form>';
list($width,$height,$type,$attr) = getimagesize($picture);
echo '<img src="'.$picture.'" '.$attr.' alt="'.$picture.'"><br/>';
echo $prevForm.$upForm.$nextForm;
?>
Så har du ingen vildt grimme url'er, ingen session og du kan stadig
linke direkte til et billede i view.php
Håber du forstår ideen.
MVH Per Thomsen,
http://www.pert.dk/