Avatar billede strookers Nybegynder
27. april 2014 - 20:57 Der er 6 kommentarer

problemer med at opdatere db

jeg kan sagtens slette billeder fra databasen men kan ikke opdatere teksten. håber i kan hjælpe mig.

her er koden:

<?php

$conn = mysqli_connect ("localhost","root","","test");

if(isset($_GET['del'])){
$id = $_GET['id'];

$sql = "select * from picupload where id=".$id."";
$query = mysqli_query($conn, $sql);
$result = mysqli_fetch_array($query);
unlink("uploads/".$result['name']."");
mysqli_query($conn,"delete from picupload where id=".$id);
};
   
if(isset($_POST['upd'])){
$id = $_POST['id'];
$info = $_POST['info'];

mysqli_query($conn,"UPDATE picupload SET info = '$info' WHERE id = ".$id."");
};

$query = mysqli_query ($conn,"select * from picupload");
while($result = mysqli_fetch_array($query)){
?>
<table id="picedittable" cellpadding="0" cellspacing="0" height="150px">
    <tr height="150px;">
        <td>
            <div id="div_pic" style="width:200px; height:150px; background-size:cover; background-image:url(uploads/<?php echo $result['name'] ?>); background-color:#333;"></div>
       
        </td>
        <td width="8px"></td>
        <td>
            <form style="">
            <textarea id="pictextarea" label=""><?php echo $result['info'] ?></textarea>
            </form>
        </td>
    </tr>
    <tr>
        <td>
        <?php
        //sletknap
        echo "<a href='index.php?del=1&id=".$result["id"]."'><div id='div_del'>Slet</div></a>";
        ?>
        </td>
        <td width="8px"></td>
        <td>
        <?php
        //opdater knap
        echo "<a href='index.php?upd=1&id=".$result["id"]."'><div id='div_upd'>Opdater</div></a>";
        ?>
        </td>
    </tr>
</table>
<?php
};
?>
Avatar billede repox Seniormester
27. april 2014 - 21:03 #1
Din form mangler POST metode og dit textarea har ikke noget navn.
Avatar billede Slater Ekspert
27. april 2014 - 21:15 #2
Off-topic, men du putter POST-data direkte i et SQL-kald uden rensning. Hvis du har tænkt dig at lægge det på nettet, så læs op på SQL injections først. Det er ekstremt usikkert.
Avatar billede repox Seniormester
28. april 2014 - 07:54 #3
Det er faktisk lidt synd at der ikke anvendes prepared statements når nu man alligevel bruger MySQLi.
Avatar billede strookers Nybegynder
28. april 2014 - 12:34 #4
hvad mener du med at jeg putter det direkte ind i mit sql kald uden RENSNING? kan du komme med nogle eksempler med og uden rensning så jeg forstår det lidt bedre.
Avatar billede Slater Ekspert
28. april 2014 - 14:06 #5
Du skriver f.eks.:

$info = $_POST['info'];

mysqli_query($conn,"UPDATE picupload SET info = '$info' WHERE id = ".$id."");

Dvs. POST dataet 'info' bliver puttet direkte ind i et SQL-kald og udført som SQL, og eftersom alle og enhver kan rette HTTP data, kan de meget nemt hacke siden, ødelægge dine data eller få adgang til eksisterende data. Hvis du vil vide hvordan, så søg på "SQL injections". Der er masser om det, da det er den mest almindelige, men samtidig nok mest alvorlige fejl, mange uøvede kodere laver.

For at rense dataene kan du tage den letteste vej og bruge funktioner som mysql_real_escape_string() - den skal bare køres på alle data, du ikke stoler på, dvs. alt fra $_POST, $_GET, $_COOKIE, osv. Det største problem med det er, at du med garanti kommer til at glemme det engang. Det gør alle. Og så er helvede løs.

Men bedre vil være, som repox siger, at bruge parametized statements, som er en helt anden måde at skrive kaldene på, og derfor fylder lidt mere end giver mening at forklare her.

Allerbedst er at gå helt væk fra at skrive SQL direkte, og i stedet bruge en DBAL eller ORM, f.eks. Doctrine. Det er lettere at arbejde i, og så skal du slet ikke tænke på rensning af data.

Alle disse ting kan søges på, hvis du vil vide mere - eller spørg.
Avatar billede strookers Nybegynder
28. april 2014 - 15:15 #6
ok.. tusind tak for hjælpen
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

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