php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.09.2010, 02:43  
Neuer Benutzer
 
Registriert seit: 08.08.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
caipiranha befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] es wird falsche Zeile gelöscht

Hallo,

ich muss schon wieder um Hilfe bitte.

Bis jetzt habe ich ein Eingabeformular erstellt, das Daten in meine Übungsdatendank schreibt. Ich kann die Daten in einer Tabelle ausgeben lassen.

Jetzt habe ich einen Löschen-Button für jeden Datensatz erstellt, der den jeweils markierten Eintrag löschen soll. Irgendwie kommt früher oder später wohl jeder darauf, sowas zu machen , denn ich habe bei meiner Fehlersuche schon einiges darüber gelesen - auch hier. Meine Frage konnte ich mir leider trotzdem nicht selbst beantworten.

Das Problem ist einfach, dass immer der letzte Datensatz (die letzte Zeile) gelöscht wird, obwohl ich einen ganz anderen Datensatz zum Löschen auswähle.

Ich habe versucht, das ganze mit einer if-Abfrage zu erledigen, vermute aber, dass ich GET falsch eingesetzt habe. Nur sehe ich meinen Fehler nicht.

Die ID wird von mySQL automatisch erstellt (auto_increment) und eingefügt. Ich lasse sie in meiner Tabelle zur Ansicht auch ausgeben.

Hier mal der Quelltext von meiner Löschen-Seite:

PHP-Code:
<?php

if(isset($_GET['delete'])){

$Verbindung mysql_connect('xxx''xxx''xxx');
mysql_select_db('xxx'$Verbindung)
or die(
'Die Datenbank ist nicht vorhanden.'); 

mysql_query("DELETE FROM minidata WHERE id='".$_GET['id']."'") OR die(mysql_error());
echo 
"<strong>Zutat erfolgreich gelöscht</strong>";
}

else {
echo 
'nix gel&ouml;scht';
}


$sql "SELECT `id`, `Zutat`, `kcal`, `Fett`, `KH`, `Prot` FROM `minidata`";

$Verbindung mysql_connect('xxx''xxx''xxx');
mysql_select_db('xxx'$Verbindung);
$abfrageergebnis mysql_query$sql$Verbindung );

echo 
'<table border="1">';
echo 
"<tr><th>id</th><th>Zutat</th><th>kcal</th><th>Fett</th><th>KH</th><th>Prot</th></tr>";


while (
$datensatz mysql_fetch_array$abfrageergebnis )){

echo 
'<form  method="get">';
echo 
"<tr>";
echo 
"<td>" .$datensatz['id']. "</td>";
echo 
"<td>" .$datensatz['Zutat']. "</td>";
echo 
"<td>" .$datensatz['kcal']. "</td>";
echo 
"<td>" .$datensatz['Fett']. "</td>";
echo 
"<td>" .$datensatz['KH']. "</td>";
echo 
"<td>" .$datensatz['Prot']. "</td>";
echo 
'<td><input type="hidden" name="id" value="'.$datensatz['id'].'" /></td>',
'<td><input type="submit" name="delete" value="Entfernen" /></td>';
echo 
"</tr>";

}

echo 
"</table>";
echo 
"</form>";

?>
Ein Denkanstoß bei der Fehlersuche würde mir wirklich sehr weiterhelfen.

Vielen Dank!
__________________
Mit kleinen Schritten vorwärts.
caipiranha ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.09.2010, 07:01  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Das Problem ist, dass du das Formular erst außerhalb der Schleife beendest. Außerdem verschachtelst du auch noch falsch.
Code:
<table>
  <form>
ist falsch.
Code:
<form>
  <table>
ist korrekt, wobei in meinen Augen ein Formular auch keine Tabelle ist, folglich auch nicht als solche ausgezeichnet werden sollte. Anbieten würde sich zum Beispiel eine geordnete Liste.

IMHO würde sich für diese Aufgabe auch ein Link weitaus besser eignen.
Asipak ist offline  
Alt 02.09.2010, 10:18  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Asipak Beitrag anzeigen
IMHO würde sich für diese Aufgabe auch ein Link weitaus besser eignen.
IMHO sollte so etwas wie löschen weder mit einem Link noch mit einem GET Formular geschehen, da es keine Daten abfragt sondern verändert
. POST ist da das Mittel der Wahl.
fab ist offline  
Alt 02.09.2010, 10:41  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Da hast du sicher Recht.

Nach meinem Geschmack ist ein Formular an dieser Stelle aber doch immer etwas übertrieben, da ich wirklich nur die ID und sonst keine Daten übertrage. Sicher kann ich den Löschvorgang aber auch mit einer Datenabfrage verbinden, indem ich nachfrage, ob der Datensatz noch existiert und mir eine Meldung ausgeben lasse. Also in Form einer Statusabfrage.

Sensible Vorgänge wie der Löschvorgang sollten sowieso vor unbefugten Zugriffen geschützt werden. Die einfache Manipulation durch das Anhängen einer ID und Aufrufen der Seite zum Löschen eines Datensatzes sollte zum Beispiel durch einen Login verhindert werden.

Daher sehe ich da eigentlich kein Problem beim Einsatz von GET.

Gruß
Asipak ist offline  
Alt 02.09.2010, 10:52  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Egal was gewählt wird - vor das Löschen gehört immer eine Sicherheitsabfrage
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 02.09.2010, 12:39  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

EDIT

also da alle deine Hidden-ID Felder gleich heißen, wird "er" darüber immer das letzte übermitteln ...

du musst also am besten mit dem Button die richtige ID übergeben

PHP-Code:
echo '<td><input type="hidden" name="id" value="'.$datensatz['id'].'" /></td>',
'<td><input type="submit" name="delete_'.$datensatz['id'].'" value="Entfernen" /></td>'
beim verarbeiten schaust du dir die $_POST daten an ...
PHP-Code:
    FOREACH ($_POST as $key=>$element) {
       if (
substr($key),0,7)=="delete_") {
          
$idnumber=(intval(substr($key,7));
          ... 
// weiterverarbeiten
          
break;
      else
         continue;
    } 
und wenn dein Formular per GET übermittelt, dann eben überall im unteren Code-Abschnitt $_POST durch $_GET ersetzen

Geändert von eagle275 (02.09.2010 um 12:50 Uhr).
eagle275 ist offline  
Alt 02.09.2010, 12:42  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Nein, das Problem ist nach wie vor, dass das Formular erst nach der Schleife geschlossen wird. Somit stehen alle hidden-Felder in einem Formular und ausgewertet wird entsprechend nur das Letzte.
Asipak ist offline  
Alt 02.09.2010, 12:47  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Beides richtig, die Frage ist ob ein einziges Formular gewünscht ist oder viele einzelne.
fab ist offline  
Alt 02.09.2010, 12:51  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hm - meinem Code-Abschnitten ist das relativ egal - da der Button selbst die korrekte ID mitteilt
eagle275 ist offline  
Alt 02.09.2010, 12:55  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Der Button ja, da du aber nicht den Button abfragst, sondern $_GET['id'], bleibt das Problem bestehen.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] unlink falsche Datei wird gelöscht fulltilt PHP Tipps 2010 4 30.03.2010 21:28
[Erledigt] txt - bestimmte zeile elsen und schreiben mcsebbi PHP Tipps 2010 17 02.03.2010 21:32
String Zeile für Zeile kürzen fdm PHP Tipps 2009 5 08.03.2009 22:18
[Erledigt] Erste Zeile einfügen oder löschen in csv solvero PHP Tipps 2009 6 08.03.2009 21:43
Lange Zahlenkombination in kurze Zeichenfolge umwandeln Heinerlutscher PHP-Fortgeschrittene 27 28.02.2009 16:45
[Erledigt] 'upload-Datei' Zeile für Zeile auslesen Felix PHP Tipps 2008 18 29.06.2008 02:55
Mozilla falsche Zeichen in der ersten Zeile PHP Tipps 2006 6 03.11.2006 09:05
__LINE__: Falsche Zeile Jacks Rache PHP Tipps 2006 5 10.06.2006 20:20
Zeile einfügen tennessee Server, Hosting und Workstations 5 02.06.2006 21:05
zeile in mysql wird nicht gelöscht Venom PHP Tipps 2007 3 13.12.2005 16:09
[Erledigt] Jede 2. Zeile eine andere Farbe. Clan-Opa PHP Tipps 2004-2 1 26.11.2004 09:00
durchlauf,zeile für zeile + update Skazi Datenbanken 10 25.11.2004 13:59
[Erledigt] Problem mit einer Website PHP Tipps 2004 12 06.08.2004 10:34
[Erledigt] Funktion MAIL() funkt nicht PHP Tipps 2004 16 11.07.2004 17:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php löschbutton id aus letzter zeile, php es wird immer der letzt datensatz gelöscht, php __line__ falsch, mysql zeile löschen falsche zeile, php submit datensatzid, datenabfrage in mozilla falsch, schreibt in die falsche zeile

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum