Just nu i M3-nätverket
Gå till innehåll
Mongoraja

LÖST Tabort inlägg med id ifrån databas

Rekommendera Poster

Hej finns det någon där ute som kan hjälpa mig med hur man tar bort inlägg ifrån en skapad blogg med php och databas. Filstrukturen är uppbyggd så här:

 

index.php - Startsidan, länkar till skapa.php och visa.php

skapa.php - htmlformulär för att skapa inlägg, går till skapaInlagg.php

skapaInlagg.php - php för att lägga in nytt inlägg i databasen, går sedan till index.php

visa.php - Visar alla inlägg

redigera.php - Formulär för att redigera ett inlägg, går till uppdateraInlagg.php

tabort.php - Formulär där man väljer om man vill ta bort inlägget eller inte, går till tabortInlagg.php

uppdateraInlagg.php - phpsida för att uppdatera ett inlägg, går sedan till visa.php

tabortInlagg.php - phpsida som tar bort inlägget om man svarat ja, går sedan till visa.php

Jag har fått ihop databasen och allt förutom tabort funktionerna. Här är koden för skapainlagg.php. Man skriver namn och text och det finns även  datum och tid som läggs till automatiskt i inlägget. Man kan redigera inläggen men man ska även kunna tabort dem, men det har jag ej fått ihop... Finns det någon som kan hjälpa till. Tacksam för svar :)

 
<?php

$namn = $_POST["namn"];

$text = $_POST["text"];

$datum = date("Y-m-d H:i:s");

 

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");


$sql = "insert into inlag (namn, datum, text) values ('".$namn."', '".$datum."', '".$text."')";
$conn->query($sql);
header("location: index.php");

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

SQL-koden för att ta bort poster är DELETE FROM tabell WHERE idkolumn = värde

 

Du måste alltså veta postens ID för att ta bort den, alltså på samma sätt som du gör för att ändra på en post.

 

Eller missförstod jag frågan?  ;)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Hej Mr Andersson, Tack för snabbt svar. Nej du förstår nog frågan korrekt. Jag har skrivit såhär nu på tabort.php 

<?php
$namn = $_POST['namn'];
$text = $_POST['text'];
$id = $_POST['id'];

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

$sql = "DELETE FROM inlag WHERE id='".$id."'";

//echo $sql;
$result = $conn->query($sql);
header("location: visa.php");

Men jag får det ej att fungera. Var det något liknande du menade att jag skulle göra?

Redigerad av Mongoraja

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Borde fungera. Skriv ut värdet på $sql innan frågan körs:

 

var_dump($sql);

 

Och värdet på $result efteråt:

 

var_dump($result);

 

Kommentera bort header-raden så att du hinner se resultatet.

 

Vad får du för svar?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Är frågan hur man skriver SQL-frågan eller hur hela koden ska se ut?

delete from [table] where [column] = [value]

Men du bör verkligen fundera på säkerheten. Hur skyddar du dig mot SQL-injection?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Borde fungera. Skriv ut värdet på $sql innan frågan körs:

 

var_dump($sql);

 

Och värdet på $result efteråt:

 

var_dump($result);

 

Kommentera bort header-raden så att du hinner se resultatet.

 

Vad får du för svar?

 

Jag vet inte riktigt om jag förstod hur du menade men skrev iallafall så här:

<?php
$namn = $_POST['namn'];
$text = $_POST['text'];
$id = $_POST['id'];

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

var_dump($sql); var_dump($rusult);
$sql = "DELETE FROM inlag WHERE id='".$id."'";

//echo $sql;
$result = $conn->query($sql);

Men det funkar ännu inte och den hittar fel på line 2,3,4 och 9

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Där är inga fel på rad 2 3 4 eller 9 (förutom stavfelet på rad 9).

 

Så här menade jag:

<?php
$namn = $_POST['namn'];
$text = $_POST['text'];
$id = $_POST['id'];

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

$sql = "DELETE FROM inlag WHERE id='".$id."'";

var_dump($sql);

//echo $sql;
$result = $conn->query($sql);
// header("location: visa.php");

var_dump($result);

?>

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Är frågan hur man skriver SQL-frågan eller hur hela koden ska se ut?

delete from [table] where [column] = [value]

Men du bör verkligen fundera på säkerheten. Hur skyddar du dig mot SQL-injection?

 

Frågan är nog mest hur koden ska gå ihop med frågan så att allt fungerar. Jag har kommit på ganska god väg och tror att lösningen är nära men koden går inte ihop ännu riktigt.

 

Jag tror att det här inlägget råkat blivit 2st av  någon konstig anledning men på det andra inlägget kan du kolla lite mer på min kod https://eforum.idg.se/topic/354022-tabort-inl%C3%A4gg-med-id-ifr%C3%A5n-databas/

 

Säkerheten är inte min största prioritet då det här endast är ett skolarbete och ska ej läggas ut någonstans, men tack för att du ändå nämnde det. :)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

 

Där är inga fel på rad 2 3 4 eller 9 (förutom stavfelet på rad 9).

 

Så här menade jag:

<?php
$namn = $_POST['namn'];
$text = $_POST['text'];
$id = $_POST['id'];

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

$sql = "DELETE FROM inlag WHERE id='".$id."'";

var_dump($sql);

//echo $sql;
$result = $conn->query($sql);
// header("location: visa.php");

var_dump($result);

?>

 

Okej testade koden. Felkoden som kom upp var http://imgur.com/a/rwhFL

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Okej testade koden. Felkoden som kom upp var http://imgur.com/a/rwhFL

 

Ja om du bara kör koden rakt upp och ner så blir det fel. Du måste köra den från ditt formulär eftersom koden förväntar sig formulär-data.

 

Mem om du körde koden på rätt sätt, så ser vi att variabeln $id är tom dvs formulär-variabeln $_POST['id'] får inget värde i ditt formulär.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja om du bara kör koden rakt upp och ner så blir det fel. Du måste köra den från ditt formulär eftersom koden förväntar sig formulär-data.

 

Mem om du körde koden på rätt sätt, så ser vi att variabeln $id är tom dvs formulär-variabeln $_POST['id'] får inget värde i ditt formulär.

Jag förstår verkligen inget nu.. Jag kör väll den på rätt sätt eller? För den är ju inne i databasen och hämtar information och databasen borde det inte vara några fel på. Förlåt men har inte så starka kunskaper inom php och databaser så du får nog hjälpa mig med att förstå. För du skriver att jag ska köra den i formuläret och formuläret är väll inlägget i databasen?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du använder variabeln $_POST[] som används för att läsa av vad som postats i ett formulär som användaren fyller i.

 

Om så inte är fallet, så har vi ett helt annat problem än att radera poster från databasen.

 

Hur kommer man till den här koden? 

Hur skickar du in data i den, typ ID-nummer så vi vet vad som ska raderas?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du använder variabeln $_POST[] som används för att läsa av vad som postats i ett formulär som användaren fyller i.

 

Om så inte är fallet, så har vi ett helt annat problem än att radera poster från databasen.

 

Hur kommer man till den här koden? 

Hur skickar du in data i den, typ ID-nummer så vi vet vad som ska raderas?

kod för formuläret skapa.php

<head>
	<meta charset = "utf-8">
	<link href="style.css" rel="stylesheet" type="text/css">
</head>
<form method="post" action="skapainlagg.php">

   <label>Namn:</label>

   <input type="text" name="namn">

 

   <label>Text:</label>

   <textarea name="text"></textarea>

 

   <input type="submit" value="Skapa inlägg">

</form>

 

<a href="index.php">Tillbaka</a> 

Kod för att skapa inlägg är skapainlagg.php

<?php

$namn = $_POST["namn"];

$text = $_POST["text"];

$datum = date("Y-m-d H:i:s");

 

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");


$sql = "insert into inlag (namn, datum, text) values ('".$namn."', '".$datum."', '".$text."')";
$conn->query($sql);
header("location: index.php");
 

Ja jag antar att det är posterna vi ska radera ifrån databasen. Så när man trycker på radera på inlägget så ska den veta vilket id det inlägget har och bara ta bort det ur databasen.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Jag har nu löst så att inlägget tas bort, men jag skulle vilja att det ställs en fråga när man trycker på tabort-knappen "Vill du verkligen ta bort det här inlägget?" Sen trycker man på Ja eller Nej. Hur gör man det på lättast sätt. Tacksam för svar. Om ni vill se den andra koden är det bara att fråga så postar jag den här.

 

edit: Löste det nu typ men har fortfarande några problem.

Jag får med mig id till tabort.php men hur ska jag få med mig den till tabortinlagg.php

Jag tänker mig något sånt här.. Men det funkar ej

//Det här är visa.php
<?php
$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

$sql = "select * from inlag";
$result = $conn->query($sql);
$array = mysqli_fetch_all($result, MYSQLI_ASSOC);

foreach($array as $row){ ?>
<head>
	<meta charset = "utf-8">
	<link href="style.css" rel="stylesheet" type="text/css">
</head>
<div id="visa">
	<div>
        <span>Skapad av: <?php echo $row['namn']?></span>
        <span><?php echo $row['datum']?></span>
        <p><?php echo $row['text']?></p>
        <a href="redigera.php?id=<?php echo $row['id']; ?>">Redigera</a> | 
        <a href="tabort.php?id=<?php echo $row['id']; ?>">Ta bort</a>
    </div><br><br>
<?php } ?>

<div class="tillbaka">
<a href="index.php">Tillbaka</a>
</div>
</div> 
// Det här är tabort.php
<?php
$id = $_GET['id'];
?>
<head>
	<meta charset = "utf-8">
	<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Vill du Verkligen ta bort det här inlägget?</h1>
<a href="tabort.php?id=<?php echo $id = $_GET['id']; ?>">JA!</a>
<br>
<a href="visa.php">NEJ!</a>
</body> 
// Det här är tabortinlagg.php
<?php
$id = $_GET['id'];

$conn = new mysqli("localhost", "root", "", "blogg");
mysqli_set_charset($conn,"utf8");

$sql = "DELETE FROM inlag WHERE id='".$id."'";

$result = $conn->query($sql);

//header("location: visa.php");
 
?> 
Redigerad av Mongoraja

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu

Publika meddelanden



×