Foto's uit database

Status
Niet open voor verdere reacties.

BoukeWeening

Gebruiker
Lid geworden
3 apr 2007
Berichten
232
goedenavond,

Hoe haal ik foto's uit een database doormiddel van PHP? Dit heb ik nu, hij roept de database nu aan, maar hoe laat ik ze nu weer zien? (echo):

PHP:
<?php
 
$query = "SELECT * FROM sn_ALLbum ORDER BY id WHERE type=album ";
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
 
    }
 
  }
?>

Mijn foto database ziet er zo uit:

id | type | title | description | path | thumb | parent | children

Wie kan me helpen?:rolleyes:
 
Ik moet mijn verhaal een beetje aanpassen... De foto's slaat hij namelijk niet op in de database maar gewoon in een mapje op de server, de gegevens staan in de database... Dus deze gegevens moet hij laden en daaruit de de pagina opbouwen... Zo ziet de database eruit:

database.gif
 
In de while-lus kan je de inhoud van de database laten zien met
PHP:
echo $line['id'];
Om de id te tonen
PHP:
echo $line['type'];
Om het type te tonen, etc.
 
Zo werk het niet:

PHP:
  <?php
 
$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
	
     echo '<img src="', $line[ 'path' ], '">';
	 
    }
 
  }
?>

Wat gaat hier fout?
 
String concatenatie doe je met een punt, niet met een komma. Dus verander
PHP:
echo '<img src="', $line[ 'path' ], '">';
in
PHP:
echo '<img src="' . $line[ 'path' ] . '">';

[edit]Nee, dat is onzin. Met een komma zou het ook moeten werken. Wat gaat er nu mis?[/edit]
 
Laatst bewerkt:
Hij doet nog helemaal niks... Sterker nog: hij laat de hele pagina niet zien... Ter verduidelijking, ik heb nu dit:

PHP:
  <?php
 
$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {

	
     echo '<img src="' . $line[ 'path' ] . '">';
	 
    }
 
  }
?>
 
Er staan twee accolades sluiten ('}') en maar een accolade openen ('{'). Haal er een weg.
 
Oke, dit werkt!!! Mag ik het nu iets moeilijker maken :)

Ik heb dus nu dit:

PHP:
  <?php
 
$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {

	 echo '<h2>', $line[ 'title' ], '</h2>'; 
     echo '<a href=""><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
	 echo '<p>', $line[ 'description' ], '</p>';
	 
    }
?>

En dat werkt tot zo ver, hij toont de allbum foto maar nu wil ik iets meer, namelijk dat als je er op klikt dat je dan alle foto's ziet, namelijk die genoemd staan in de tabel: "childeren".

Een uitdaging?:p

zo ziet de tabel eruit:
database.gif
 
Laatst bewerkt:
Wat zijn die getallen in "children"? id's? Die zou je dan ook met een query uit de database moeten halen. Als je deze database structuur wilt behouden* is het waarschijnlijk het makkelijkste om een query in de vorm
SELECT * FROM tabel WHERE id=9 OR id=10 OR id=37...
of je moet voor elke id apart een query doen. Voor de eerste methode zou je gebruik kunnen maken van str_replace:
PHP:
$query = "SELECT * FROM tabel WHERE id=" . str_replace(",", " or id=", $line['children']);
In het tweede geval zou je met explode de inhoud van childeren in een array kunnen zetten en met foreach steeds de query opbouwen met de juiste id, uitvoeren en weergeven.

De vraag is verder, wil je dit op een nieuwe pagina tonen? Zo ja, dan kan je gebruik maken van een gewone link naar een php-pagina. Zo nee, dan moet je met AJAX gaan werken of alles al laden en verbergen en met javascript de delen tonen die je wil tonen.

*Een makkelijkere structuur is om i.p.v. een children veld een nieuwe tabel te maken in de vorm:
album_id | children_id
-------------------------
3 | 9
3 | 10
3 | 37
etc.

Dan kan je met een subquery of een join de juiste records opvragen met een query.
 
ik snap je verhaal niet helemaal... In Childeren staan inderdaad ID's. Ik vul deze database met een open Source CMS die ik eigenlijk niet wil veranderen omdat de gebruikers hieraan gewend zijn... Alleen nu ik de lay-out verander moet ik dus zelf de database uitlezen...

Zoals je op deze afbeelding ziet:
database.gif

Alle afbeeldingen worden dus geupload in dezelfde map, 1 krijgt de title Album mee en daaronder komen alle "childeren" te hangen. Door het script hierboven worden dus alle afbeeldingen met de title 'album' geladen. Elk 'Album' heeft dus een aantal 'childeren'. Door op de 'album' te klikken wil ik graag een pagina openen waar alle 'childeren' van dat album worden geladen...

Kleine update:
Alle foto's, "childeren" krijgen ook het id van hun "parent" mee... Dus je heb een foto met de Title "Album", deze heeft bv het "ID" 5, en hier hangen "childeren" onder met de "ID" 1,2,3,4. Nu heeft de foto met het "ID" 4 in zijn tabel staat bij "parent": 5... Ik hoop dat het nog een beetje duidelijk is??

Een andere site die ook gebruik maakt van dit CMS laat dit in zijn broncode als link zien:

<td align="center" width="40%">
<a href="index.php?page=83&section=18&category=&navpath=&ID=338&gallerypage=1">
<img src="starnet/media/gallery/Artis_onderbouw_september_2008/Artis2008_005_t.jpg" width="125"></a>
</td>
 
Laatst bewerkt:
Kleine update:
Alle foto's, "childeren" krijgen ook het id van hun "parent" mee... Dus je heb een foto met de Title "Album", deze heeft bv het "ID" 5, en hier hangen "childeren" onder met de "ID" 1,2,3,4. Nu heeft de foto met het "ID" 4 in zijn tabel staat bij "parent": 5... Ik hoop dat het nog een beetje duidelijk is??

Dat maakt het wat makkelijker. Dan kan je met een query selecteren op parent. Dus om alle children te selecteren kan je dan gebruik maken van zo'n query:
PHP:
SELECT * FROM sn_m_allbum WHERE parent = $parent
$parent zou je mee kunnen geven aan de pagina, zodat je pagina bijv. huppeldepup.php?parent=5 wordt. $parent krijg je dan uit $_GET['parent'] (of beter: (int)$_GET['parent'] i.v.m. beveiliging).
Dan kan je op een soortgelijke manier als je dat nu doet met het album de foto's tonen.
 
Dus zoiets? Hij klopt waarschijnlijk nog niet maar ik probeer het :D

PHP:
<?php
if ( isset ( $_GET[ 'parent' ] ) ) {

// berichtquery

$berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."'";

$berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
$berichtRow = mysql_fetch_assoc ( $berichtResult );

echo '<img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto">';

} else {

Zoiets? vul ik de album pagina in? daar heb ik nu:

PHP:
<?php
 
$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
 
     echo '<h2>', $line[ 'title' ], '</h2>'; 
     echo '<a href="?page=edit&parent='. $line['parent']  .'"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';

     echo '<p>', $line[ 'description' ], '</p>';
     
    }
?>

Maar die link, de <a href /> die moet nu anders... Toch?
 
Laatst bewerkt:
Dat is inderdaad wat ik in gedachten had. Heb je al geprobeerd of het werkt?

Wat betreft de link, gebruik je de parameter "page=edit"? Ik zou er anders het volgende van maken:
PHP:
echo '<a href="paginanaam.php?parent='. $line['parent']  .'"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
waarbij je "paginanaam.php" moet vervangen door de juiste paginanaam.
 
ik heb het nog niet geprobeerd, dit moet ik vanavond thuis even doen... ik ben benieuwd of het werkt... kon je geen fouten meer vinden? En waarom werken met de naam van de pagina en niet met page?
 
Het werkt dus nog niet....

Ik heb dit:
PHP:
<?php
if ( isset ( $_GET[ 'parent' ] ) ) {
 
// berichtquery
 
$berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."'";
 
$berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
$berichtRow = mysql_fetch_assoc ( $berichtResult );
 
echo '<img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto">';
 
} else {

$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
 
     echo '<h2>', $line[ 'title' ], '</h2>'; 
echo '<a href="index.php?parent='. $line['parent']  .'"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>'; 

     echo '<p>', $line[ 'description' ], '</p>';
     
    }

}
 ?>

Het tweede gedeelte werkt wel, alleen als ik op de link klik dan geeft hij niet de goeie "partner" mee... en hij laat dus niks zien naar het klikken...
 
Kijk eens in de broncode (of in de adresbalk) hoe de link er uitziet. Ik zie trouwens nog wel een andere fout die me eerder niet is opgevallen. Regel 11 gaat niet werken, je moet eerst nog mysql_fetch_assoc uitvoeren. Regel 11 moet je dus vervangen door
PHP:
while ( $line = mysql_fetch_assoc ( $result ) ) {
  echo '<img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto">';
}
 
Oke, dat heb ik veranderd, maar hij doet nog steeds hetzelfde...

De link in de broncode:

HTML:
<a href="index.php?parent=3">

Dus dit gedeelte klopt wel... maar hij laat de foto's dus niet bij het 'klikken...

Voor de duidelijkheid, dit is het tot nu toe:

PHP:
<?php
if ( isset ( $_GET[ 'parent' ] ) ) {
 
// berichtquery
 
$berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."'";
 
$berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
$berichtRow = mysql_fetch_assoc ( $berichtResult );
 
while ( $line = mysql_fetch_assoc ( $result ) ) {
  echo '<img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto">';
}

 
} else {

$query = "SELECT * FROM sn_m_allbum WHERE type = 'album'" ;
    $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error() );
 
    // Printing results in HTML
    while ( $line = mysql_fetch_assoc ( $result ) ) {
 
     echo '<h2>', $line[ 'title' ], '</h2>'; 
echo '<a href="index.php?parent='. $line['id']  .'"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>'; 

     echo '<p>', $line[ 'description' ], '</p>';
     
    }

}
 ?>
 
Laatst bewerkt:
Meh...ik moet echt eens beter opletten als ik delen copy-paste.

PHP:
while ( $line = mysql_fetch_assoc ( $result ) )
moet natuurlijk
PHP:
while ( $line = mysql_fetch_assoc ( $berichtResult ) )
zijn.

Ik zie nu dat je dat al in regel 9 hebt staan, maar dan niet in een lus. Regel 9 mag je dan weghalen als je regel 11 aanpast zoals ik hierboven vermeld.
Of je mag i.p.v. regel 9-13 het volgende gebruiken:
PHP:
while ( $berichtRow = mysql_fetch_assoc ( $berichtResult ) ) {
  echo '<img src="/siteatschool/starnet/' . $berichtRow[ 'path' ] . '/' . $berichtRow[ 'thumb' ] . '" alt="Hier staat een album foto">';
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan