Foto's uit database

Status
Niet open voor verdere reacties.
Oke, veranderd maar nog geen verschil... Ik heb nu:

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() );
 
while ( $line = 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['id']  .'"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>'; 

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

}
 ?>

Maar hij geeft dus geen resultaat...
 
Heb je regel 24 veranderd? Daar stond eerst toch $line['parent'] i.p.v. $line['id']? Al zou dat geen verschil moeten maken (tenzij die id niet voorkomt in de kolom parent). Ik zie geen fouten, ook de php interpreter geeft geen fouten aan.
Kijk eens wat er gebeurt als je op regel 9
PHP:
echo "regels: " . mysql_num_rows($berichtResult);
zet. Dan zou hij moeten laten zien hoeveel resultaten er uit de database komen. Zet onder regel 10 eens
PHP:
print_r($line)
(al verwacht ik niet dat daar een fout zit).
 
Ik zit nu op mijn werk met Internet Explorer waar hij het wel doet :) Dus ik zal thuis kijken of het aan Mozilla ligt... maar het werkt dus :):thumb:

Mag ik de vraag dan nog een beetje uitbreiden? Nu wil ik graag nog twee dingen toevoegen:

Dat hij maximaal 10 foto's per pagina laat zien en er dan een link onder zet van "volgende tien" Dit moet toch kunnen in PHP?

En dat hij de foto's klein laat zien maar als je er op klikt dat hij de ware grote laat zien...

Kun je een opzetje geven? dan kan ik weer even puzelen!!! Ik leer nog elke dag hier!!! :thumb:
 
Kan zoiets bijvoorbeeld werken:

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() );
 
while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {

echo '<a href=”="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" rel=”lightbox” title=”' . $line[ 'title' ] . '”><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
}
 
} 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>';
     
    }
 
}
 ?>

Dus een lightbox erin verwerkt....
 
Ik zit nu op mijn werk met Internet Explorer waar hij het wel doet :) Dus ik zal thuis kijken of het aan Mozilla ligt... maar het werkt dus :):thumb:
Dat vind ik wel raar, maar mooi dat het werkt. Heb je het trouwens online staan? Dan kan ik eens kijken met firefox.

Dat hij maximaal 10 foto's per pagina laat zien en er dan een link onder zet van "volgende tien" Dit moet toch kunnen in PHP?
Dat kan inderdaad. Iets dergelijks heb ik al eens gemaakt.
Je moet dan gebruik maken van LIMIT in je SELECT-query. Dus in plaats van
PHP:
$berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."'";
PHP:
$berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."' LIMIT 0, 10";
De syntax van LIMIT vind ik enigszins verwarrend, maar "LIMIT x, y" betekent dat de eerste rij die hij oplevert is x+1 en er worden y rijen opgeleverd. Dus dit levert de rijen x+1, x+2,...,x+y op.
In de "volgende" link heb ik gebruik gemaakt van een andere parameter "start". De link komt er dan zo uit te zien
HTML:
<a href="index.php?parent=iets&start=waarde"
Dan is het een kwestie van controleren of $_GET['start'] is geset. Als hij is geset gebruik je die waarde (tip cast hem naar een int, dan weet je zeker dat het een getal is) als eerste waarde voor LIMIT (dus i.p.v. x). In de "volgende" link gebruik je dan die waarde + 10 als waarde voor start.
Als je het dan helemaal netjes wil doen zet je bovenaan ook nog iets als
PHP:
define("MAX_PER_PAGINA", 10);
Als je dan overal i.p.v. 10 (het aantal per pagina), gebruikt maakt van MAX_PER_PAGINA gebruik je geen magic numbers en hoef je maar 1 waarde aan te passen als je meer of minder per pagina wil laten zien.

En dat hij de foto's klein laat zien maar als je er op klikt dat hij de ware grote laat zien...
Je kan vrij simpel een link maken naar de grote foto en als plaatje de thumbnail. Met een lightbox moet het ook kunnen. Al heb ik daar geen ervaring mee. Voor zover ik het ken moet je dan wel de javascript en css die door lightbox gebruikt wordt toevoegen en denk ik dat je hier
PHP:
echo "<a href=”="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ]
een link moet gebruiken naar de grote foto i.p.v. naar de thumbnail. Al weet ik dat niet zeker, omdat ik niet bekend ben met lightbox.
 
Laatst bewerkt:
Hij staat inderdaad wel online, namelijk:

www.zoetenzacht.nl/siteatschool/foto

de vormgeving werkt nog niet volledig mee en ook de foto's moeten vervangen worden, het is echt nog een test... :(

Ik moet de lightbox nog even verder installeren maar gezien de Source gaat het zo wel lukkken... Nu alleen het afkorten nog preberen :)
 
Bij mij werkt het gewoon in firefox. D.w.z.. als ik op een foto klik krijg ik een andere pagina te zien met meerdere foto's.
 
bij mij werkt hij nu ook... even een computer reset :) Dat krijg je dus van elke dag de slaapstand...

Maar goed, het werkt allemaal, ook de lightbox werkt erg mooi!!! Nu alleen nog zo maken dat hij maar 10 foto's per pagina laat zien... hier ga ik vanavond mee aan de slag... :thumb: Ik hoop dat ik eruit kom zoals je het hierboven hebt omschreven... Kben ten slotte beginnend PHP'er... :confused:
 
Oke, ik kom er dus niet uit... ik ben nu wel zo ver dat hij maximaal 12 foto's laat zien maar ik krijg de link nog niet goed... Ik heb nu dit:

PHP:
<?php

if ( isset ( $_GET[ 'parent' ] ) ) {
if ( isset ( $_GET[ 'start' ] ) )
 

// berichtquery


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


 

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

 

while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {

 

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

echo '<a href="index.php?'. $line['id']  .'&start=waarde"'

}

 

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

     

    }

 

}

?>

En nu loop ik dus een beetje vast... kun je me nog een keer helpen :o
 
Je moet de waarde van start gebruiken in LIMIT en voor de "volgende" link verhogen met 12.
PHP:
<?php
 
if ( isset ( $_GET[ 'parent' ] ) ) {
  $start = 0;
  if ( isset ( $_GET[ 'start' ] ) )
  {
    $start = (int) $_GET[ 'start' ];
  }
 
// berichtquery
  
  $berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."' LIMIT $start, 12"; 
 
  $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
 
  while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {
    echo '<a href="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" rel="lightbox" title="' . $line[ 'title' ] . '"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
 
    echo '<a href="index.php?'. $line['id']  .'&start=' . $start+12 .'">Volgende</a>';
  }
}
 
Gaat nog niet helemaal goed,...

Dit is het nu:

PHP:
<?php

if ( isset ( $_GET[ 'parent' ] ) ) {
  $start = 0;
  if ( isset ( $_GET[ 'start' ] ) )
  {
    $start = (int) $_GET[ 'start' ];
  }



// berichtquery


 $berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."' LIMIT $start, 12"; 
 
  $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
 
  while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {
 

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


    echo '<a href="index.php?' . $line['id']  . '&start=' . $start+12 . '">Volgende</a>';
  }
}

Maar als resultaat laat hij achter elke foto dit zien: 12">Volgende

Dus er gaat nog wat fout in de link... en op de volgende manier kan ik dan een vorige maken? En als er geen foto's meer zijn, laat hij dan nog steeds deze link zien?
 
Dat is vreemd, het hele eerste deel van de link "<a href..." ontbreekt. Sowieso moet de link uit de lus, al weet ik niet of dat het gaat oplossen. Probeer eens het volgende:
PHP:
$parent = 0;
while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {
  $parent = $line['parent'];
  echo '<a href="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" rel="lightbox[album]" title="' . $line[ 'description' ] . '"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
  } 
  echo '<a href="index.php?' . $parent  . '&start=' . $start+12 . '">Volgende</a>';

Om een "vorige" link te maken gebruik je hetzelfde maar dan met "$start-12" (tip: gebruik de max functie en 0 om ervoor te zorgen dat je geen negatieve getallen krijgt). De link is altijd te zien. Om ervoor te zorgen dat hij op de laatste pagina niet te zien is moet je uitrekenen hoeveel foto's er zijn ("SELECT COUNT(*) FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) . '"; ) en de link alleen tonen als $start < aantal_foto's-12.
 
Laatst bewerkt:
Gaat nog niet goed,... al laat hij nu de link maar 1 keer zien... maar wel alleen dit gedeelte: 12">Volgende</a>

Dit is ook het enige wat hij in de broncode laat zien...
 
Probeer eens i.p.v.
PHP:
echo '<a href="index.php?' . $parent  . '&start=' . $start+12 . '">Volgende</a>';
PHP:
$nieuwe_start = $start+12;
echo '<a href="index.php?' . $parent  . '&start=' . $nieuwe_start . '">Volgende</a>';
 
Hij laat nu in elk geval een link zien, dus dat werkt... maar als je op de link klikt dan gaat hij terug naar de hoofdpagina waar de albums staan... dus niet naar de volgende tien foto's...

Dit is het einde van de link die hij uitgeeft: index.php?189&start=12
 
"parent=" is weggevallen. Verander
PHP:
echo '<a href="index.php?' . $parent  . '&start=' . $nieuwe_start . '">Volgende</a>';
in
PHP:
echo '<a href="index.php?parent=' . $parent  . '&start=' . $nieuwe_start . '">Volgende</a>';
 
Het Werkt!!! :D

Morgen ga ik verder om ook de andere dingen uit te proberen!!! Tot nu toe: Super bedankt!!!:thumb:
 
Zo, ben ik weer... tot zo ver werkt het dus... Alleen moet er nog een vorige knop bij, en moet het eigenlijk zo worden dat hij dus bij de laatste pagina geen volgende en/of vorige meer laat zien...

Ik ben even de weg kwijt hoe ik dat zou moeten doen, kun je me voor de laatste keer helpen?

Ik heb nu dit:
PHP:
<?php

if ( isset ( $_GET[ 'parent' ] ) ) {
  $start = 0;
  if ( isset ( $_GET[ 'start' ] ) )
  {
    $start = (int) $_GET[ 'start' ];
  }



// berichtquery


 $berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."' LIMIT $start, 12"; 
 
  $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
 
$parent = 0;

while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {
  $parent = $line['parent'];
  echo '<a href="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" rel="lightbox[album]" title="' . $line[ 'description' ] . '"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
  } 
$nieuwe_start = $start+12;
	

echo '<br /><div id="content_foto_volgende"><a href="index.php?parent=' . $parent  . '&start=' . $nieuwe_start . '">Volgende 12</a></div>';
  }



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

     

    }

 

}

?>

      </div>

      </div>

      <div id="news_top">

        <div id="news">

        	<h1 id="h1_news">Laatste Nieuws</h1>

            

<?php

                // Performing SQL query

 

                $query = 'SELECT * FROM `sn_m_news_articles` ORDER BY date DESC LIMIT 0, 3';

                $result = mysql_query($query) or die('Query failed: ' . mysql_error());

 

                // Printing results in HTML

                while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

                    ?>

                    <div class="text">

                      <h2><?= $line['title']; ?></h2>

                      <a href='index.php?id=<?php echo $line['id']?>'><p><?php echo substr($line['content'], 0, 75).'...'; ?></p></a>

                      </div>

                  <?php

                }

                ?>
 
Wat ik bij mijn site gedaan heb is een functie gemaakt:
PHP:
function telAantalFotos()
{
  $query = "SELECT COUNT(*) FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) . "'";
  $result = mysql_query($query) or die ( 'Query failed: ' . mysql_error() );
  if (mysql_num_rows($result) == 0)
  {
    die("Leeg album");
  }
  $row = mysql_fetch_row($result);
  return $row[0];
}

In plaats van
PHP:
echo '<br /><div id="content_foto_volgende"><a href="index.php?parent=' . $parent  . '&start=' . $nieuwe_start . '">Volgende 12</a></div>';
gebruik je dan
PHP:
echo '<br /><div id="content_foto_volgende">';
if ($nieuwe_start < telAantalFotos())
{
  echo '<a href="index.php?parent=' . $parent  . '&start=' . $nieuwe_start . '">Volgende 12</a>';
}
echo '</div>';

Voor een "vorige"-link kan je hetzelfde doen als voor de "volgende"-link. Alleen moet je i.p.v.
PHP:
$nieuwe_start = $start+12;
PHP:
$nieuwe_start2 = $start-12;
gebruiken. Om er voor te zorgen dat de "vorige"-link niet verschijnt op de 1e pagina moet je de link alleen tonen als $nieuwe_start2 >= 0. (Tip: geef de variabelen $nieuwe_start en $nieuwe_start2 wat zinvollere namen (ik heb maar even snel een naam bedacht), bijv. $volgende_start en $vorige_start).


Als ik verder nog een tip mag geven zou ik (zoals ik al eerder zei) gebruik maken van een "constante"
PHP:
define("MAX_PER_PAGINA", 12);
Dan kan je overal 12 vervangen door MAX_PER_PAGINA. Ten eerste is dat duidelijker en ten tweede hoef je maar een waarde te vervangen als je meer of minder foto's op een pagina wil tonen.
Omdat de waarde van start aan te passen is (hij wordt meegegeven met de URL) moet je controleren of de waarde van start geldig is (niet negatief bijv.). Dit kan je, in een one-liner, doen met
PHP:
$start = max(0, min($start, telAantalFotos()-1));
Dit zorgt ervoor dat 0 <= $start < telAantalFotos() (Mocht je het wat efficiënter willen dan kan je eerst telAantalFotos() aanroepen, die waarde opslaan in een variabele en dan die variabele gebruiken i.p.v. de functie. Op die manier kan je de overhead van de tweede function call besparen :))
Ik zou je ook willen adviseren om aan na regel 23 een newline te zetten (echo "\n"). Zoals je in de broncode van de site kan zien beslaat die regel nu meer dan 1000 tekens.

[edit]Overigens moet je, als de site klaar is, geen gebruik maken van "die", maar zorgen voor een nette foutafhandeling. Ook moet je geen gebruik meer maken van "mysql_error()". Je wil immers niet te veel informatie geven aan iemand die de site probeert te hacken.[/edit]
 
Laatst bewerkt:
Klopt het zo zo'n beetje? Ik verlies het overzicht een beetje :o maar ik heb het gevoel dat het bijna helemaal gaat werken zo...

PHP:
<?php
 
if ( isset ( $_GET[ 'parent' ] ) ) {
  $start = 0;
  if ( isset ( $_GET[ 'start' ] ) )
  {
    $start = (int) $_GET[ 'start' ];
  }
 
 
 
// berichtquery
 
function telAantalFotos()
{
  $query = "SELECT COUNT(*) FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) . "'";
  $result = mysql_query($query) or die ( 'Query failed: ' . mysql_error() );
  if (mysql_num_rows($result) == 0)
  {
    die("Leeg album");
  }
  $row = mysql_fetch_row($result);
  return $row[0];
}

 
 $berichtQuery = "SELECT * FROM sn_m_allbum WHERE parent='". mysql_real_escape_string ( $_GET[ 'parent' ] ) ."' LIMIT $start, 12"; 
 
  $berichtResult = mysql_query ( $berichtQuery ) or die ( 'Query failed: ' . mysql_error() );
 
$parent = 0;
 
while ( $line = mysql_fetch_assoc ( $berichtResult ) ) {
  $parent = $line['parent'];
  echo '<a href="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" rel="lightbox[album]" title="' . $line[ 'description' ] . '"><img src="/siteatschool/starnet/' . $line[ 'path' ] . '/' . $line[ 'thumb' ] . '" alt="Hier staat een album foto"></a>';
  } 

$volgende_start = $start+12;
    
echo '<br /><div id="content_foto_volgende">';
if ($volgende_start < telAantalFotos())
{
  echo '<a href="index.php?parent=' . $parent  . '&start=' . $volgende_start . '">Volgende 12</a>';
}
echo '</div>'; 

$vorige_start = $start-12;
    
echo '<br /><div id="content_foto_vorige">';
if ($vorige_start < telAantalFotos())
{
  echo '<a href="index.php?parent=' . $parent  . '&start=' . $vorige_start . '">Vorige 12</a>';
}
echo '</div>'; 

 
 
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>';
 
     
 
    }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan