Avatar billede optur Novice
01. april 2011 - 14:07 Der er 5 kommentarer og
1 løsning

slet indhold på server og i database

Jeg sidder og roder med en slet funktion som skal slette indholdet i to tabeller, en hvor der er filer, og en med info. Det er delt op da der kan være flere filer til en enkelt post under info.

Problemet med min kode er at den undlader altid at slette en fil, hvis der er flere filer.

Min koder er som følgende:

<?php
// database forbindelse
include('db_con.php');
// henter id
$id = $_GET['id'];
// løkke som henter value og køre unlink funktion på hver filnavn med det id
$query = mysql_query("SELECT value FROM filer WHERE ordrenr=".$id) or die(mysql_error());
$row = mysql_fetch_array($query);
if(empty($row['value'])) {
    mysql_query("DELETE info FROM info WHERE id=".$id) or die(mysql_error());       
} else {
    while ($row = mysql_fetch_array($query)) {
        extract($row);
        unlink("upload/".$value);
    }
    mysql_query("DELETE filer, info FROM filer JOIN info ON filer.ordrenr=info.id AND info.id=".$id) or die(mysql_error());
}
   
header("location:view.php?id=delete");

?>
Avatar billede olebole Juniormester
01. april 2011 - 17:21 #1
<ole>

At du ikke får slettet alle dine filer, er nok et mindre problem. Ikke mindst, når du helt ukritisk bruger brugerinput direkte i dine DB-kald. Det er så let som ingenting at slette hele din database med den opbygning!

Tag et kik på parametriserede kald med mysqli, som (sammen med PDO) er de(t) API, man bruger nu om dage til håndtering af MySQL:
    http://dk2.php.net/manual/en/book.mysqli.php

/mvh
</bole>
Avatar billede optur Novice
11. april 2011 - 10:29 #2
tak for dit råd, men jeg er desværre nød til at benytte mysql i denne forbindelse. Har du eventuelt et råd til hvordan jeg kan løse problemet ved hjælp af mysql?
Avatar billede olebole Juniormester
11. april 2011 - 16:43 #3
Er der virkelig stadig udbydere, der ikke tilbyder mysqli og/eller PDO?!!

Du kan forsøge at 'hacke' dig ud af problemerne med:
    http://php.net/manual/en/function.mysql-real-escape-string.php

- og derudover sikre dig, at $_GET['id'] indeholder præcist, hvad du forventer - og intet andet.
Avatar billede optur Novice
11. april 2011 - 18:09 #4
problemet er at jeg skal lave det her sammen med en gruppe, som ikke kan kode, og som jeg skal kunne forklare det for, og pga tidspres og manglende forståelse for kode, så har jeg ikke tid til at sætte mig ind i det mysqli. Jeg får nemlig intet ud af en syntax liste... det er ren volapyk. Jeg er nød til at se en fungerende kode og så arbejde ud fra den.

Så hvis du kan omskrive min ovenstående kode med kommentar er du mere end velkommen. Men så længe jeg ikke har eksempler som er lignende den kode jeg arbejder med fatter jeg virkelig minus.

Men du skal have mange tak for hjælpen, men som skrevet, links til syntax liste er for mig lidt som at vise et ord i en ordbog på et sprog jeg ikke helt forstår.
Avatar billede olebole Juniormester
11. april 2011 - 21:30 #5
Du kan se et eksempel på en SELECT med prepared statements her:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php

- og hvis du kikker lidt på link-teksterne, kan du nok forholdsvis let kunne finde, hvad du har brug for, når du i forvejen kender mysql
Avatar billede optur Novice
14. april 2011 - 14:49 #6
jeg har løst mit problem med følgende kode... skulle bare skrive den lidt mere om, så virker den perfekt


<?php
include('db_con.php');
$id = $_GET['id'];
//hvis der ikke er noget sker der ikke noget ved at slette
mysql_query("DELETE FROM tsf_info WHERE id=".$id) or die(mysql_error());     
$query = mysql_query("SELECT value FROM tsf_filer WHERE ordrenr=".$id) or die(mysql_error());
if(mysql_num_rows($query))
{
    while ($row = mysql_fetch_array($query)) {
        extract($row);
        unlink("upload/".$value);
    }
    mysql_query("DELETE FROM tsf_filer WHERE ordrenr=".$id) or die(mysql_error());     

?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester