• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

per POST übergebene ID in SQL Abfrage nutzen

themk#

Neues Mitglied
Hallo,

Ich habe eine Datenbank in die Benutzerdaten geschrieben werden. Zur Identifikation jedes Tupels gibt es eine ID. Nun möchte ich, dass man Datensätze nachträglich bearbeiten kann. Ich habe also eine Ausgabe, der Benutzerdaten in Kurzform und dann einen Button "edit".

Nun habe ich mir das wie folgt gedacht :
Der Edit Button
Code:
<a href=\"Formular_Bearbeiten.php?id=" . $ausgabe['id'] . "><img src=\"images/edit.gif\" border=0>

und im folgendem Formular dann die entsprechende Stelle wo per SQL der gesamte Datensatz abgefragt wird
Code:
$result = mysql_query("SELECT * FROM beratungsprotokolle WHERE id=$_GET['id']");
 
Das ganze wird nur im Netzwerk genutzt. Sicherheit ist da also nicht von sooo hoher Priorität. Trotzdem Danek für den Hinweis.

Die Frage war im Grunde nur, ob man sowas in der Theorie so machen kann?
- Wird die ID per GET so übergeben?
- Kann man den Übergebenen Wert SO in eine SQL Abfrage einbauen?
 
Naja, wenn schon keine sicherheit Priorität hat, ist diese Variante auch noch Fehleranfällig, ausserdem kann ein Scherzkeks im Netzwerk auch darauf kommen ein: ;drop table users; in den Query einzubauen. Dann kann die Tabelle weg sein. Ausserdem ist es ein leichtes sowas mit den Bordmitteln von PHP zu verhindern, warum willst du es unbedingt nicht verwenden?

Und zu deinen Fragen: ja genau so geht das.
 
Unbedingt würde ich nicht sagen.
Wie könnte ich das Problem einfach & schnell umgehen ?


Hier ist irgendwo noch ein Fehler ... ich suche und suche aber finde ihn nicht :/
Code:
echo "  <td><a href=\"Formular_Bearbeiten.php?id=\" . $ausgabe['id'] \">edit</a>";
 
Du hast dir den wikipedia Artikel gar nicht angeschaut?
SQL-Injection

Was für ein Fehler? Wenn du mitteilen würdest, was genau dein Problem ist, könnte man auch besser helfen. Z.b. wie lautet die Fehlermeldung?
 
Doch - ich habe mir den Artikel angeschaut. Allerdings wird bei den Gegenmaßnahmen gar nicht auf die Übergabe per GET eingegangen? Ist das trotzdem Analog und ich müsste auch nur das .mysql_real_escape_string vor mein GET in der SQL Abfrage einbauen ?

Fehlermeldung lautet
Code:
[/COLOR]
[COLOR=black][B]Parse error[/B]: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in [B]/www/htdocs/w00d131f/Formular_Suchergebniss.php[/B] on line [B]43[/B][/COLOR]
[B][COLOR=black]
[/B]
 
Ob GET oder POST ist in dem Fall unerheblich, dass Problem ist das was beim sql Server ankommt, wenn du nicht die Kontrolle darüber hast, kann der Anwender damit viel Schindluder treiben.

und die Zeile 43 ist was?
 
Ok. Dann werde ich das abändern. Ist ja kein alzugroßer Aufwand ;)

Die Zeile 43 ist :
Code:
echo "  <td><a href=\"Formular_Bearbeiten.php?id=\" . $ausgabe['id'] \">edit</a>";
 
Die Zeile ist nach meinem Verständnis formal richtig, aber ich bin nicht der PHP Experte. Offensichtlich hat PHP hier Probleme beim interpolieren.

Der Ansatz sieht mir auch danach aus, als ob du das gar nicht willst, sondern die Zeichenketten zusammenfügen. Dann könntest du dir auch das maskieren sparen.

Also in etwa so:

PHP:
echo '<a href="Formular_Bearbeiten.php?id="' . $ausgabe['id'] . '">edit</a>';
 
Ich will im Grunde nur die ID in das Nachfolgende Formular "Formular_Bearbeiten" übernehmen und dort weiterverwenden können. Wenn ich nun deinen Code so nutze, ist zwar der Fehler weg - allerdings wird die ID nicht mit übernommen. Ich lande damit auf der Page : .../Formular_Bearbeiten.php?id=
 
Habs hinbekommen.
Deins
Code:
<a href="Formular_Bearbeiten.php?id="' . $ausgabe['id'] . '">edit</a>
So läufts
Code:
<a href=\"Formular_Bearbeiten.php?id=" . $ausgabe['id'] . "\">edit</a>
 
Stimmt da war ein Fehler von mir drin, ein Anführungszeichen zuviel.
Aber du solltest wirklich lieber die einfachen Anführungszeichen verwenden, ist einfacher und übersichtlicher:

PHP:
echo '<a href="Formular_Bearbeiten.php?id=' . $ausgabe['id'] . '">edit</a>';
 
Zurück
Oben