Mit einem PHP-Formular die Daten einer MSSQL DB ändern
Hallo,
Folgendes stört mich an meinen PHP Seiten.
Ich habe da ein Formular wo ich die Daten von einer MSSQL DB auslese.
Dann gehe ich mit der Maus auf eine Zeile und mit einem link werden die Daten von dieser
Zeile auf einer ander Seite angezeigt. So:
href='../details.php?auswahl=" . $dsatz["Schluessel"] . "'
Auf der Seite details.php hat man dann die Möglichkeit auf einem Knopf die Daten
auf eine andere Seite zu schicken und dann verändern. So:
onclick=self.location.href='auftrag_aendern.php?auswahl=" . $_GET['auswahl']."'
Bis dahin ist das ja gut so. Aber wenn ich jetzt die Daten verändert habe und dann auf OK klicke geht das wieder auf eine Seite
wo dann das update auf die DB gemacht wird. So:
method='post' action='auftrag_aendern1.php'
$sql = "UPDATE Ergebnisse SET.......
Kann man das nicht irgendwie so machen das das gleich auf der Seite wo die Daten verändert werden, beim OK klicken
auch gleich in die DB geschrieben wird?
Oder habt ihr einen guten Link im Netz wo man das gut nachlesen kann?
Danke.
Gruß
Helmut
Folgendes stört mich an meinen PHP Seiten.
Ich habe da ein Formular wo ich die Daten von einer MSSQL DB auslese.
Dann gehe ich mit der Maus auf eine Zeile und mit einem link werden die Daten von dieser
Zeile auf einer ander Seite angezeigt. So:
href='../details.php?auswahl=" . $dsatz["Schluessel"] . "'
Auf der Seite details.php hat man dann die Möglichkeit auf einem Knopf die Daten
auf eine andere Seite zu schicken und dann verändern. So:
onclick=self.location.href='auftrag_aendern.php?auswahl=" . $_GET['auswahl']."'
Bis dahin ist das ja gut so. Aber wenn ich jetzt die Daten verändert habe und dann auf OK klicke geht das wieder auf eine Seite
wo dann das update auf die DB gemacht wird. So:
method='post' action='auftrag_aendern1.php'
$sql = "UPDATE Ergebnisse SET.......
Kann man das nicht irgendwie so machen das das gleich auf der Seite wo die Daten verändert werden, beim OK klicken
auch gleich in die DB geschrieben wird?
Oder habt ihr einen guten Link im Netz wo man das gut nachlesen kann?
Danke.
Gruß
Helmut
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167449
Url: https://administrator.de/forum/mit-einem-php-formular-die-daten-einer-mssql-db-aendern-167449.html
Ausgedruckt am: 22.04.2025 um 11:04 Uhr
17 Kommentare
Neuester Kommentar
Ja das geht.
Du hast dort ja dein Formular. Dort musste dann beim action einfach leer lassen, das reicht. PHP_SELF geht auch, aber nichts zu schrieben geht schneller ;)
Dann musst du dein Code auf der Seite ergänzen wo du deine Daten ausgibst.
In etwa so:
Du hast dort ja dein Formular. Dort musste dann beim action einfach leer lassen, das reicht. PHP_SELF geht auch, aber nichts zu schrieben geht schneller ;)
Dann musst du dein Code auf der Seite ergänzen wo du deine Daten ausgibst.
In etwa so:
// Dassteht ganz oben auf deiner Seite
if(isset($_POST)) {
// Alles was hier steht wird nur ausgeführt wenn du ein Formular absendest
// Nicht vergessen hier noch die übergebenen Werte auf richtigkeit zu überprüfen
// z.b. is_numeric etc wenn es numerische Werte sind wie z.B. die ID, hängt von deinem Formular ab.
$ID = (!empty($_POST['ID']) && is_numeric($_POST['ID'])) ? (int)$_POST['ID'] : 0;
// Wenn du die Werte überprüft hast kannste deinen SQL Befehl ausführen für das Update.
$sql = "UPDATE Ergebnisse SET....... WHERE id=".$ID.";
}
// Hier Kommt dann dein ursprünglicher Code wo die Daten ausgegeben wird
// deine Formulare etc.
Wie wir schon sagten musst du bei "form" den action einfach leer lassen also so action="". Das genügt.
Dadurch landest du auf der gleichen Seite wieder wo du das Formular abgesendet hast.
Die Fehlermeldung sagt das das du nicht sauber programmiert hast und nicht die Eingaben vorher geprüft hast.
Du musst natürlich die Eingabe prüfen. Da ich aber nicht weiß was in $_POST['auswahl'] stehen kann bzw. darf kann ich dir dabei nicht helfen.
Eine richtige Validierung der Eingaben könnte so aussehen wie wir es dir in den Beiträgen vorher schon einmal gezeigt haben. Die Systematik bleibt gleich.
Ich mache das immer so wie ich es oben beschrieben habe.
Dadurch landest du auf der gleichen Seite wieder wo du das Formular abgesendet hast.
Die Fehlermeldung sagt das das du nicht sauber programmiert hast und nicht die Eingaben vorher geprüft hast.
nicht
if(isset($_POST['auswahl'])) {
schreiben.
Kann man auch, finde ich aber doppelt gemoppelt.if(isset($_POST['auswahl'])) {
schreiben.
Du musst natürlich die Eingabe prüfen. Da ich aber nicht weiß was in $_POST['auswahl'] stehen kann bzw. darf kann ich dir dabei nicht helfen.
Eine richtige Validierung der Eingaben könnte so aussehen wie wir es dir in den Beiträgen vorher schon einmal gezeigt haben. Die Systematik bleibt gleich.
Ich mache das immer so wie ich es oben beschrieben habe.
ini_set("diplay_errors",1);
error_reporting(E_ALL);
if(isset($_POST)) {
// Alles was hier steht wird nur ausgeführt wenn du ein Formular absendest
// Nicht vergessen hier noch die übergebenen Werte auf richtigkeit zu überprüfen
// z.b. is_numeric etc wenn es numerische Werte sind wie z.B. die ID, hängt von deinem Formular ab.
$ID = (!empty($_POST['ID']) && is_numeric($_POST['ID'])) ? (int)$_POST['ID'] : 0;
$auswahl = (isset($_POST['auswahl'])) ? $_POST['auswahl'] : 0;
// Wenn du die Werte überprüft hast kannste deinen SQL Befehl ausführen für das Update.
$sql = "UPDATE Ergebnisse SET....... WHERE id=".$ID.";
}
// Hier Kommt dann dein ursprünglicher Code wo die Daten ausgegeben wird
// deine Formulare etc.
Zitat von @helmuthelmut2000:
Hallo,
Also das geht jetzt bei mir aber ich bekomme immer noch die Fehlermeldungen:
Notice: Undefined index: Auftrag in C:\....\auftrag_aendern.php on line 291
Notice: Undefined index: Kuftrag in C:\....\auftrag_aendern.php on line 291
usw.
Weis noch jemand woran das liegen könnte?
Ja, du tust die Eingaben nicht validieren!Hallo,
Also das geht jetzt bei mir aber ich bekomme immer noch die Fehlermeldungen:
Notice: Undefined index: Auftrag in C:\....\auftrag_aendern.php on line 291
Notice: Undefined index: Kuftrag in C:\....\auftrag_aendern.php on line 291
usw.
Weis noch jemand woran das liegen könnte?
Dein Script ist unsauber programmiert und auch noch extrem unsicher.
Ich dachte du willst das nicht mehr über \auftrag_aendern.php machen? Warum wird die dann noch aufgerufen?
Zeig am besten mal die gesamten Code damit ich weiß wie es nun aussieht.
Validieren heißt das du ALLE Eingaben die nicht von deinem Server stammen also Benutzereingaben wie Formulare müssen vorher überprüft werden.
Z.B. so
Dann lies dir auch mal das durch, ist sehr wichtig: http://www.inside-php.de/tutorial/PHP-Sicherheit-13/SQL-Injections-verm ...
Validieren heißt das du ALLE Eingaben die nicht von deinem Server stammen also Benutzereingaben wie Formulare müssen vorher überprüft werden.
Z.B. so
$ID = (!empty($_POST['ID']) && is_numeric($_POST['ID'])) ? (int)$_POST['ID'] : 0;
$auswahl = (isset($_POST['auswahl'])) ? $_POST['auswahl'] : 0;
Dann lies dir auch mal das durch, ist sehr wichtig: http://www.inside-php.de/tutorial/PHP-Sicherheit-13/SQL-Injections-verm ...
Zuerst einmal verwende bitte die entsprechenden < code> Tags, dadurch bleibt es leserlich.
Ich habe es kurz für dich sortiert, du MUSST da jetzt noch folgendes ändern, dass musst du selber lernen sonst bringt es dir nichts.
Ich habe es kurz für dich sortiert, du MUSST da jetzt noch folgendes ändern, dass musst du selber lernen sonst bringt es dir nichts.
ini_set("diplay_errors",1);
error_reporting(E_ALL);
if(isset($_POST))
// Daten Updaten
$db_link=mssql_connect(MSSQL_HOST,MSSQL_USER,MSSQL_PASS);
$select=mssql_select_db(MSSQL_DATABASE);
// Alle Parameter musst du vorher prüfen,
// So kannst du es auf jeden fall nicht stehen lassen
$sql = "UPDATE Ergebnisse SET Kunde='".$_POST['kunde']."', Bezeichnung='".$_POST['bezeichnung']."', Stueck='".$_POST['stueck']."', Eilt='".$_POST['eilt']."' WHERE Schluessel = '".$_POST['Schluessel']."'";
mssql_query($sql);
// keien prüfung ob der SQL Befehl erfolgreich war?
}
if (isset($_GET['auswahl'])){
// Daten auswählen
$db_link=mssql_connect(MSSQL_HOST,MSSQL_USER,MSSQL_PASS);
$select=mssql_select_db(MSSQL_DATABASE);
// $_GET['auswahl'] MUSST du vorher validieren!
// was ist wenn auf einmal in $_GET 'DROP xxx' drin steht? man kann durch diesen Fehler ganze Datenbanken von dir löschen!
$sql = "SELECT * from Ergebnisse WHERE Schluessel = '" . $_GET['auswahl']."' LIMIT 1;";
$res = mssql_query($sql);
$dsatz = mssql_fetch_assoc($res);
// Auch hier müsstest du erstmal prüfen ob der SQL Befehl überhaupt Datensätze zurück leifert
echo "<form class='yform columnar' id='addjob' name='addjob' method='post' action=''>";
echo "<div class='type-text'>";
echo "<label for='kunde'>Kunde</label>";
echo "<input value='" . $dsatz['Kunde'] . "' type='text' name='kunde' id='kunde' size='5' maxlength='3' />";
echo "</div>";
echo "<div class='type-text'>";
echo "<label for='bezeichnung'>Bezeichnung</label>";
echo "<input value='" . $dsatz['Bezeichnung'] . "' type='text' name='bezeichnung' id='bezeichnung' size='20' maxlength='18' />";
echo "</div>";
echo "<div class='type-text'>";
echo "<label for='stueck'>Stück</label>";
echo "<input value='" . $dsatz['Stueck'] . "' type='text' name='stueck' id='stueck' size='20' maxlength='6' />";
echo "</div>";
echo "<div class='type-check'>";
echo "<label>Eilt</label>";
$note = $dsatz['Eilt'];
{
if($note == 'Normal') {
echo "<input type='radio' name='eilt' value='Normal' id='eilt_normal' checked='checked' /><span class='abstand'>Normal</span>";
} else {
echo "<input type='radio' name='eilt' value='Normal' id='eilt_normal' /><span class='abstand'>Normal</span>";
}
}
$note = $dsatz['Eilt'];
{
if($note == 'Eilt') {
echo "<input type='radio' name='eilt' value='Eilt' id='eilt_eilt' checked='checked' /><span class='abstand'>Eilt</span>";
} else {
echo "<input type='radio' name='eilt' value='Eilt' id='eilt_eilt' /><span class='abstand'>Eilt</span>";
}
}
echo "<input type='radio' name='eilt' value='' id='eilt_frei1' /><span class='abstand'>Frei</span>";
echo "<input type='radio' name='eilt' value='' id='eilt_frei2' /><span class='abstand'>Frei</span>";
echo "</div>";
echo "<input type='hidden' name='Schluessel' value='" . $dsatz["Schluessel"] . "'>";
echo "<p align='center'> <input type='submit' value=' OK ' id='submit' onClick='return EingabenUeberpruefen();'> <input type=reset value= Abbruch onclick=self.location.href='index.php'></a></p>";
echo "</form>";
echo "<p> </p>";
}
mssql_close()
Geht schon, allerdings ist das nicht sicher.
-Javascript kann deaktiviert werden -> gar keine Prüfung
-Dein PHP Script kann aufgerufen werden ohne dein eigenes Formular zu verwenden -> JS wird ebefalls nciht aufgerufen.
Du MUSST alle Eingaben auf deinem Server also im PHP prüfen, nur das ist sicher. Davon abgesehen prüfst du dort nur auf die Länge. Eine Kundennummer wird wohl noch mehr erkennungsmuster haben als deren Länge (z.B. muss aus zahlen bestehen, fehlt bei dir).
-Javascript kann deaktiviert werden -> gar keine Prüfung
-Dein PHP Script kann aufgerufen werden ohne dein eigenes Formular zu verwenden -> JS wird ebefalls nciht aufgerufen.
Du MUSST alle Eingaben auf deinem Server also im PHP prüfen, nur das ist sicher. Davon abgesehen prüfst du dort nur auf die Länge. Eine Kundennummer wird wohl noch mehr erkennungsmuster haben als deren Länge (z.B. muss aus zahlen bestehen, fehlt bei dir).