1.5k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo ich habe mir ein Formular angelegt,

<form method="post" action="eintragen2.php">
<input type="text" name="geburtsdatum" value="Geburtsdatum">
<br>
<input type="text" name="mobilnummer" value="Mobilnummer">
<br>
<input type="text" name="artikelnummer" value="Artikelnummer">
<br>
<input type="submit">
</form>


mit welchem ich die Daten in eine DB eintragen möchte.
Die eintragen.php sieht so aus:

<?

include ('dbconnect.php');


// Aufbau des SQL-Statements aus den Formularfeldern
$sql = "INSERT INTO daten (geburtsdatum, mobilnummer,
artikelnummer) VALUES ('$geburtsdatum', '$mobilnummer',
'$artikelnummer')";
$result = mysql_query($sql);

// Anzeigen des Primaerschluessels des neuen Datensatzes
echo "neue ID:", mysql_insert_id(), "<br>";
echo $sql,"<br>";

// MYSQL-Fehlermeldungen ausgeben:
if(!$result)
echo "fehler: ",mysql_error(),"<br>";
else
echo "$geburtsdatum $mobilnummer wurde erfolgreich in die
Datenbank eingetragen!";


?>


Nach dem Abschicken wird zwar jeweils ein neuer Datensatz
eingefügt, welcher jedoch leer ist. Wo liegt der Fehler?

3 Antworten

0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Unter aktuellen PHP-Installationen stehen die Formularwerte nur mehr in den Arrays $_GET (für Parameter aus der URL bzw. per method="get" abgeschickte Formulare) und $_POST (für per POST abgeschickte Formulare).

Wenn du deinen Code wie folgt erweiterst, müßte es funktionieren:

<?php

include ('dbconnect.php');

$geburtsdatum = mysql_real_escape_string( $_POST['geburtsdatum'] );
$mobilnummer= mysql_real_escape_string( $_POST['mobilnummer'] );
$artikelnummer= mysql_real_escape_string( $_POST['artikelnummer'] );

// Aufbau des SQL-Statements aus den Formularfeldern
$sql = "INSERT INTO daten (geburtsdatum, mobilnummer,
artikelnummer) VALUES ('$geburtsdatum', '$mobilnummer',
'$artikelnummer')";
$result = mysql_query($sql);

// Anzeigen des Primaerschluessels des neuen Datensatzes
echo "neue ID:", mysql_insert_id(), "<br>";
echo $sql,"<br>";

// MYSQL-Fehlermeldungen ausgeben:
if(!$result)
echo "fehler: ",mysql_error(),"<br>";
else
echo "$geburtsdatum $mobilnummer wurde erfolgreich in die
Datenbank eingetragen!";
?>


Das "mysql_real_escape_string()" dient dazu, Zeichen die in (my)SQL eine besondere Bedeutung haben aus den eingegebenen Formularwerten zu filtern, um sogenannte "SQL Injections" zu verhindern.
0 Punkte
Beantwortet von Einsteiger_in (43 Punkte)
Vielen Dank, der Eintrag in die DB klappt jetzt!

Ich habe dazu noch eine Frage:

Ich habe mir vorher den Wert "artikelnummer" per URL und
GET über einen Link

http://.../eintragen.php?
artikelnummer=1111111111111&bestelldatum=29.08.2011

in eine andere Tabelle eintragen lassen, mit diesem kleine Skript:

<?php
include("dbconnect.php");


$artikelnummer = $_GET["artikelnummer"];
$bestelldatum = $_GET["bestelldatum"];


$eintragen = mysql_query("INSERT INTO nummern (artikelnummer,
bestelldatum) VALUES ('$artikelnummer', '$bestelldatum')");
?>
welches auch funktioniert.

Darunter könnte ich nun das oben genannte Formular einfügen.

<form method="post" action="eintragen2.php">
<input type="text" name="geburtsdatum" value="Geburtsdatum">
<br>
<input type="text" name="mobilnummer" value="Mobilnummer">
<br>
<input type="submit">
</form>


Wie muss ich den Code des ersten Skriptes anpassen, damit ich
den bereits mit GET erhaltenen Wert "artikelnummer" für die zweite
Tabelle "daten" weiterverarbeiten kann, ohne dass man diesen im
Formular erneut eingeben muss?
0 Punkte
Beantwortet von
<input type="hidden" value="<?php echo $artikelnummer ?>">
an entprechender Stelle im Formular einfügen.
...