Daten in eingabefelder klappen nicht
Boubou
- php
0 frankx0 Vinzenz Mai0 Tom
Hallo alle zusammen hab da ein kleines Problem ich habe Inputfelder. Aus der DAtenbank heraus tut er die Daten in die Eingabefelder das klappt super.
So ich will aber nun wenn ich in den Eingabefeldern zb den Namen ändere auf Speichern klicke, dass er das auch in die Datenbank speichert macht er aber nicht. Hier der Code
if(isset($submit)) // Der Submitbutton ist schon da
{
$Anrede=$_POST['Anrede'];
$Name=$_POST['Name'];
$Vorname=$_POST['Vorname'];
$Email=$_POST['EMail'];
$ID=$_POST['Personalnr'];
Hier der MySQL Befehl:
$update= "Update tabelle SET Anrede ='$Anrede', Name = '$Name',
Vorname = '$Vorname', EMail = '$Email',
Personalnr = '$ID' WHERE Personalnr`= '$ID' ";
if (mysql_query($update))
{
echo("<script type="text/javascript">
window.opener.location.reload();self.close();</script>");
}
Hellihello
versuch doch schrittweise zu testen.
if(isset($submit)) // Der Submitbutton ist schon da
aha, wo ist denn $sumit = $_POST["submit"] und ist der Wert auch "true" nach Typenkonvertierung?
Dank und Gruß,
Hello,
versuch doch schrittweise zu testen.
if(isset($submit)) // Der Submitbutton ist schon da
aha, wo ist denn $sumit = $_POST["submit"] und ist der Wert auch "true" nach Typenkonvertierung?
Wäre ungewöhnlich, einen Absendebutton mit "0" zu beschriften, aber nicht unmöglich.
Es könnte ich schließlich um einen "Taschenrechner" handeln ;-))
Die Frage ist durchaus berechtigt. Die automatische Typkonvertierung und Validierung in PHP schickt einen manchmal schon in die Wüste...
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hellihello Tom,
Wäre ungewöhnlich, einen Absendebutton mit "0" zu beschriften, aber nicht unmöglich.
<button name="submit" value="">schickmichmitnull</button>
?
Fehlersuche issich hartes Brot und nicht selten muss man da suchen, wo mans nicht vermutet hätte?
Die Frage ist durchaus berechtigt. Die automatische Typkonvertierung und Validierung in PHP schickt einen manchmal schon in die Wüste...
Dank und Gruß,
Hello frankx,
<button name="submit" value="">schickmichmitnull</button>
Klar, das das kam. Ich habe es ja provoziert ;-)
Aber Du hast selbstverständlich Recht. Das ist der zweite Fall von wieviel?
NULL, 0, ' ', '', Parameter gar nicht vorhanden, ...
^
|
+--- wie war das?
Wie lang ist $_POST['string'],
wenn <input name="string" value=" " />
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
So ich will aber nun wenn ich in den Eingabefeldern zb den Namen ändere auf Speichern klicke, dass er das auch in die Datenbank speichert macht er aber nicht. Hier der Code
if(isset($submit)) // Der Submitbutton ist schon da
Woher denn? Ebenfalls mit dem überflüssigen und gefährlichen Umkopieren oder weil Du auf (hoffentlich nicht mehr) vorhandenes register_globals = on setzt?
{
$Anrede=$_POST['Anrede'];
$Name=$_POST['Name'];
$Vorname=$_POST['Vorname'];
$Email=$_POST['EMail'];
$ID=$_POST['Personalnr'];
Überflüssiges und gefährliches Umkopieren. Die Herkunft der Daten wird verschleiert. Weg damit!
Hier der MySQL Befehl:
$update= "Update tabelle SET Anrede ='$Anrede', Name = '$Name',
Vorname = '$Vorname', EMail = '$Email',
Personalnr = '$ID' WHERE Personalnr`= '$ID' ";
Ja klar. Völlig fehlerhaft. Offen für SQL-Injektion. Unfähig mit Namen wie O'Brien umgehen zu können - es sei denn, man verläßt sich auf das veraltete (und dämliche) PHP-Feature Magic Quotes.
Wenn man noch auf die veralteten mysql_*-Funktionen setzt, dann sollte man
a) ermitteln, ob die Magic Quotes aktiviert sind.
Wenn ja, deren Auswirkungen rückgängig machen.
(und zwar ein einziges Mal, gleich zu Skriptbeginn), damit ab PHP 6, wenn
es dieses Feature nicht mehr gibt, das Skript leicht anzupassen ist.
b) Beim Zusammensetzen der SQL-Anweisung mysql_real_escape_string auf die
Eingabedaten anwenden.
Besser wäre es, auf mysqli und Prepared Statements umzusteigen.
Freundliche Grüße
Vinzenz
Hello,
Wenn man noch auf die veralteten mysql_*-Funktionen setzt, dann sollte man
a) ermitteln, ob die Magic Quotes aktiviert sind.
Wenn ja, deren Auswirkungen rückgängig machen.
(und zwar ein einziges Mal, gleich zu Skriptbeginn), damit ab PHP 6, wenn
es dieses Feature nicht mehr gibt, das Skript leicht anzupassen ist.
Das klingt verwirrend.
Müssen die Magic Quotes nicht auf jeden Fall rückgängig gemacht werden, wenn ich meine Daten im Rohformat in der Datenbank speichern will? Das hat doch nichts mit mysqli_* oder mysql_* Funktionen zu tun und auch nichts mit prepared Statements oder Textschnittstelle?!? (<-Verwirrung)
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hoi!
Das klingt verwirrend.
Müssen die Magic Quotes nicht auf jeden Fall rückgängig gemacht werden, wenn ich meine Daten im Rohformat in der Datenbank speichern will? Das hat doch nichts mit mysqli_* oder mysql_* Funktionen zu tun und auch nichts mit prepared Statements oder Textschnittstelle?!? (<-Verwirrung)
Bin Perlianer und habe von PHP keine Ahnung, aber das dürfte hierbei irrelevant sein:
Sobald Du das "Statement prepared" hast, ist eine Betrachtung der potentiell bösen Daten hierbei hinfällig. Du kannst nur noch "Data injecten", "SQL injection" ausgeschlossen...
Einer der strukturellen Vorteilen von prepared Statements...
Grüße
echo $begrüßung;
Das klingt verwirrend.
Müssen die Magic Quotes nicht auf jeden Fall rückgängig gemacht werden, wenn ich meine Daten im Rohformat in der Datenbank speichern will? Das hat doch nichts mit mysqli_* oder mysql_* Funktionen zu tun und auch nichts mit prepared Statements oder Textschnittstelle?!? (<-Verwirrung)
Bin Perlianer und habe von PHP keine Ahnung, [...]
Es geht hierbei um das Thema Magic Quotes, ein Feature PHPs, das für sämtliche GET-, POST- und Cookie-Daten bereits die Zeichen ' (single-quote), " (double quote) und \ (backslash) mit einem Backslash versieht und das NUL-Byte zu \0 macht. Diese Verunstaltung, so dieses Feature nicht deaktiviert ist, muss generell rückgängig gemacht werden, nicht nur für den Fall dass man die alten mysql_*-Funktionen verwendet, sondern auch für die moderneren mysqli_*-Funktionen verwendet, egal, ob man da Prepared Statements verwendet oder mit mysqli_real_escape_string() arbeitet. Das war von Vinzenz nur unglücklich formuliert.
echo "$verabschiedung $name";
Moin!
Es geht hierbei um das Thema Magic Quotes, ein Feature PHPs,
Sorry, dann halte ich als Perler bei der nächsten PHP Frage doch besser mal die Fresse ;-)
Grüße