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

In de functie get_images geeft je ook andere namen dan de oorspronkelijke benaming van de kolom, 'id' => $images_row['image_id']. Misschien heeft dat er wat mee te maken...
met print_r($images); is inderdaad alles te zien;
Array ( [0] => Array ( [id] => 122 [img_name] => KONICA MINOLTA DIGITAL CAMERA_1043.jpg [album] => 7 [timestamp] => 1355299786 [ext] => jpg ) [1] => Array ( [id] => 123 [img_name] => KONICA MINOLTA DIGITAL CAMERA_454.jpg [album] => 7 [timestamp] => 1356040162 [ext] => jpg ) [2] => Array ( [id] => 124 [img_name] => [album] => 7 [timestamp] => 1357907892 [ext] => ) [3] => Array ( [id] => 125 [img_name] => PICT0181.JPG [album] => 7 [timestamp] => 1358331529 [ext] => jpg ) [4] => Array ( [id] => 130 [img_name] => PICT0059.JPG [album] => 7 [timestamp] => 1359552936 [ext] => jpg ) )

Ik krijg twee Notice: Array to string conversion in. Het heeft te maken met de beide $image['id'] in dit gedeelte;
<?php
echo '<img src="uploads/' . $image['album'] .
'/' . $image['id'] .
'.', $image['ext'] .
'" alt="Afbeelding #' . $image['id'] . '">';
?>
var_dump($image['id']); laat dit zien;
array(5) { ["id"]=> string(3) "122" ["img_name"]=> string(38) "KONICA MINOLTA DIGITAL CAMERA_1043.jpg" ["album"]=> string(1) "7" ["timestamp"]=> string(10) "1355299786" ["ext"]=> string(3) "jpg" }

Wat kan er dan niet kloppen met $image['id']?
Ik heb op dit moment even geen beeld van de huidige code, misschien kan het totaal even plaatsen. Wat ik me wel afvraag is waarom je doet print_r($images) terwijl je $image['id'] wilt verkrijgen. Waarschijnlijk gebruik je hier foreach, ik zou even doen print_r($image).
<?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);

}

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> ';
}
}
}




$image['id'] = isset($_GET['image_id']) ? intval($_GET['image_id']) : $images[0];
print_r($images);

if(isset($image['album'], $image['id'], $image['ext']))
{
echo '<img src="uploads/' . $image['album'] .
'/' . $image['id'] .
'.', $image['ext'] .
'" alt="Afbeelding #' . $image['id'] . '">';
}

else
{
echo '<b>Fout</b><br>
Eén van de benodigde waardes missen!<br>
Wat ik wel heb:<br>
<hr>
' . print_r($image, true) . '
<hr>';
}
?>
De gedachte was dat $images misschien niet de 'id' door zou geven, daarom print_r($images). Ook print_r($image) staat er nu bij.

Wanneer ik $images[0]; doe dan krijg ik de twee Notice: Array to string conversion in/allerlei mappen/ en dergelijke/ on line 112 en 114. Dat is in dit gedeelte;
<?php
echo '<img src="uploads/' . $image['album'] .
'/' . $image['id'] .
'.', $image['ext'] .
'" alt="Afbeelding #' . $image['id'] . '">';
?>
Daar waar er $image['id']; staat.

Wanneer ik $images['id']; doe dan krijg ik de melding Notice: Undefined index: id in/ op regel 105.

Zou het probleem inderdaad dan misschien in de functie get_images liggen?

<?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;
}

http://www.robcnossen.nl/view_album.php?album_id=7
?>
Wat zie je als je in de while lus in de functie doet echo $images_row['image_id'];. Ik zou er zelf voor kiezen om de kolom namen van de tabel aan te houden maar dat is een persoonlijke keuze.
Bedoel je zo?
<?php
$image['id'] = isset($_GET['image_id']) ? intval($_GET['image_id']) : $images['img_name'];
//print_r($images);

// kijk of alles wat we nodig hebben aanwezig is
if(isset($image['album'], $images_row['image_id'], $image['ext']))
{
echo '<img src="uploads/' . $image['album'] .
'/' . $images_row['image_id'] .
'.', $image['ext'] .
'" alt="Afbeelding #' . $image['id'] . '">';

}
?>
Er veranderd helaas niets. Ik heb ook;
<?php
$image['id'] = isset($_GET['image_id']) ? intval($_GET['image_id']) : $images_row['image_id'];
?>
geprobeerd, maar er is geen verschil, ook niet in de print_r($images) of print_r($image)informatie.
Ik bedoelde dit:

<?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)) {

echo $images_row['image_id'];

        $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;
}
?>
Oke, dat begreep ik verkeerd.

Wat het teruggeeft is 122123124125130. De id's van de foto's zonder spaties.
Ik was even vergeten dat je het id uit de url haalt, probeer van $images['id'] bijvoorbeeld eens $id te maken.

[size=xsmall]Toevoeging op 22/02/2013 14:30:35:[/size]

Waarschijnlijk bevat $images['id'] een array, zoals
$array = array('id' => array(1,2));
Het reageert precies hetzelfde als $images['id'].

Ik moet helaas naar mijn werk. Morgenavond ben ik weer thuis.
Denk je dat ik de get_images function echt nodig heb om de foto's te laten zien?

Reageren