Unerwünschte SQL Insert beim POST/GET.

Bei programmieren des Database-einzugs um die Daten in eine Tabelle hinzufügen anstosst vor uns den Vorgang des unerwünschtes Dateneinzugs in die Tabelle. Diess kann mann beobachten bei die Seiteerfrischung, die die Formullar-ellemente enthält. Da die Daten in diese Formullar- ellemente anggebene an den Web-server mit die Metode POST übermittelt sind, werden wir zu eine wiederholte Daten-sendung auffordern, oder zu die Sendung Ablehnung, jedoch bei die GET Methode werden die Daten automatisch widerholt, weil alle die übergebene Parametern sich gefunden in die Eingabezeile des Web-beschauers, zu der URL angeknüpft.
Die folgende Tabelle enthalt die vier letz eingegebene Eingaben. Diesse Daten sollen nur nach dem drücken die Taste 'Speichern' in die Tabelle hinzufügen werden. Wenn Sie diesse Taste einmahl drücken, wird die Eingabe von das Text-feld vie die Tabelle letzte Zeile hinzufügt, was können wir leicht mit Beobachtung die Nummer in die Spalte ID entdecken, welche ist mit die SQL Dabase automatisch generiert und garantirt einmalig ist. Weiter wollen wir die Taste 'Speichern' nicht ausnutzen, aber, wir die Seite erfrischen, zum Beispiel mit hilfe des Auswahlmenus durch die rechte Mausetaste aufgeruftete. Wir können dann feststellen, das die Daten von das Text-feld sind wieder vie die Tabelle letzte Zeile hinzufügt, was natürlich unerwünscht ist.

IDText
311Podatak æe biti pohranjen u tablici nakon pritisnuæa tipke 'Spremiti'.
312Podatak æe biti pohranjen u tablici nakon pritisnuæa tipke 'Spremiti'.
313Podatak æe biti pohranjen u tablici nakon pritisnuæa tipke 'Spremiti'.
314Podatak æe biti pohranjen u tablici nakon pritisnuæa tipke 'Spremiti'.

Wie Sie selbst können feststellen, wen Sie für die Daten Hinzufügung asnützen die volgende Taste 'Speichern', wird die Eingabe von das Text-feld vie die Tabelle letzte Zeile nur nach dem drücken von diesse Taste hinzufügt, bei nachfolgendem Seiteerfrüschung aber nicht.


Weter wird eine Lösung gebracht, die behindert die unerwünschte Hinzufügegung von Daten zu die Database-tabelle. Sie wird mit hilfe die Skriptsprache PHP4 beschreiben, aber gleicherweise könnte sie auch mit Java oder andere Programmsprachen gelöst sein.
Wie war diesses Ziel erreicht? Erstens wird die Variable Anwesenheit ausgewertet, die sich in den Formullarkörper findet, bestens einsam die Taste 'Speichern'. Weil alle Variablen sind im Grunde dabei auch bei nachfolgendem Seiteerfrischung wie die URL parametern, welche ist notwendig entfernen, und das im Anschluss von dem Daten Hinzufügung mussen wir einen Web-sever Aufruf für diesse Seite widerholen, aber jetzt ohne der Name und Wert die ausgewertete Variable. Hier sind die Fragmenten von der Quellkode in PHP4 (und mit PHPLIB ausnützung):

<?php

// die Formullar-variable Anwesenheit ausgewertung
if (isset($save2)) {
 $daten2 = addslashes(trim($daten2));
 $db->query("INSERT INTO manuals1 (txt) VALUES('$daten2')");
 // widerholene Anforderung an die Seite Umgezeichnung ohne die Parametern
 header("Location: ../cz/cz_dbInsert.php");
}

.
.
.

<center>
<table border="0" cellspacing="1" cellpadding="0">
<tr>
<td class="tabid">ID</td>
<td class="tabtxt">Text</td>
</tr>
<?

$db->query("SELECT * FROM manuals1 ORDER BY Id");

while ($db->next_record()) {

?>
<tr>
<td class="tabid"><? echo $db->f("Id"); ?></td>
<td class="tabtxt"><? echo stripslashes($db->f("txt")); ?></td>
</tr>
<?

}

?>
</table>
<form method="GET" action="../cz/cz_dbInsert.php" target="body">
<!-- Variable $save2 in dem Formullarkörper -->
<input type="submit" name="save2" value="Speichern" id="submit">
<input type="text" name="daten2" value="Diesse Daten .... Taste 'Speichern'.">
</form>
</center>

?>
Wie klar ist, die Daten Hinzufügegung zu die Database-tabelle vorgeht ihre auszeichnung an der Seite. Es ist auch passend die gewünschte Variable Anwesenheit testen gleich am Anfang von der Skript, jedoch von die Seite auszeichnung. Hiermit vekürtzen wir die alle notwendigen Zeiten und das ganze Vorgang sieht dann aus Einheitlich. Wier müssen nur aufpassen, das beim wiederholenem Serveraufruf wir die getestete Variable aus die übertragene Parametern sperren aus. In diessen Beispiel sind keine Parametern in URL an Web-server eingesenden! Sonst erreichen wir nur den unkontrollierbare Serveraufruf wiederholung, und dadurch auch unvollendete Scriptlauf, ohne die Rücksicht an die Server, Beschauer und Netz Überlastung.
© 2003 Djordje Zurovac, alle Rechte vorbehalten.