[PHP] Beiträge listen und Löschbutton

11/28/2014 17:29 mastermo#1
Heyho Leute,

ich stehe wiedermal vor einem Problem und brauche euren Rat. Ich möchte Datenbankeinträge in einer Tabelle listen und daneben einen Löschbutton womit man den Wunscheintrag löschen kann.

Das ganze sollte in etwa so aussehen:

Code:
id | title | [URL="#"]Löschbutton[/URL]
Kann mir da wer von euch nen Codesnippet geben womit ich das umsetzen kann?

Mein bisheriger Code:

PHP Code:
<html>
<head>
    <title>Test</title>
</head>
<body>
<?php 

require_once('./config.php');

$query mysql_query("SELECT * FROM events ORDER BY 'id' ASC");

while(
$row mysql_fetch_assoc($query))
{
    
$id $row['id'];        
    
$title $row["title"];
    echo 
"

    
    <h3>ID 
{$id} <font color='red'>am</font> Event {$title}</h3>
    "
;    
}
?>
</body>
</html>
Gruß Mo
11/28/2014 18:07 ~ JWonderpig ~#2
z.B.
PHP Code:
echo "<a href='delete.php?id={$id}'>Löschen</a>" 
Das gleich dann mit Edit - Jedoch solltest du aufpassen, welcher User Rechte für diese Datei hat.
11/28/2014 19:44 mastermo#3
Ich bräuchte ja das eigentliche Snippet womit ich den Beitrag auch löschen kann. Sprich die delete.php :) Bin leider noch nicht besonders weit mit PHP :(
11/28/2014 19:53 Guron#4
Quote:
Originally Posted by mastermo View Post
Ich bräuchte ja das eigentliche Snippet womit ich den Beitrag auch löschen kann. Sprich die delete.php :) Bin leider noch nicht besonders weit mit PHP :(
So weit ich weiß brauchst du keine delet.php - du kannst auch deine aktuelle Datei löschen und eine Succes Message einblenden lassen. Das Script packst du eigentlich nach oben.

Wie bereits erwähnt solltest du noch absichern welcher Rank was löschen kann. Einfach die aktuelle SESSION abfragen was für einen Rank der angemeldetete Benutzer hat.
11/28/2014 20:02 Mikesch01#5
[Only registered and activated users can see links. Click Here To Register...]

@Threadersteller ;)
11/28/2014 20:29 Warnuk3r#6
Falls du es so machen willst wie Caiv es dir vorschlägt:

Bei delete.php?id=4 wird über die GET-Methode der Wert 4 übermittelt. Durch $_GET['id'] kannst du ihn ansprechen.

Code:
$id = $_GET['id'];
$query = mysql_query("DELETE FROM events WHERE id = $id");
Evtl. " ' . um $id herum, falls es nicht als Variable wahrgenommen wird.

An deiner Stelle würde ich eher ein Formular aus der Ausgabe machen und wenn man den Button zum löschen klickt, wird er abgeschickt und löscht direkt. So in etwa wie Guron schrieb. Du musst halt wie eben bereits oft gesagt aufpassen, wer zu der Datei Zugang hat.

Übrigens würde ich Mysqli verwenden.
11/28/2014 20:41 NotEnoughForYou#7
Quote:
Originally Posted by Warnuk3r View Post
Falls du es so machen willst wie Caiv es dir vorschlägt:

Bei delete.php?id=4 wird über die GET-Methode der Wert 4 übermittelt. Durch $_GET['id'] kannst du ihn ansprechen.

Code:
$id = $_GET['id'];
$query = mysql_query("DELETE FROM events WHERE id = $id");
Evtl. " ' . um $id herum, falls es nicht als Variable wahrgenommen wird.

An deiner Stelle würde ich eher ein Formular aus der Ausgabe machen und wenn man den Button zum löschen klickt, wird er abgeschickt und löscht direkt. So in etwa wie Guron schrieb. Du musst halt wie eben bereits oft gesagt aufpassen, wer zu der Datei Zugang hat.

Übrigens würde ich Mysqli verwenden.
Vorher aber bitte noch escapen sonst ist ein kompletter DB Zugriff möglich.
11/28/2014 23:24 mastermo#8
Ich werds morgen mal austesten. Erstmal ein großes Danke an die tatkräftigen Lösungsvorschläge :)

Zur Berechtigung: Das Vorhaben ist nur für ein Adminpanel gedacht, wozu der Admin Zugang hat. Sprich wer kein Admin ist kommt auch nicht hin (hab ne Session vom Login davor, nur nicht im Snippet gepostet :) )
11/28/2014 23:44 .Kirataro#9
Tipp: Gestalte es als Tabelle!

PHP Code:
<table>
while(
$row mysqli_fetch_object($query))
{
                        
$sender get_name($row->id_sender);
                        
$empfaenger get_name($row->id_empfaenger$db);
                        echo 
"<tr><td>".$sender."</td><td>".$row->date."</td><td>".$row->time."</td><td>".$row->subject."</td><td>".'<a href="index.php?s=message&mode=read&id='.$row->id.'">Lesen</a>'."</td><td>".'<a href="index.php?s=message&mode=delete&id='.$row->id.'">Löschen</a>';
}
</
table
(ist von einem alten PN-System meines Mini-Browsergames, bau dir einfach Sachen um, wie du's brauchst).
11/29/2014 00:06 ~ JWonderpig ~#10
Oder man schreibt eine Funktion, die alle Daten aus der DB in einem Array speichert.
So muss man nicht den HTML Code in die while-Schleife schreiben und kann den selben Code an mehreren Stellen nutzen ;)
11/29/2014 12:15 NotEnoughForYou#11
Quote:
Originally Posted by Caiv View Post
Oder man schreibt eine Funktion, die alle Daten aus der DB in einem Array speichert.
So muss man nicht den HTML Code in die while-Schleife schreiben und kann den selben Code an mehreren Stellen nutzen ;)
Um die Inhalt des Arrays aber wieder auszugeben braucht man wieder ne schleife (foreach / while / for whatever), von daher ist es grad egal :D
11/29/2014 13:22 ~ JWonderpig ~#12
Quote:
Originally Posted by NotEnoughForYou View Post
Um die Inhalt des Arrays aber wieder auszugeben braucht man wieder ne schleife (foreach / while / for whatever), von daher ist es grad egal :D
Jain^^

Wenn er auf einer Startseite alle Einträge auslesen will und nochmal im Backend, müsste er 2x mit einer While-Schleife arbeiten.
Mit einem Array kann man nur die Werte ausgeben, die an der Stelle gebraucht werden. Auf der Startseite sollen ja z.B. nicht die Links zum Löschen angegeben werden^^

PHP Code:

$db 
= new mysqli(...);

function 
getBeitraege() {
    GLOBAL 
$db;

    
$sql "SELECT * FROM `tabelle`";
    
$result $db->query($sql);

    
$results = array();

    while (
$row $result->fetch_assoc()) {
        
$results[] = $row;
    }

    return 
$results;

Dann kann man später mit einer foreach-Schleife nur die Werte ausgeben die man braucht:

Startseite:
PHP Code:
foreach (getBeitraege() as $beitrag) {
    echo 
'<h2>' $beitrag['headline'] . '</h2>';
   echo 
'<p>' $beitrag['content'] . '</p>';

Backend:
PHP Code:
foreach (getBeitraege() as $beitrag) {
    
//Alles was du im Backend brauchst
    
echo '<a href="delete.php?id=' $beitrag['id'] . '">Löschen</a>';
    ...

11/29/2014 13:26 NotEnoughForYou#13
Quote:
Originally Posted by Caiv View Post
Jain^^

Wenn er auf einer Startseite alle Einträge auslesen will und nochmal im Backend, müsste er 2x mit einer While-Schleife arbeiten.
Mit einem Array kann man nur die Werte ausgeben, die an der Stelle gebraucht werden. Auf der Startseite sollen ja z.B. nicht die Links zum Löschen angegeben werden^^

PHP Code:

$db 
= new mysqli(...);

function 
getBeitraege() {
    GLOBAL 
$db;

    
$sql "SELECT * FROM `tabelle`";
    
$result $db->query($sql);

    
$results = array();

    while (
$row $result->fetch_assoc()) {
        
$results[] = $row;
    }

    return 
$results;

Dann kann man später mit einer foreach-Schleife nur die Werte ausgeben die man braucht:

Startseite:
PHP Code:
foreach (getBeitraege() as $beitrag) {
    echo 
'<h2>' $beitrag['headline'] . '</h2>';
   echo 
'<p>' $beitrag['content'] . '</p>';

Backend:
PHP Code:
foreach (getBeitraege() as $beitrag) {
    
//Alles was du im Backend brauchst
    
echo '<a href="delete.php?id=' $beitrag['id'] . '">Löschen</a>';
    ...


Wenn Frontend und Backend allerdings getrennt sind (so wie es sein sollte), dann würde sowieso niemals beides gleichzeitig aufgerufen werden, was somit die Performanceverbesserung durch die einmalige Zwischenspeicherung im Array wieder zu nicht machen würde.

Außerdem würde es auf der Startseite nicht viel bringen alle Einträge zu selectieren (was man vermeiden sollte) sondern dort auch nur die, die benötigt werden. Fürs Backend bräuchte man dann schon alle, deshalb würden sich hier unterschiedliche Funktionen anbieten.