Unlink/verwijder probleem
Ik zit met een probleem waar ik momenteel niet uit weet te komen.
Ik heb een script geschreven waar gebruikers foto albums kunnen maken en hier foto's aan kunnen toevoegen.
Dat gaat allemaal prima, ook het verwijderen van de foto's gaat prima. Echter gaat er bij het verwijderen van albums iets mis.
Ik heb het volgende script geschreven om gebruikers albums te laten verwijderen:
Code (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
34
35
36
37
38
39
40
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
34
35
36
37
38
39
40
<?php
$controle = false;
if (isset($_GET['p_id'])) {
$p_query = "SELECT albums.link, tumbs.id, tumbs.src FROM albums, tumbs";
$p_result = mysql_query($p_query);
$p_row = mysql_fetch_array($p_result);
$p_deleteQuery = "DELETE FROM albums, tumbs WHERE id = ".$_GET['p_id'];
mysql_query($p_deleteQuery);
$src = $p_row['src'];
$controle = true;
unlink($src);
echo "<p class='update'>Deze pagina is succesvol verwijderd.<span class='close'>X</span></p>";
if($controle == true) {
$p_query = "SELECT id, link FROM albums";
$p_result = mysql_query($p_query);
while($p_row = mysql_fetch_array($p_result)) {
echo "<div class='pagina'>
<p class='edit_pagina'>".$p_row['link']."</p>
<p class='delete_pagina'><a href='jrwd_admin.php?p_id=".$p_row['id']."'>Verwijder pagina</a></p>
</div>";
}
}
} else {
$query = "SELECT id, link FROM albums";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
echo "<div class='pagina'>
<p class='edit_pagina'>".$row['link']."</p>
<p class='delete_pagina'><a href='jrwd_admin.php?p_id=".$row['id']."'>Verwijder pagina</a></p>
</div>";
}
}
?>
$controle = false;
if (isset($_GET['p_id'])) {
$p_query = "SELECT albums.link, tumbs.id, tumbs.src FROM albums, tumbs";
$p_result = mysql_query($p_query);
$p_row = mysql_fetch_array($p_result);
$p_deleteQuery = "DELETE FROM albums, tumbs WHERE id = ".$_GET['p_id'];
mysql_query($p_deleteQuery);
$src = $p_row['src'];
$controle = true;
unlink($src);
echo "<p class='update'>Deze pagina is succesvol verwijderd.<span class='close'>X</span></p>";
if($controle == true) {
$p_query = "SELECT id, link FROM albums";
$p_result = mysql_query($p_query);
while($p_row = mysql_fetch_array($p_result)) {
echo "<div class='pagina'>
<p class='edit_pagina'>".$p_row['link']."</p>
<p class='delete_pagina'><a href='jrwd_admin.php?p_id=".$p_row['id']."'>Verwijder pagina</a></p>
</div>";
}
}
} else {
$query = "SELECT id, link FROM albums";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
echo "<div class='pagina'>
<p class='edit_pagina'>".$row['link']."</p>
<p class='delete_pagina'><a href='jrwd_admin.php?p_id=".$row['id']."'>Verwijder pagina</a></p>
</div>";
}
}
?>
Echter gebeurd hier het volgende niet:
- Rijen uit de databases worden niet verwijderd. Niet bij albums en niet bij tumbs.
Wat gebeurd er wel:
- De verkeerde afbeelding word verwijderd van de server (als ik id1 aanklik word de afbeelding van id2 verwijderd)
Het gevolg hiervan is dat er bij het overzicht van albums nog wel een vak staat met daarin een afbeelding zonder src (omdat de rijen niet verwijderd worden).
Ik heb geen idee waar dit aan kan liggen en wat ik fout doe. Ik heb al meerdere dingen geprobeerd echter lijkt niets te werken.
De id's van beide databases lopen ook gelijk. Zo is album x in de database albums id 1 en in de database tumbs ook id 1.
Iemand enig idee wat ik hier verkeerd doe of wat ik eraan kan doen?
Bij voorbaat dank!
Toevoeging op 01/11/2012 15:28:59:
Een $_GET direct in een query zetten is een lek.
$p_query = "SELECT albums.link, tumbs.id, tumbs.src FROM albums, tumbs WHERE albums.id = ".$_GET['p_id'];
Om eerst even in te gaan op SanThe, ik heb wel een error reporting in me script staan, echter had ik die niet mee gekopieerd omdat deze nog een stuk daarboven staat. Dit was de enige relevante code, daarom was ik vergeten dat stukje er wél bij te zetten.
Het vreemde is echter dat ik ook geen errors krijg als ik iets verwijder. Alleen als dus de verkeerde afbeelding word verwijderd er niks meer verwijderd kan worden omdat de foto niet meer bestaat (Logisch. Dit probleem is echter opgelost door de WHERE van flip toe te voegen).
Over de $_GET direct heb ik nog nooit iets gelezen in beveiliging artikelen (lees alleen Nederlandse omdat ik dat fijner vind bij artikels over beveiliging. Misschien een link of tips naar hoe ik dat beter/wel op de juiste manier kan doen?
Flip, bedankt voor je reactie.
Volgens mij had ik dit zelf ook al eens geprobeerd en het lost mijn problemen helaas niet op.
Ik heb het idee dat de delete query niet helemaal juist werkt omdat er uit geen van beide databases een rij verwijderd word.
Daarom heb ik de $p_deleteQuery in een echo gezet en daar komt dan het volgende uit:
Ik heb echter geen idee wat hier fout aan is en wat ik dus fout doe..
Someone?
Gewijzigd op 01/11/2012 18:53:00 door Ronny -
Debuggen: echo je query naar het scherm en kijk of dat klopt met wat je verwacht.
Kopieer eventueel de query en voer die direct uit in phpadmin.
klopt regel 10 wel?
Thanks voor je tip om de query kopieren in phpMyAdmin.
Ik heb dit geprobeerd en hieruit kreeg ik wel een error. Ik heb het volgende gekopieerd in phpMyAdmin:
Dit is wat ik kreeg uit mijn echo van de $p_deleteQuery zoals ik ook melde in mijn tweede post.
Hierop krijg ik in phpMyAdmin de volgende error:
Code (php)
1
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 4' at line 1
Echter snap ik niet wat er fout is aan deze line, evenals dat je vroeg of line 10 wel klopt.
Volgens mij is deze ook gewoon juist.
Of zit ik hier verkeerd?
Kun je in 1 delete-query met 2 tabellen werken?
Obelix en Idefix op 01/11/2012 19:48:53:
Nee, dat kan zoals het in deze query staat niet dus dat is sowieso fout.Kun je in 1 delete-query met 2 tabellen werken?
http://dev.mysql.com/doc/refman/5.0/en/delete.html
Gewijzigd op 01/11/2012 20:13:54 door John D
Obelix, ik wist niet dat hier een verschil tussen was.
Heb net dit (http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-in-php-error-handling/571/) artikel gevonden dus die zal ik even door gaan lezen! :)
John D, handig artikel.
Heb het nu opgelost door gewoon 2 aparte query's te maken.
Bedankt voor jullie reacties :)