per submit button eintrag aus db löschen...

ede592

Mitglied
Hallo!

Ich bins wieder. Undzwar will ich diesmal meine badwords die ich per html oberfläche eingegeben und mittels php an die datenbank gesendet habe auch wieder durch die html oberfläche löschen können.
http://rollbrettgurken.de/php/connection.php
Mein Code:
Code:
<form action="connection.php" method="post" name="Formular" id="Formular">
                <input name="aktion" type="hidden" id="aktion" value="neu" />
<input name="name" type="text" class="input" value="<? echo trim($_POST['name']); ?>" size="30" maxlength="30" />
<input name="submit" type="submit" value=" Absenden ">
</form>
<?

$benutzer=user;
$passwort=pw;
$db      =db; 
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");

if (!$verbindung) {
    echo "keine verbindung zur Datenbank möglich! Überprüfen sie ihre Zugangsdaten in der config!";
    exit;
}

if  (isset($_POST["submit"])) {
    $Badword = mysql_real_escape_string($_POST["name"]);
    $abfrage = "INSERT into gaestebuch_badword (badwords) VALUES('$Badword')";
	$abfrage2 = "SELECT badwords from gaestebuch_badword";
	$abfrage3 = "SELECT id from gaestebuch_badword";
    $erg = mysql_db_query($db,$abfrage2,$verbindung);
	$erg1 = mysql_db_query($db,$abfrage3,$verbindung);
}


echo "<div align='center'> Die Badwords: </div>" ;
mysql_db_query($db,$abfrage,$verbindung);
	while (list($Name) = mysql_fetch_row($erg)) {   	
	echo "<div align='center'> $Name Hier die ID
                <input name='submit/loeschen' type='submit' value=' Loeschen '></form> </div>";
}
	$abfrage4 = "DELETE from gaestebuch_badword where id=$ID";
if (isset($_POST["submit/loeschen"])) {
	mysql_db_query($db,$abfrage4,$verbindung);
}
mysql_close($verbindung);
?>
Danke im Vorraus!
 
Hi, tut mir Leid, dass ich das so sagen muss, aber da ist noch einiges im Argen:

Erstmal dein Quelltext mit meien Gedanken zu den Statements:
PHP:
<form action="connection.php" method="post" name="Formular" id="Formular">
                <input name="aktion" type="hidden" id="aktion" value="neu" />
<input name="name" type="text" class="input" value="<? echo trim($_POST['name']); ?>" size="30" maxlength="30" />
<input name="submit" type="submit" value=" Absenden ">
</form>
<?

$benutzer=user;
$passwort=pw;
$db      =db; 
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");

if (!$verbindung) {
    echo "keine verbindung zur Datenbank möglich! Überprüfen sie ihre Zugangsdaten in der config!";
    exit;
}
//Soweit so gut

//Diese IF-Abfrage prüft, ob die Variable $_POST["submit"] gesetzt ist (isset()).
//Das ist der Fall, wenn jemand auf den Button "Absenden" gedrückt hat.
//Falls die Seite das erste mal geladen wird, hat niemand gedrückt und dieser Teil wird nicht ausgeführt
if  (isset($_POST["submit"])) {
    $Badword = mysql_real_escape_string($_POST["name"]);
    //Wenn du diese Abfrage innerhalb der IF-Anweisung zuweist, solltest du sie auch direkt hier ausführen. 
    //Das ist ja schließlich die Abfrage zum Einfügen neuer Badwords, und die soll nur ausgeführt werden, wenn jemand den Button gedrückt hat.
    $abfrage = "INSERT into gaestebuch_badword (badwords) VALUES('$Badword')"; 
    //Diese beiden Abfragen haben hier in der IF-Answeisung eigentlich nichts verloren
    //Außerdem kann man, wenn man id UND badword auslesen will das ganze in einem machen: "SELECT id, badwords from gaestebuch_badword"
    $abfrage2 = "SELECT badwords from gaestebuch_badword";
    $abfrage3 = "SELECT id from gaestebuch_badword";
    //Hier werden diese beiden Abfragen abgeschickt. Auch das gehört außerhalb der IF-Anweisung
    $erg = mysql_db_query($db,$abfrage2,$verbindung);
    $erg1 = mysql_db_query($db,$abfrage3,$verbindung);
}


echo "<div align='center'> Die Badwords: </div>" ;
//Hier wird das neue Badword der DB hinzugefügt. Was ist wenn die Seite das erste mal geladen wurde?
//Dann wurde der IF-Teil oben nicht ausgeführt und $abfrage ist leer (""). Sollte also einen Fehler geben
mysql_db_query($db,$abfrage,$verbindung);
	while (list($Name) = mysql_fetch_row($erg)) {   	
	echo "<div align='center'> $Name Hier die ID
                <input name='submit/loeschen' type='submit' value=' Loeschen '></form> </div>";
//Da hört das form-Tag einfach auf. Wo fängt das denn an?
}

//Diese Zuweisung sollte in die IF-Anweisung da unten, da sie sonst nicht benötigt wird
//Wo kommt denn die Variable $ID her. Die wurde nirgendwo belegt, ist also leer und die Abfrage4 produziert einen Fehler/bewirkt nichts.
	$abfrage4 = "DELETE from gaestebuch_badword where id=$ID";
if (isset($_POST["submit/loeschen"])) {
	mysql_db_query($db,$abfrage4,$verbindung);
}
mysql_close($verbindung);
?>

Also:
Dein Formular zum löschen ist vom Ansatz her schon mal nicht falsch. du brauchst aber noch ein feld, wo die ID drin gespeichert wird, damit die dann beim Senden des Formulars mitgeschickt wird und für die Löschanfrage zur Verfügung steht. Außerdem braucht dein Formular einen Kopf/Start-Tag.
Ich würde das mal so ansetzen:
PHP:
$erg = mysql_db_query($db,$query,$verbindung);
while ($zeile = mysql_fetch_array($erg)) {   	
	echo "<div align='center'>
                <form action=connection.php method=post>
                ". $zeile["badwords"] ."
                <input name='loeschenid' type='hidden' value='". $zeile["ID"] ."'>
                <input name='loeschen' type='submit' value=' Loeschen '></form> </div>";
}
Damit hat jedes Badword eine eigenes Formular was abgeschickt werden kann. Und mit $_POST["loeschenid"] kannst du dann nachher die ID bekommen und in deine Abfrage einbauen.

Insgesamt solltest du dein Script etwas mehr strukturieren und dir überlegen was in welchen Fällen ausgeführt werden soll und das entsprechend mit IF-Abfragen gestalten

UND: Mit [ PHP ] statt mit [ CODE ] lässt sich der Code schön bunt als php-Code darstellen.

Grüße
 
Soo. Danke erstmal für deine Hilfe und für deine Kritik. Allerdings Hab ich mein code jetz deinen tipps weitesgehend angepasst aber diesmal bleibt die Funktion des hinzufügen wieder aus. Ich bin absoluter Neuling auf dem Php-gebiet und komme mit diesem problem mal wiede rnich alleine klar. So sieht mein Code jetz aus:

PHP:
<form action="connection.php" method="post" name="Formular" id="Formular">
                <input name="aktion" type="hidden" id="aktion" value="neu" />
<input name="name" type="text" class="input" value="<? echo trim($_POST['name']); ?>" size="30" maxlength="30" />
<input name="submit" type="submit" value=" Absenden ">
</form>
<?

$benutzer=user;
$passwort=pwd;
$db      =db; 
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");

if (!$verbindung) {
    echo "keine verbindung zur Datenbank möglich! Überprüfen sie ihre Zugangsdaten in der config!";
    exit;
}

if  (isset($_POST["submit"])) {
    $Badword = mysql_real_escape_string($_POST["name"]);
	}
    $abfrage = "INSERT into gaestebuch_badword (badwords) VALUES('$Badword')";
	$abfrage2 = "SELECT id,badwords from gaestebuch_badword";
    $erg = mysql_db_query($db,$abfrage2,$verbindung);



echo "<div align='center'> Die Badwords: </div>" ;
while ($zeile = mysql_fetch_array($erg)) {       
    echo "<div align='center'>
                <form action=connection.php method=post>
                ". $zeile["badwords"] ."
                <input name='loeschenid' type='hidden' value='". $zeile["id"] ."'>
                <input name='loeschen' type='submit' value=' Loeschen '></form> $zeile </div>";
}  

$ID=$_POST["loeschenid"];	
if (isset($_POST["loeschen"])) {
	$abfrage_loeschen="DELETE from gaestebuch_badword WHERE id=$ID"; 
	mysql_db_query($db,$abfrage_loeschen,$verbindung);
}

mysql_close($verbindung);
?>
Danke für ihre Hilfe!
 
Hi, sieht schon mal etwas besser aus ;)

Mein Vorschlag:
PHP:
<form action="connection.php" method="post" name="Formular" id="Formular">
    <input name="aktion" type="hidden" id="aktion" value="neu" />
    <input name="name" type="text" class="input" value="<? echo trim($_POST['name']); ?>" size="30" maxlength="30" />
    <input name="submit" type="submit" value=" Absenden ">
</form>

<?

$benutzer=user;
$passwort=pwd;
$db      =db; 
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");

if (!$verbindung) {
    echo "keine verbindung zur Datenbank möglich! Überprüfen sie ihre Zugangsdaten in der config!";
    exit;
}

//falls der button gedrückt wurde und ein neuer eintrag gemacht werden soll, dann...
if  (isset($_POST["submit"])) {
    //lege den abfragestring fest:
    $Badword = mysql_real_escape_string($_POST["name"]);
    $abfrage = "INSERT into gaestebuch_badword (badwords) VALUES('$Badword')";
    //UND WICHTIG: schicke die abfrage auch ab:
    mysql_db_query($db,$abfrage,$verbindung);
} //ende der behandlung, dass ein neues wort eingetragen werden soll
    
//jetzt kommt erstmal der fall, das etwas gelöscht werden soll und nicht schond das SELECT
//falls ein löschen button gedrückt wurde, dann... 
if (isset($_POST["loeschen"])) {
    //lege die abfrage zum löschen fest und ...
    $ID = mysql_real_escape_string($_POST["loeschenid"]);
    $abfrage_loeschen = "DELETE from gaestebuch_badword WHERE id=$ID"; 
    //schicke die abfrage ab
    mysql_db_query($db,$abfrage_loeschen,$verbindung);
} //ende der behandlung, dass ein wort gelöscht werde soll

//alle aktionen (falls vorhanden) bearbeitet. jetzt können die aktualisierten badwords ausgegeben werden:

$abfrage2 = "SELECT id,badwords from gaestebuch_badword";
$erg = mysql_db_query($db,$abfrage2,$verbindung);

echo "<div align='center'> Die Badwords: </div>" ;
while ($zeile = mysql_fetch_array($erg)) {       
    echo "<div align='center'>
                <form action=connection.php method=post>
                ". $zeile["badwords"] ."
                <input name='loeschenid' type='hidden' value='". $zeile["id"] ."'>
                <input name='loeschen' type='submit' value=' Loeschen '></form>
                </div>";
}  

mysql_close($verbindung);
?>

Vor dem letzten "</div>" hattest du nochmal eine Ausgabe von $zeile. Das macht da wenig Sinn, da es ja nur das Array ausgibt, das die aktuelle Zeile beinhaltet.

Ganz perfekt ist der Code zwar noch nicht, aber er sollte zumindest so laufen und kann auch so genutzt werden ohne größere Bedenken
 
Zurück