Avatar billede tobrukDk Novice
02. april 2012 - 23:55 Der er 13 kommentarer og
1 løsning

sletter billedet fra mappen og databasen

Hej

det er sådan at jeg har fået klart omkring det der med at slette fra databasen men det er sådan nu bare at den også skal gå ind og slette fra mappen, og jeg har prøve google mig frem og kan kun finde sådan som gøre at den går ind og slette det fra databasen, men jeg kun også godt tænke mig at den bare går ind og slette billedet fra mappen hvor den nu er henne :)

Jeg har den her som vise hvordan jeg slette indhold fra databasen men nu søger jeg bare efter at kunne slette det fra mappen også :)


<?php
$con = include ("include/database/db.php");
if (!$con)
  {
  die('Fejl: ' . mysql_error());
  }

$id = $_GET["id"];

mysql_query("DELETE FROM blog_bruger WHERE blog_id='$id'");

    header('Location: admin_blog.php');
    exit();
?>


eller har i en anden måde som jeg måske kunne gøre det på eller hvad?

råbe højt hvis du ikke kan se hvad jeg mener eller du har andet som du vil vide noget om ?
Avatar billede Slettet bruger
03. april 2012 - 00:02 #1
Du sletter en fil på disken med: unlink("/mappe/filnavn.ext") - http://dk.php.net/manual/en/function.unlink.php

Men, igen, din mysql_query() er gabende sikkerhedshul!
- hvemsomhelst kan gøre hvadsomhelst ved din database, med SQL-kode i id-parameteren
Avatar billede tobrukDk Novice
03. april 2012 - 00:16 #2
#1 ved godt det der med sikkerhedshul men jeg kigger på det lige snart jeg er færdig med hele siden :) fordi ellers skal jeg kigge frem og tilbage osv.. :) så gør det hele til sidste :)

men jeg er kommet frem til et billede hvordan skal den finde ud af hvad navn er i mappen?

jeg har prøve at gøre sådan her ;)


<a href="bruger_gallery_slette.php?id=<?php echo $row["id"];?>&?billedefilnavn=<?php echo $row["billedefilnavn"];?>">slet</a>



har gøre sådan her når den skal slette noget


<?php
$con = include ("include/database/db.php");
if (!$con)
  {
  die('Fejl: ' . mysql_error());
  }

$id = $_GET["id"];
$billedefilnavn = $_GET["billedefilnavn"];

mysql_query("DELETE FROM blog_bruger WHERE blog_id='$id'");

unlink("gallery/$billedefilnavn")
unlink("gallery/big_img/$billedefilnavn")

    header('Location: bruger_gallery.php');
    exit();
?>
Avatar billede Slettet bruger
03. april 2012 - 08:22 #3
Parameterlisten skal se således ud: bruger_gallery_slette.php?id=4711&billedefilnavn=abc
Altså ? foran første parameter og & foran alle andre.

Men din kode er igen sindsyg farlig - En bandit kunne kalde funktionen således:
bruger_gallery_slette.php?id=4711&billedefilnavn=../bruger_gallery_slette.php
= Hvemsomhelst kan slette alle filer på serveren!


Du skal gennemtænke sikkerheden FØR du begynder at udvikle systemet.
- det er IKKE en detalje du bare kan "smøre på" tilsidst!


Tag og læs om $_SESSION - en slags "cookie" som bliver liggende på serveren.
- i den gemmes brugerdata (ved login) så andre funktioner slipper for $_GET (sikkerhedshullet)

Symbolsk eksemlel: slet_bruger_fil.php?nr=17
$fil_nr = (int) $_GET['nr'];

select filnavn from bruger_filer where bruger=$_SESSION['bruger_id'] and fil_nr=$fil_nr

unlink("gallery/".$row['filnavn']);
Avatar billede tobrukDk Novice
03. april 2012 - 17:42 #4
jeg har læse meget om session

Ja okay. skal jeg bare så drop at man kan slette billeder fra mappen samme tid det også bliver fra databasen :) ? eller skal jeg finde på at gør det på samme side det hele såden at folk ikke kan se noget som helst eller hvad??
Avatar billede tobrukDk Novice
03. april 2012 - 17:58 #5
Hvordan skulle jeg så bygge det op på ?
Avatar billede tobrukDk Novice
03. april 2012 - 18:49 #6
Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\ny\bruger_gallery_slette.php on line 15

kommer fejl på siden :) men som sagt nu har jeg gøre sådan at den tage session



<li><a href="bruger_gallery_slette.php?id=<?php echo $id;?>&billedefilnavn=<?php echo $row["billedefilnavn"];?>">Slet</a></li>




her ind er fejl ;


    <?php
    $con = include ("include/database/db.php");
        if (!$con)
        {
            die('Fejl: ' . mysql_error());
        }
       
    $id = $_GET["id"];
   
        mysql_query("DELETE FROM blog_bruger WHERE blog_id = '$id'");
   
    $billedefilnavn = $_GET["billedefilnavn"];   
   
        unlink('/gallery/$billedefilnavn')
        unlink('/gallery/big_img/$billedefilnavn')
       
    //går tilbage til bruger_gallery.php
    header('Location: bruger_gallery.php');
    exit();
    ?>
Avatar billede Slettet bruger
03. april 2012 - 19:16 #7
Der mangler ; efter begge unlink-kaldene.
- Men jeg burde nok ikke fortælle dig det..

Du laver usikker kode - farlig for dig selv, men også for de brugere du får lokket til at bruge det.

Hvordan du SKULLE gøre det ?
- se mit sidste eksempel - det med $_SESSION
Se på select sætningen
- længe

Dér slettes 1 af brugerens billeder. Billede nr. 17
"17" er den eneste infromation php-funktionen modtager udefra.
Resten: Brugerens id ligger i $_SESSION og filnavnet hentes i databasen.

Overvej dette
- længe
Avatar billede tobrukDk Novice
03. april 2012 - 19:21 #8
Jeg har lavet på samme side at det er kun hans billeder som kommer ud fra databas med hans session som du kan se her ,


<?php
                $id = $_SESSION['user_id'];
                $sql = mysql_query("SELECT * FROM `brugere` JOIN gallery ON brugere.id = gallery.bruger_id WHERE bruger_id = '$id'");
                while($row = mysql_fetch_assoc($sql))
                {
            ?>
            <div id="gallery">
                <img src="gallery/<?php echo $row["billedefilnavn"];?>" alt="<?php echo $row["billedefilnavn"];?>" height="75" width="75" border="0">
                <br>
                    <ul>
                        <li><a href="bruger_gallery_slette.php?id=<?php echo $id;?>&billedefilnavn=<?php echo $row["billedefilnavn"];?>">Slet</a></li>
                    </ul>
            </div>
            <?php
            }
            ?>
Avatar billede Slettet bruger
03. april 2012 - 20:29 #9
Ahh. Så ER du jo på rette vej : )

Og nu vil du slette HELE hans galleri: Alle billeder + brugeren selv
- med et link-klik ?
Avatar billede tobrukDk Novice
03. april 2012 - 20:41 #10
Nej jeg har gøre det sådan at det kommer ud af billede id tale og ikke brugere id som jeg havde gøre før :)
Avatar billede tobrukDk Novice
03. april 2012 - 20:45 #11

<li><a href="bruger_gallery_slette.php?id=<?php echo $row["gallery_id"];?>&billedefilnavn=<?php echo $row["billedefilnavn"];?>">Slet</a></li>
                    </ul>



og gøre sådan her


    <?php
    error_reporting(E_ALL);
    $con = include ("include/database/db.php");
        if (!$con)
        {
            die('Fejl: ' . mysql_error());
        }
       
    $id = $_GET["id"];
   
        mysql_query("DELETE FROM gallery WHERE gallery_id = '$id'");
   
    $billedefilnavn = $_GET["billedefilnavn"];   
   
        unlink('gallery/' . $billedefilnavn);
        unlink('gallery/big_img/' . $billedefilnavn);
       
    ?>
Avatar billede Slettet bruger
03. april 2012 - 20:52 #12
OK, men så SKAL du i det mindste "vaske" input:

$billedefilnavn = basenname($_GET["billedefilnavn"]); // ingen mapper i navnet

Hvordan ser et gallery_id ud ?
Avatar billede tobrukDk Novice
03. april 2012 - 21:01 #13
"galler_id" det er bare ligesom et normalt "id"

hvad mener du med
$billedefilnavn = basenname($_GET["billedefilnavn"]); // ingen mapper i navnet
Avatar billede tobrukDk Novice
03. april 2012 - 22:50 #14
Jeg valg at lukke den her, men jeg lukker den selv da jeg selv komme frem til mit problem og fik klart det virker 100% :D
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