[PHP/MySQL] Frage

Ragazzo

Well-known member
ID: 206444
L
24 April 2006
692
49
Hi,

ich versuche zur Zeit ein neues Anmelde-Formular zu erstellen bei einem neuen Webprojekt, jedoch bekomme ich langsam eine Krise. Deshalb versuche ich es einmal hier, da hier erfahrene Leute sind!

Hier ersteinmal der Code, bei dem die Daten in der Datenbank gespeichert werden sollen:

PHP:
<?PHP
$datum=time();
mysql_query("INSERT INTO user (datum, anrede, vorname, nachname, strasse, hausnummer, plz, ort, land, email, telefon, tag, monat, jahr) VALUES ('$datum', '$anrede', '$_POST[vorname]', '$_POST[nachname]', '$_POST[strasse]', '$_POST[hausnummer]', '$_POST[plz]', '$_POST[ort]', '$_POST[land]', '$_POST[email]', '$_POST[telefon]', '$_POST[tag]', '$_POST[monat]', '$_POST[jahr]') ");
echo mysql_error();
?>

Ohne _POST habe ich es bereits auch versucht. Die Datenbank-Login-Daten sind included und <form> schaut so aus:

PHP:
<form name="anmelden" action="danke.php" method="post">
</form>

Die Felder, in denen der Teilnehmer seine Daten einfügen soll, sollten richtig sein mit <input type="text" name="blabla" size="30">

Und die Namen sind identisch mit den MySQL-Tabellen und dem ersten PHP-Code!

Hoffe jemand versteht was ich meine. Ist ein wenig schwer auszudrücken!

Freue mich auf Hilfe!
 
PHP:
'".$datum."'

und das mit allen Variablen. So wie du das jetzt hast, werden die Variablen nicht geparst.

Greetz

paddya
 
@paddy:
Danke, versucht, aber funktionierte nicht. Hätte mich ehrlich gesagt auch gewundert!

@flaschenkind:
Wenn eines der Felder nicht ausgefüllt wurde, soll später die Meldung "Bitte alles ausfüllen" oder sowas erscheinen.

PS: Übrigens wird das Datum gespeichert in MySQL bei einer Anmeldung, jedoch nicht die ganzen anderen Daten ;)

Weiß jemand Rat?
 
Hi,

...$_POST[vorname]
Ich würde es mal mit anführungszeichen probieren also :
PHP:
...$_POST["vorname"]
ansonsten initalisier die Variablen bevor du sie einträgst:

$vorname = $_POST["vorname"];
....usw

mfg Raze
 
Mit den "" funktioniert es auch nicht. Ich schreibe euch mal die ganze Datei jetzt hier rein, irgendwo muss ich nen Fehler machen :(

PHP:
<?
include("head.html");
include('db.php');
?>

<center><b><u><font color="blue">Anmeldung</font></u></b></center>
<br>
<form name="anmelden" action="danke.php" method="post">
<table width="100%">
	<tr>
		<td width="15%"></td>
		<td width="30%"></td>
		<td width="40%"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Anrede:</td>
		<td width="40%"><select name="anrede"><option value="Herr">Herr</option><option value="Frau">Frau</option></select></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Vorname:</td>
		<td width="40%"><input type="text" name="vorname" size="30"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Nachname:</td>
		<td width="40%"><input type="text" name="nachname" size="30"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Straße, Nr.:</td>
		<td width="40%"><input type="text" name="strasse" size="20"> <input type="text" name="hausnummer" size="10"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">PLZ / Ort:</td>
		<td width="40%"><input type="text" name="plz" size="10"> <input type="text" name="ort" size="20"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Land:</td>
		<td width="40%"><select name="land"><option value="Deutschland">Deutschland</option><option value="Schweiz">Schweiz</option><option value="Oesterreich">Österreich</option></select></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Email:</td>
		<td width="40%"><input type="text" name="email" size="30"></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td width="15%"></td>
		<td width="30%">Telefon:</td>
		<td width="40%"><input type="text" name="telefon" size="30"></td>
		<td width="15%"></td>
	</tr>
		<tr>
		<td width="15%"></td>
		<td width="30%">Geburtsdatum:</td>
		<td width="40%"><select name="tag"><option value="Tag">Tag</option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select>
		<select name="monat"><option value="Monat">Monat</option><option value="Januar">Januar</option><option value="Februar">Februar</option><option value="Maerz">März</option><option value="April">April</option><option value="Mai">Mai</option><option value="Juni">Juni</option><option value="Juli">Juli</option><option value="August">August</option><option value="September">September</option><option value="Oktober">Oktober</option><option value="November">November</option><option value="Dezember">Dezember</option></select>
		<select name="jahr"><option value="Jahr">Jahr</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option><option value="1912">1912</option><option value="1911">1911</option><option value="1910">1910</option><option value="1909">1909</option><option value="1908">1908</option><option value="1907">1907</option></select></td>
		<td width="15%"></td>
	</tr>
	<tr>
		<td colspan="4" align="center"><br>Mit dem Absenden dieses Formulars akzeptieren Sie die <a href="agb.php">Teilnahmebedingungen</a> von [noch Geheim]<br>
<br>
<input type="submit" name="weiter" value="Anmelden"></td>
	</tr>
</table>
</form>

<?PHP 
$datum=time(); 
mysql_query("INSERT INTO user (datum, anrede, vorname, nachname, strasse, hausnummer, plz, ort, land, email, telefon, tag, monat, jahr) VALUES ('$datum', '$_POST["anrede"]', '$_POST["vorname"]', '$_POST["nachname"]', '$_POST["strasse"]', '$_POST["hausnummer"]', '$_POST["plz"]', '$_POST["ort"]', '$_POST["land"]', '$_POST["email"]', '$_POST["telefon"]', '$_POST["tag"]', '$_POST["monat"]', '$_POST["jahr"]') "); 
echo mysql_error(); 
?>

<?
include("foot.html");
?>

In der db.php stehen meine Zugangsdaten zur Datenbank

Das ist mir schon fast peinlich, da das normalerweise das einfachste ist *gg* Aber ich verzweifele langsam wirklich daran und weiß nicht was ich falsch mache. Vielleicht kann jemand mal nachschauen und mir die Korrektur hier posten :) wäre echt nett ;)
 
Wenn du Hilfe suchst, warum nimmst du sie dann nicht an?

Dann lass dir die Query mal so ausgeben, und guck ob da alles korrekt ist.

Werden die Daten überhaupt richtig übergeben?
PHP:
var_dump($_POST);

Das sind doch zielführende Hinweise...

Ich schreibe euch mal die ganze Datei jetzt hier rein
Ähm, was genau meinst du jetzt mit "die ganze Datei"? Kann es sein, dass du hier direkt nach dem Formular bereits versuchst, die Daten wieder auszuwerten?!? Die Auswertung der POST-Variablen muss natürlich in der Datei erfolgen, die im "action"-Attribut der Form angegeben ist, also in deinem Fall in der "danke.php". Woher soll denn PHP schon wissen, was gepostet wird, wenn der Eintrag in die Datenbank schon bei der Anzeige des Formulars erfolgt...
 
Du solltest alle Benutzereingaben noch vor dem Eintragen in die DB prüfen lassen, z.B. mit mysql_real_escape_string().
Das könnte so aussehen:
PHP:
$strasse = mysql_real_escape_string($_POST['strasse']);

Und das Datum brauchst du nicht extra vorher in einer Variable speichern:
Code:
INSERT INTO user (datum, anrede, ...) VALUES (NOW(), $anrede, ...)

Wenn du die Daten auf Vollständigkeit/Sinn prüfen willst, dann solltest du das Formular sozusagen an sich selber schicken. Dabei hilft ein hidden-Feld:
HTML:
<input type="hidden" name="abgesendet" value="1">

Am Anfang der Datei checkst du, ob es abgesendet wurde. Und dann mußt du entweder das Formular anzeigen oder die Daten prüfen/eintragen (oder hier nochmal das Formular anzeigen). Mal sehen ob ich es grob beschrieben bekomme:
PHP:
// Dateianfang (z.B. Session starten, DB-Verbindung, ...)

// Abgesendet
if ($_POST['abgesendet']==1)
{
  // Formular wurde abgesendet
  // Die Daten prüfen
  $datenOK = 1; // Initialisieren
  $anrede = $_POST['anrede'];
  ...
  // Wenn irgendwas bei den Daten nicht stimmt, dann $datenOK auf 0 setzen

  if ($datenOK == 1) // Wenn die DAten ok sind
  {
   // In DB eintragen
   ...
   // Formular nicht anzeigen
   $zeigeForm = 0;
  }
  else
  {
    // Die Daten sind nicht ok, also Formular anzeigen
    $zeigeForm = 1;
  }

}
else
{
  // Formular wurde noch nicht abgesendet, also Formular anzeigen
  $zeigeForm = 1;
  $datenOK = 1; // Damit keine Fehlermeldung kommt

  // Alle Werte initialisieren
  $name = ""; // Nur als Bsp.
}

if ($zeigeForm == 1)
{
  // Formular anzeigen

  if ($datenOK == 0)
  {
     // Fehlermeldung Daten nicht ok
  }

}
else
{
  // Danke für ihren Eintrag ...
}
Mit etwas mehr Aufwand kann man auch für jedes einzelne abgesendet Element eine Fehlermeldung anzeigen.
Und im HTML-Formular-Teil musst du dann immer unter value den entsprechenden Wert angeben:
HTML:
<input type="text" name="vorname" size="30" value="<?php echo($vorname); ?>">
Das ist bei Auswahl-Boxen etwas aufwendiger, aber auch zu machen.