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
};
?>
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.
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.