PHP Keine Weitergabe der Werte eines Formulars.

toxic189

Lieutenant
Registriert
Jan. 2012
Beiträge
774
Hallo Leute,

Ich habe mal wieder ein Problem bei dem ich momentan ein wenig hänge.
Vlt habe ich einfach etwas vertauscht und darum funktioniert mein Code nicht.

Ich möchte via Button weitergeleitet werden auf eine Seite in dem ich einen neuen Datensatz hinzufügen kann (In die Datenbank)

Habe ein Formular erstellt und gebe die Daten per POST weiter zumindest ist das so vorgesehen.

Anschließend gebe ich die Daten ein und diese sollten dann via INSERT in die Datenbank geschrieben werden.

Das Problem das ich habe, er gibt keine Daten weiter das heißt ich bekomme zwar ein neuen Datensatz angezeigt in der Datenbank, doch außer bei dem Datum das er als Platzhalter verwendet sind keine Daten eingetragen worden. (Siehe Bild)

problem.jpg



Mein Formular sieht wie folgt aus:

PHP:
<html>
<head>
    <title></title>
</head>
<body>
<form action="eintragen.php" action="POST"/>
Auftragsnummer: <input type="text" name="1"/><br/>
Kundennummer: <input type="text" name="2"/><br/>
Bestelldatum: <input type="text" name="3"/><br/>
Firma: <input type="text" name="4"/><br/>
Lieferdatum: <input type="text" name="5"/><br/>
Lagerbestaetigung: <input type="text" name="6"/><br/>
Mitarbeiter: <input type="text" name="7"/><br/>
Versanddatum: <input type="text" name="8"/><br/>
Erledigt: <input type="text" name="9"/><br/>
Notiz: <input type="text" name="10"/><br/>
KFZ-Nummer: <input type="text" name="11"/><br/>
<input type="submit" value="Absenden"/>
</form>
</body>
</html>


Der PHP Code sieht wie folgt aus:

PHP:
<?php
include 'ini.db.php';
$Auftragsnummer = $_POST['1'];
$gruppen_id = $_POST['2'];
$Bestelldatum = $_POST['3'];
$username = $_POST['4'];
$Lieferdatum = $_POST['5'];
$Lagerbestaetigung = $_POST['6'];
$Mitarbeiter = $_POST['7'];
$Versanddatum = $_POST['8'];
$Erledigt = $_POST['9'];
$Notiz = $_POST['10'];
$KFZ = $_POST['11'];


    $sql = 'INSERT INTO auftrag (Auftragsnummer, gruppen_id, Bestelldatum, username, Lieferdatum, Lagerbestaetigung, Mitarbeiter, Versanddatum, Erledigt, Notiz, KFZ) VALUES ("'.$Auftragsnummer.'", "'.$gruppen_id.'", "'.$Bestelldatum.'", "'.$username.'", "'.$Lieferdatum.'",
"'.$Lagerbestaetigung.'", "'.$Mitarbeiter.'", "'.$Versanddatum.'", "'.$Erledigt.'", "'.$Notiz.'", "'.$KFZ.'")';
    $eintragen = mysql_query($sql) or die("Fehler: ".mysql_error());
    echo 'Der Eintrag war erfolgreich';

echo '<a href="tabelle-bearbeiten.php">Zurück</a>';
?>
 
Trag in die HTML Name-Attribute mal gescheite Bezeichner (Strings) ein, sonst gib das irgendwann Chaos, das garantier ich dir ;)
Aber eigentlich müsste es auch so funzen.

Ich denke, dass Sicherheit gegen Angreifer hier kein Thema ist, oder?

//edit:
Okay, mein Vorposter hats entdeckt^^
 
Danke für die Prompte Antwort :)

Also das mit "mehtod="POST" ist mir ja schon fast peinlich :D
Habe ich direkt geändert.


Um die SQL Injection weis ich bescheid, aber darum soll es überhaupt nicht gehen es geht nur darum das es funktioniert erstmal :D
Die Name-Attribute habe ich bessere namen gegeben, dennoch möchte es nicht funktionieren


PHP:
<html>
<head>
    <title></title>
</head>
<body>
<form action="eintragen.php" method="POST"/>
Auftragsnummer: <input type="text" name="Auftragsnummer"/><br/>
Kundennummer: <input type="text" name="gruppen_id"/><br/>
Bestelldatum: <input type="text" name="Bestelldatum"/><br/>
Firma: <input type="text" name="username"/><br/>
Lieferdatum: <input type="text" name="Lieferdatum"/><br/>
Lagerbestaetigung: <input type="text" name="Lagerbestaetigung"/><br/>
Mitarbeiter: <input type="text" name="Mitarbeiter"/><br/>
Versanddatum: <input type="text" name="Versanddatum"/><br/>
Erledigt: <input type="text" name="Erledigt"/><br/>
Notiz: <input type="text" name="Notiz"/><br/>
KFZ-Nummer: <input type="text" name="KFZ"/><br/>
<input type="submit" value="Absenden"/>
</form>
</body>
</html>


PHP:
 <?php
include 'ini.db.php';
$Auftragsnummer = $_POST['Auftragsnummer'];
$gruppen_id = $_POST['gruppen_id'];
$Bestelldatum = $_POST['Bestelldatum'];
$username = $_POST['username'];
$Lieferdatum = $_POST['Lieferdatum'];
$Lagerbestaetigung = $_POST['Lagerbestaetigung'];
$Mitarbeiter = $_POST['Mitarbeiter'];
$Versanddatum = $_POST['Versanddatum'];
$Erledigt = $_POST['Erledigt'];
$Notiz = $_POST['Notiz'];
$KFZ = $_POST['KFZ'];


    $sql = 'INSERT INTO auftrag (Auftragsnummer, gruppen_id, Bestelldatum, username, Lieferdatum, Lagerbestaetigung, Mitarbeiter, Versanddatum, Erledigt, Notiz, KFZ) VALUES ("'.$Auftragsnummer.'", "'.$gruppen_id.'", "'.$Bestelldatum.'", "'.$username.'", "'.$Lieferdatum.'",
"'.$Lagerbestaetigung.'", "'.$Mitarbeiter.'", "'.$Versanddatum.'", "'.$Erledigt.'", "'.$Notiz.'", "'.$KFZ.'")';
    $eintragen = mysql_query($sql) or die("Fehler: ".mysql_error());
    echo 'Der Eintrag war erfolgreich';

echo '<a href="tabelle-bearbeiten.php">Zurück</a>';
?>
 
Meldet dein Script ein Erfolgreich oder einen SQL Fehler? Lass dir doch mal per echo das zusammengebaute Statement ($sql) anzeigen.


Und ein Script mit solchen Sicherheitsproblemen würd ich nie als funtkionierend bezeichnen ;-)
 
Er meldet ein Erfolgreich, kein SQL fehler.

Was meinst du mit
Lass dir doch mal per echo das zusammengebaute Statement ($sql) anzeigen.

Ja das ist mir klar :D aber wie gesagt es ist nur für mich Privat möchte mir später was aufbauen und dann gehts erstmal in erste Linie um die Funktion und nicht um die Sicherheit. :)
 
Einfach vor Zeile 18 ein "echo $sql;" einfügen.


Prepared Statements sind aber ne recht bequeme Sache wenn manns mal kennt und umegehen das Problem automatisch, da Statement und Parameter getrennt werden (das Escaping wird automatisch von der API übernommen)
 
So warum auch immer, aber habe den Cache mal geleert und nun macht er es sauber :D

Vielen Lieben Dank leute :)


@Jesterfox Vielen dank für den Tip :))
 
Jaja, der liebe Browsercache... :)

Zum Thema Sicherheit kann ich dir aus eigener Erfahrung nur raten, von Anfang an zumindest grundlegende Technicken (wie etwa prepared statements) anzuwenden. "Irgendwann später" baust du das eh nicht mehr ein, weil...:
  • ... du lieber noch eben schnell eine neue Funktion umsetzt
  • ... du keine Lust hast, das was funktioniert nach dem Umbau nochmal ausgiebig zu testen
  • ... das skript ja eh nur "für dich" ist... bis dir für ein öffentliches Projekt einfällt: "sowas hab ich doch schonmal gebaut..."
  • ... und so weiter.

Auf solch eine Weise hat ein Kumpel mal dafür gesorgt, dass mein Webspace vom Anbieter gesperrt wurde, weil jemand über ein "nur-für-mich-skript-das-auf-mysteriöse-weise-online-gelandet-ist-was-sich-niemand-erklären-kann" den Webserver lahmgelegt hatte ;)
 
@KillerCow

wenn ich darüber nachdenke hast du recht.
Dann stell ich mir die frage ist es kompliziert dies jetzt sauber so umzustrukturieren das es dann auch "sicher" ist (PDO mysqli)
Habe damit leider noch keine erfahrung, in der Berufsschule bekommen wir es leider noch so erklärt wie ich es momentan mache.
 
Das Grundkonzept ist mit mysqli nicht viel anders, man muss halt nur die Aufrufe anpassen, schon beim Aufbau der Datenbankverbindung.

Die Statements bestehen dann nur noch aus dem Text mit generischen Platzhaltern und die Parameter selbst werden dann zusammen mit dem SQL-String an die Query-Methode übergeben.
 
Ich würds gleich mit der PDO-Erweiterung machen. PHP hat doch so gute Manuals:
http://www.php.net/manual/de/pdo.prepared-statements.php

Und weise doch deine(n) Berufschullehrer(in) mal darauf hin, dass er/sie Praktiken lehrt, die seit Jahren überholt sind. Mit freundlichen Grüßen aus dem CB Forum :D
 
Und je nachdem was du vorhast evtl gleich mal ein paar Frameworks wie symfony oder laravel angucken. Denn warum eigenen Code schreiben wenns den schon fertig dokumentiert und mit Test Cases gibt ...
 
Ggf., weil man mit einem fertigen Framework nicht lernt, wie die Sache eigentlich funktioniert ... :)

OT: Laravel... *grusel* da kann man ja fast ZF2 in den Raum werfen :)
 
blablub1212 schrieb:
Und je nachdem was du vorhast evtl gleich mal ein paar Frameworks wie symfony oder laravel angucken. Denn warum eigenen Code schreiben wenns den schon fertig dokumentiert und mit Test Cases gibt ...

ein framework bietet aber auch genauso viele nachteile wie vorteile. zum lernen komplett ungeeignet.
 
Ich werf mal den gruselig umgesetzten IoC in den Raum ... wirklich schön ist anders. Das macht Aura hübscher.
 
Zurück
Oben