[PHP] Laatste foto van fotogallery klopt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    // Getting the foto
    $query = "SELECT * FROM media WHERE media_id='".$_GET['media_id']."'";
    $sql = mysql_query($query);
    $foto = mysql_fetch_array($sql);
    // Getting previous foto in album if exists
    $prevlink = "";
    $query = "SELECT * FROM media WHERE media_id < '".$_GET['media_id']."' AND album_id='".$foto['album_id']."' ORDER BY media_id DESC LIMIT 1";
    $sql1 = mysql_query($query);
    $prev = mysql_fetch_array($sql1);
    $prevexist = mysql_num_rows($sql1) > 0;
    echo $prevexist;
    $prevexist ? $prevlink = "<a href=\"foto.php?media_id=".$prev['media_id']."\">« Vorige foto</a>" : $prevlink = "";
    // Getting next foto in album if exists
    $nextlink = "";
    $query2 = "SELECT * FROM media WHERE media_id > '".$_GET['media_id']."' AND album_id='".$foto['album_id']."' LIMIT 1";
    $sql2 = mysql_query($query2);
    $next = mysql_fetch_array($sql2);
    $nextexist = mysql_num_rows($sql2) > 0;
    $nextexist ? $nextlink = "<a href=\"foto.php?media_id=".$next['media_id']."\">Volgende foto »</a>" : $prevlink = "";
    // Getting the album info
    $query = "SELECT * FROM foto_album WHERE album_id='".$foto['album_id']."'";
    $sql3 = mysql_query($query);
    $album = mysql_fetch_array($sql3);
    // Setting page navbar
    $page = "<a href=\"#\">Foto's</a> > ".$album['titel']." > ".$foto['titel']."";
    
    // Generating the page output
    $output .= "<h1>".$foto['titel']." </h1>\n";        
    $output .= "<br />\n";      
    $output .= "<div align=\"center\" style=\"width: 600px;\">\n";
    $output .= "<div style=\"float: left; width: 300px; text-align: left;\">".$prevlink."</div>\n";
    $output .= "<div style=\"float: right; width: 300px; text-align: right;\">".$nextlink."</div>\n";
    $output .= "<div><img src=\"".$foto['location']."\" /></div></div>\n";


Ik ben op dit moment een eigen foto gallery aan het schrijven en deze code hierboven is de opzet voor de fotoviewer.php. Deze php file moet de foto weergeven en een link naar de vorige en volgende foto op de pagina.

Deze php file werkt voor alle foto's uitstekend BEHALVE de laatste.
- Bij de eerste moet hij alleen (Volgende foto) aangeven
- Bij de laatste alleen (Vorige foto).

Bij de eerste foto in het album gaat goed. Bij de laatste foto in het album geeft hij echter GEEN links weer. Dus niet naar de vorige foto. Ik heb de query in phpMyAdmin getest voor de laatste foto in een album en die geeft wel een vorige foto terug. Waar zit het probleem?

Computer Specs


Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
Ik heb het al. Foutje in lin 19 :p $prevlink moest $nextlink zijn :)

Computer Specs


Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Als ik je een tip mag geven..... Gebruik tussen bepaalde stukken code een witregel.
En draai de quotes om, dus ' ipv " want zo heeft het helemaal geen nut. (in geval van preformace)

Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
nevermind

[ Voor 77% gewijzigd door GandalfTheGrey op 06-01-2007 00:14 ]

Computer Specs


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
2e tip : kijk eens naar manieren om wat meer in je code te doen en wat minder aanroepen naar je dbase.

bijv : herschrijf query 1 naar :
code:
1
2
3
4
5
SELECT media_id.media_id, media_id.album_id, foto_album.titel
FROM media , foto_album
WHERE media_id.media_id <= '".$_GET['media_id']."' AND 
    media_id.album_id=foto_album.album_id
ORDER BY media_id DESC LIMIT 2

hiermee haal je volgens mij alles op wat nodig is voor huidige foto, vorige foto en albumtitel. Scheelt je zowieso al 2 query's. ( let op ongetest, dus kan fout gaan )

En kijk ook eens naar sql injection.
En geef je variabelen zinnige namen ( en niet sql1 tot sql100 )

Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
Bedankt voor de tips :)

Om SQL Injection te verkomen kan ik toch gewoon gebruik maken van htmlspecialchars ?

" en ' maakt toch niks uit qua performance?

[ Voor 38% gewijzigd door GandalfTheGrey op 06-01-2007 00:36 ]

Computer Specs


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
GandalfTheGrey schreef op zaterdag 06 januari 2007 @ 00:32:
" en ' maakt toch niks uit qua performance?
Tegenwoordig is het verschil nihil, en sowieso zijn dergelijke micro-optimalisaties weinig zinvol. Je kan waarschijnlijk al meer tijd winnen door ipv select * expliciet op te geven dat je alleen het album_id nodig hebt in je eerste query, etc of de voorgestelde join uiteraard.

En tegen sql injection moet je uiteraard geen html-functies gebruiken maar in dit geval mysql_real_escape_string (of mysql_escape_string). De htmlspecialchars gebruik je vervolgens om html-injection (wat gebruikt kan worden voor cross site scripting) te voorkomen.

[ Voor 27% gewijzigd door ACM op 06-01-2007 00:43 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
GandalfTheGrey schreef op zaterdag 06 januari 2007 @ 00:32:
Bedankt voor de tips :)

Om SQL Injection te verkomen kan ik toch gewoon gebruik maken van htmlspecialchars ?

" en ' maakt toch niks uit qua performance?
SQL injection is ook leuk te doen door gewoon de sqlstring uit te breiden, dus check hiervoor je binnenkomende variabelen voordat je ze doorgeeft aan je dbase.
vb :
code:
1
update users set passwd=' . $passwd . ' where user_id=' . $userid . ';

dit gaat hardstikke fout als ik in de waarde $userid het volgende ingevuld krijg : 321 and 1=1. Nu zijn alle wachtwoorden in je dbase veranderd.
Dit is heel simpel te voorkomen door te controleren of je id wel echt een getal is en geen leestekens bevat.

Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 19-09 14:58

_Sunnyboy_

Mooooooooooooooooo!

Gomez12 Ik geloof dat je bedoeld:

$userid = "321 OR 1=1"

Wat jij daar voorsteld past echt alleen het password van user 321 aan :)

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
_Sunnyboy_ schreef op zaterdag 06 januari 2007 @ 12:25:
Gomez12 Ik geloof dat je bedoeld:

$userid = "321 OR 1=1"

Wat jij daar voorsteld past echt alleen het password van user 321 aan :)
Ehhhm ok, foutje bedankt :)
Pagina: 1