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

Tabort inlägg med id ifrån databas


Mongoraja

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");

 

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

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?  ;)

Länk till kommentar
Dela på andra webbplatser

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?

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

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?

Länk till kommentar
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?

Länk till kommentar
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

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

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);

?>

Länk till kommentar
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. :)

Länk till kommentar
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

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

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.

Länk till kommentar
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?

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

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?

Länk till kommentar
Dela på andra webbplatser

har slagit ihop två trådar, därav kanske viss oordning i svaren

 

 

En fråga, en gång, det räcker.

 

/En av moderatorerna

Länk till kommentar
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.

Länk till kommentar
Dela på andra webbplatser

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");
 
?> 
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...