Hallo,
ik ben bezig met een fotogalerie waarbij ik de grote foto op dezelfde pagina wil hebben als de kleine foto's en wanneer de pagina wordt geopend er een foto te zien is. Voorbeeld is http://www.robcnossen.nl/view_album.php?album_id=7.

Het is tot nu toe gedeeltelijk gelukt, wanneer de pagina wordt geopend is de laatst geüploade foto te zien en in de bron bij de img src is dan te zien dat het bijvoorbeeld om foto3.jpg uit de map uploads en album nummer 7 gaat, maar wanneer ik op een kleine foto klik om die te bekijken komt die niet tevoorschijn. In de paginabron bij img src is te zien dat foto3.jpg niet weg is gegaan en dat een andere foto erbij is gekomen, er ontstaat dan bijvoorbeeld zoiets als <img src="uploads/7/foto3.jpguploads/7/foto2.jpg" title="" />. Dus foto2.jpg komt op de juiste plaats aan maar foto3.jpg gaat niet weg. Er wordt dus geen enkele foto getoond.
Mijn code is;


<?php 
include 'core/init.php';

if (isset($_GET['album_id'])) {
	$album_id = $_GET['album_id'];
$album_data = album_data($album_id, 'name', 'description');

echo '<h3>', $album_data['name'], '</h3><p>', $album_data['description'], '</p>';

$albums = get_albums();
$images = get_images($album_id);

}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>
</head>

<body>
<div id="wrap">
<div id="sidebarleft">
<?php
//Een album met de kleine foto's 
if (empty($images)) {
        echo 'Er zijn geen foto\'s in dit album';
} else {
        foreach ($albums as $album) {      
        foreach ($images as $image) { 
		if ($image['album'] === $album['id'])         
                echo'<a href="view_album.php?album_id=', $album['id'],'&image_id=uploads/', $image['album'], '/', $image['id'], '.', $image['ext'], '"><img src="uploads/thumbs/', $image['album'], '/', $image['id'], '.', $image['ext'], '" title="" /></a><a href="delete_image.php?image_id=', $image['id'],'">x</a> ';                
        }            
    }
}

?>
</div>
<div id="imagecontainer">
  <div id="image">
<?php
//Hier wordt de grote foto getoond
    if (isset($_GET['image_id'])){
        $full_image = $_GET['image_id'];
    }else{
        $full_image = (isset($images['id']));
    }
     
    echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'],  '.' ,$image['ext'],htmlentities($full_image), '" title="" />';

//$img = get_image($album_id);
//echo '<img src="uploads/', $img['album'], '/',$img['image_id'], '" title="" />';

?>
Ik dacht dat ik het zou kunnen oplossen met een if else statement;
<?php 
$full_image=(isset($_GET['image_id'])) ? $_GET['image_id'] : (isset($images['id']));
if(isset($_GET['image_id'])){
//echo werkt wel als ik het buiten de haakjes zet
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'],  '.'
,$image['ext'],htmlentities($full_image),  '" title="" />';
}else{
$full_image=(isset($_GET['image_id'])) ? $_GET['image_id'] : (isset($images['id'])); 
echo'<img src="',htmlentities($full_image), '" title="" />';
}
 ?>


Dit werkt niet, er komt geen foto tevoorschijn.

Mijn vraag is, wat moet er gedaan worden om de (soort) standaardwaarde te laten vervangen door een andere foto?
Ik kan op het internet hierover niets vinden wat mij tot een oplossing zou kunnen brengen.

Bij voorbaat dank,

Rob

Ik ben een klein stukje verder en ik denk dat het mijn uitleg wat kan verduidelijken want mijn vorige bericht was niet echt duidelijk.

Ik probeer in mijn fotogalerie met kleine foto's en de grote foto op een pagina de standaardwaarde(de grote foto die je ziet wanneer je de pagina opent) te laten vervangen door een foto naar keuze wanneer je op een kleine foto klikt.
Misschien dat de pagina het meer kan verduidelijken;http://www.robcnossen.nl/view_album.php?album_id=7
Klik maar op een kleine foto en er gebeuren rare dingen. De foto wordt wel zichtbaar maar de standaardfoto gaat niet echt weg waardoor de foto onder de standaardfoto tevoorschijn komt.
In de paginabron is de volgende code te zien;<img src="uploads/7/130.jpg1" title="" /><img src="uploads/7/123.jpg" title="" />.
Het eerste gedeelte met foto 130.jpg wil ik laten plaats maken voor het tweede gedeelte met foto 123.jpg.
Nu komt er achter 130.jpg een 1 achter te staan waardoor de foto niet te zien is, maar weg is de standaardfoto ook niet.
Mijn code is nu;
<?php
if (empty($images)) {
echo 'Er zijn geen foto\'s in dit album';
} else {
foreach ($albums as $album) {
foreach ($images as $image) {
if ($image['album'] === $album['id'])
echo'<a href="view_album.php?album_id=', $album['id'],'&image_id=uploads/', $image['album'], '/', $image['id'], '.', $image['ext'], '"><img src="uploads/thumbs/', $image['album'], '/', $image['id'], '.', $image['ext'], '" title="" /></a><a href="delete_image.php?image_id=', $image['id'],'">x</a> ';
}
}
}
?>
<?php
//$standaardwaarde is grote foto wanneer je de pagina opent
$standaardwaarde = (isset($_GET['image_id']));
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardwaarde), '" title="" />';

//if($standaardwaarde==false);
//break($standaardwaarde);

//wanneer je klikt op een kleine foto komt de grote foto tevoorschijn
if (isset($_GET['image_id'])){
$klikfoto = $_GET['image_id'];
}else{
$klikfoto = (isset($images['id']));
}
echo'<img src="',htmlentities($klikfoto), '" title="" />';
?>
Kan ik dat alleen met break doen? Ik heb switch case gebruikt, dit lukte mij niet maar misschien gebruik ik het ook verkeerd;
<?php
$standaardfoto = (isset($_GET['image_id']));
switch ($standaardfoto) {
case (isset($_GET['image_id'])):
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardfoto), '" title="" />';
break;
case (isset($_GET['image_id'])) ? $_GET['image_id'] : (isset($images['id'])):
echo'<img src="',htmlentities($standaardfoto), '" title="" />';
break;
?>
Wie kan mij hierbij helpen?
Wat probeer je bij de switch te bereiken?
<?php
$standaardfoto = (isset($_GET['image_id']));
switch ($standaardfoto) {
case (isset($_GET['image_id'])):
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardfoto), '" title="" />';
break;
?>
is het gedeelte wat zichtbaar wordt wanneer je de pagina opent. Dat gedeelte wil ik laten verdwijnen wanneer ik op een kleine foto druk. Met break hoopte ik dat dit gedeelte plaats zou maken voor;
<?php
$standaardfoto = (isset($_GET['image_id']));
switch ($standaardfoto) {
case (isset($_GET['image_id'])) ? $_GET['image_id'] : (isset($images['id'])):
echo'<img src="',htmlentities($standaardfoto), '" title="" />';
break;
?>
Misschien dat dit mijn bedoeling nog wat duidelijker kan maken;
<?php
//$standaardwaarde is grote foto wanneer je de pagina opent
$standaardwaarde = (isset($_GET['image_id']));
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardwaarde), '" title="" />';
unset($standaardwaarde);

//wanneer je klikt op een kleine foto komt de grote foto tevoorschijn
if (isset($_GET['image_id'])){
$klikfoto = $_GET['image_id'];
}else{
$klikfoto = (isset($images['id']));
}
echo'<img src="',htmlentities($klikfoto), '" title="" />';
?>
Hier probeer ik met unset($standaardwaarde); de standaardfoto(de foto die zichtbaar is wanneer je de pagina opent, in dit geval de foto met het kruiend ijs, want dat is de laatst geüploade foto), te stoppen en plaats te laten maken voor een andere foto omdat er op een thumbnail geklikt wordt. Maar helaas, het lukt niet, ik doe dus iets verkeerd.
http://www.robcnossen.nl/view_album.php?album_id=7
Ik hoop dat het duidelijk wordt, zo niet, vraag verder om verduidelijking.
Dank je...

if(isset($_GET['image_id'])){
//als er een image_id in de url staat deze code

}
else{
//zo niet deze code

}

en waarom gebruik je htmlentities, klikfoto is volgens mij toch een id?
Er staat, wanneer je de pagina opent, geen image_id in de url.
Ik heb nu;
<?php
$standaardwaarde = (isset($_GET['image_id']));
if(isset($_GET['image_id'])){
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardwaarde), '" title="" />';
}
else{
echo'<img src="',htmlentities($standaardwaarde), '" title="" />';
}
?>
http://www.robcnossen.nl/view_album.php?album_id=7
De foto's komen helaas niet door.

Ik heb htmlentities erbij staan omdat ik denk dat dit er altijd bij moet staan wanneer er iets door een gebruiker ingevuld kan worden. de foto's kunnen namelijk door een gebruiker geüpload worden.
Als er geen id in de url staat als je de pagina opent dan heeft $standaardwaarde pas een waarde als er iets in de url staat, dit klopt volgens mij niet. Bij de standaard waarde zou anders alleen een id staan, misschien mist hier ook nog iets.....

Wat krijg je te zien als je de img tag weg haalt en neerzet echo $_GET['image_id']? Waar komt $image vandaan,wat staat er in de functie?
Je bedoelt dat er pas iets met de standaardwaarde gedaan kan worden als er iets daarvan in de url staat?

Als ik de img tag weghaalt en $_GET['image_id'] echoot dan komt er 'Notice: Undefined index: image_id' in beeld. Wanneer ik daarbij isset gebruik is er verder niets te zien, maar er gebeurd ook niets.

De variabele $image komt uit de foreach loop foreach ($images as $image).
Welke functie bedoel je?
Als de standaard waarde uit de url zou komen dan zou je de standaard waarde niet nodig hebben, je kan bij standaard waarde beter gewoon zelf een id neerzetten.

Notice: Undefined index: image_id, kennelijk bestaat $_GET['image_id'] niet dit is de rede dat er niks wordt weergegeven.

Als image_id niet bestaat ga je verder naar else, hier staat alleen de standaard waarde welke ook $_GET['image_id'] is.

Je kan even kijken naar print_r($_GET) maar ik denk dat image_id niet in de url staat.

De variabele $image komt uit de foreach loop foreach ($images as $image).
Welke functie bedoel je?


$images = get_images($album_id);
Rob Cnossen op 18/02/2013 23:26:09

... Als ik de img tag weghaalt en $_GET['image_id'] echoot dan komt er 'Notice: Undefined index: image_id' ...


Zo krijg je geen notice

<?php
$image_id = isset($_GET['image_id']) ? $_GET['image_id'] : 0; // zie ternary operator
switch($image_id) {
...
}
?>
Wanneer je de pagina opent staat er geen image_id maar wel de album_id, in dit geval is het album nummer 7;
http://www.robcnossen.nl/view_album.php?album_id=7
Wanneer je op een kleine foto klikt komt er wel een image_id, deze kan er zo uit zien;
http://www.robcnossen.nl/view_album.php?album_id=7&image_id=uploads/7/123.jpg
Het ligt er maar net aan welke album er geopend is en welke foto je wilt zien.

Ik probeer verder de code goed te krijgen maar dat gaat nog niet goed. Ik probeer nu, zoals je eerder voorstelde, met een gewone if else statement te bereiken wat ik wil;
<?php


//$standaardwaarde is grote foto wanneer je de pagina opent
if($standaardwaarde = (isset($_GET['image_id'])));
echo'<img src="uploads/' ,$image['album'], '/' ,$image['id'], '.' ,$image['ext'],htmlentities($standaardwaarde), '" title="" />';
unset($standaardwaarde);
//wanneer je klikt op een kleine foto komt de grote foto tevoorschijn
if(isset($_GET['image_id'])){
$klikfoto = $_GET['image_id'];
}else{
$klikfoto = (isset($images['id']));
}
echo'<img src="',htmlentities($klikfoto), '" title="" />';
?>
Ook hierbij blijft er in de paginabron dit te zien;
<img src="uploads/7/130.jpg" title="" /><img src="" title="" />

Die tweede lege img src wil ik eigenlijk weg hebben en de eerste img src wil ik behouden maar dan dat de img src wisselt van foto.

De funtie $images = get_images($album_id); ziet er zo uit;
<?php
function get_images($album_id) {
$album_id = (int)$album_id;

$images = array();

$image_query = mysql_query("SELECT `image_id`, `image_name`, `album_id`, `timestamp`, `ext` FROM `images` WHERE `album_id`=$album_id");
while ($images_row = mysql_fetch_assoc($image_query)) {
$images[] = array(
'id' => $images_row['image_id'],
'img_name' => $images_row['image_name'],
'album' => $images_row['album_id'],
'timestamp' => $images_row['timestamp'],
'ext' => $images_row['ext']
);
}
return $images;
}
?>

Reageren