PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einige Fragen zu PHP/Datenbanken/Formularen



pogo
22.06.2004, 04:42
'Tach,

ich hab ein auf meiner homepage ein formular erstellt und möchte das sich das jetzt in eine datenbank einträgt. leider hab ich von php nur wenig und von MySQL gar keine ahnung...
also, die fragen:

1.wie trägt man passwort,radio und checkbox felder in die php-datei ein? (texte hab ich)
2.wie überträgt man die antworten dann von php in die MySQL Datenbank?
3.wenn man auf abschicken klickt, erscheint bis jetzt immer die ausgabe der php-datei. wie krieg ich das hin, das da eine meldung à la "Ihre Einträge wurden gespeichert" steht.(Im prinzip reicht 'ne weiterleitung auf eine formular-abgeschickt.htm)

so, das war's auch schon :D
ich hoffe ihr könnt mir helfen, denn das ist ganz wichtig für mich
Vielen Dank schonmal!

dread
22.06.2004, 05:04
Du legst erstmal mit "action" fest, wohin die Formulardaten übertragen werden soll und mit "method" wie sie übertragen werden.
Mit "method='get'" werden die Daten an die URL angehängt, was aber bei größeren Datenmengen zu Problemen führt, da die maximale Größe der URL 2 KB nicht überschreiten darf. Deswegen greift man zu "method='post'". Nehmen wir an, die willst die Formulardaten an die Datei eintragen.php übergeben.


<form action='eintragen.php' method='post'>
<input type='text' name='feld1'>
<input type='password' name='pw'>
<input type='submit' value='Abschicken' name='submit'>
</form>

Du kannst jetzt in der eintragen.php die Werte von feld1 und pw folgendermaßen ansprechen.


<?php
echo $_POST['feld1']." ".$_POST['pw']; // Oder $_GET['feld1'] und $_GET['pw'] wenn du method='get' gewählt hast.
?>

Das selbe gilt für Checkboxen und Radiobuttons, du musst nur den Wert für "name=''" setzen, damit du es ansprechen kannst über PHP. In dem Fall ist dann der Wert, der für "value=''" gesetzt wurde, dass was sich PHP holt.

Wenn du die Werte jetzt in deine Datenbank schreiben willst, sieht das ganze wie folgt aus in der eintragen.php.


<?php
mysql_connect ("HOST DES MYSQLSERVERS","USERNAME","PASSWORD");
mysql_select_db ("DATENBANK NAME");

$feld1 = $_POST['feld1'];
$pw = $_POST['pw'];

$insert = "INSERT INTO Tabellenname (Feldname1, Feldname2) VALUES ('$feld1','$pw')";
mysql_query($insert);
echo "Daten erfolgreich hinzugefügt"; // Oder du fügst hier eine Weiterleitung zu jeder beliebigen Seite ein.
?>

Schattenbaum (http://www.schattenbaum.net/php/) bietet ein nettes Tutorial für Anfänger in Sachen PHP und MySQL.

pogo
22.06.2004, 20:02
danke, hat soweit auch alles geklappt. nur nachdem ich noch mehr variablen in das php script eingefügt hab, funktioniert es nicht mehr. die datenbank bekommt keine neuen daten...

hier mal mein verändertes script:



<html>

<head>
<title>Ausgabe</title>
</head>

<body>

<?php
//hab ich weg gemacht, weil ichs da nich haben will. mit funzt es aber auch nicht: echo $_POST['Vorname']." ".$_POST['nachname']." ".$_POST['straße']." ".$_POST['hausnummer']." ".$_POST['plz']." ".$_POST['ort']." ".$_POST['nickname']." ".$_POST['mail']." ".$_POST['clan']." ".$_POST['clanpasswort'];

mysql_connect ("localhost","weserlanbrake","begulan");
mysql_select_db ("weserlanbrake");

$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$straße = $_POST['straße'];
$hausnummer = $_POST['hausnummer'];
$plz = $_POST['plz'];
$ort = $_POST['ort'];
$nickname = $_POST['nickname'];
$mail = $_POST['mail'];
$clan = $_POST['clan'];
$clanpasswort = $_POST['clanpasswort'];

$insert = "INSERT INTO anmeldeformular (Vorname, Nachname, Straße, Hausnummer, PLZ, Ort, Nickname, E-Mail, Clan, Clanpasswort) VALUES ('$vorname','$nachname','$straße','$hausnummer','$plz','$ort','$nickname','$mail','$clan','$clanpasswort')";
mysql_query($insert);

echo "Daten erfolgreich hinzugefügt";
?>


</body>

</html>



was ist daran falsch? oder muss ich die datenbank noch anders konfigurieren? also, die felder sind in der tabelle alle vorhanden, oder kann es daran liegen, das noch welche frei sind?

dread
22.06.2004, 20:17
Der Quellcode des Formulars wäre noch ganz gut.

Bei der $insert Variablen müssen die exakten Feldnamen der MySQL Tabelle angegeben werden, wenn sie dort klein geschrieben sind, musst du sie im PHP Script auch klein schreiben.

Ein Feld in der MySQL Datenbank solltest du ID nennen und es auf auto_increment setzen, damit hat jeder Datensatz eine eindeutige ID.

Wenn du allerdings sagst, dass die Ausgabe der $_POST Variablen nicht funktioniert, dann vermute ich, liegt es an der Übergabe vom Formular. Scheint so als ob das PHP Script keine Daten bekommt.

pogo
22.06.2004, 20:37
Der Quellcode des Formulars wäre noch ganz gut.



<form method=post action="anmeldung.php">
<tr><td><b><font size="4">Schritt 1: Persönliche Daten</font></b></td></tr>
<tr><td><br></td></tr>
<tr><td class="wichtig" colspan="2">Hier muss alles ausgefüllt werden. Anmeldungen, bei denen ein Eintrag fehlt, werden nicht angenommen!</td></tr>
<tr><td><br></td></tr>
<tr><td>Vorname: </td> <td><input type="text" name="vorname" size="30"></td></tr>
<tr><td>Nachname: </td> <td><input type="text" name="nachname" size="30"></td></tr>
<tr><td>Straße: </td> <td><input type="text" name="straße" size="30"></td>
<td>Hausnummer: </td> <td><input type="text" name="hausnummer" size="4" maxlength="3"></td></tr>
<tr><td><br></td></tr>
<tr><td>PLZ: </td> <td><input type="text" name="plz" size="6" maxlength="5"></td>
<td>Ort: </td> <td><input type="text" name="ort" size="20"></td></tr>
<tr><td><br></td></tr>
<tr><td>Nickname: </td> <td><input type="text" name="nickname" size="30"></td></tr>
<tr><td>E-Mail-Adresse: </td> <td><input type="text" name="mail" size="30"></td></tr>

<tr><td><br><br><br></td></tr>

<tr><td><b><font size="4">Schritt 2: Clans&Turniere</font></b></td></tr>
<tr><td><br></td></tr>
<tr><td class="wichtig" colspan="2">Hier muss nichts zwingend ausgefüllt werden. Eine nachträgliche Anmeldung zum Turnier ist jedoch nicht möglich! Falls bei Clan nichts eingetragen wird, teilen wir euch ein.</td></tr>
<tr><td><br></td></tr>
<tr><td>Clan: </td> <td><input type="text" name="clan" size="30"></td></tr>
<tr><td>Clanpasswort: </td> <td><input type="password" name="clanpasswort" size="10" maxlength="6"></td></tr>
<tr><td><br></td></tr>
<tr><td>Turniere: </td> <td><input type="radio" name="turniere" value="cs">Counterstrike 5on5</td></tr>
<tr><td>&nbsp;</td> <td><input type="radio" name="turniere" value="wc3">Warcraft 3: TFT 2on2</td></tr>
<tr><td>&nbsp;</td> <td><input type="radio" name="turniere" value="bf">Battlefield 1942 5on5</td></tr>

<tr><td><br><br><br></td></tr>

<tr><td><b><font size="4">Schritt 3: Akzeptieren&Abschicken</font></b></td></tr>
<tr><td><br></td></tr>
<tr><td class="wichtig" colspan="2">Es ist für die Anmeldung zwingend erforderlich, diese beiden Kästchen anzukreuzen!</td></tr>
<tr><td><br></td></tr>
<tr><td>&nbsp;</td> <td><input type="checkbox" name="akzeptiert" value="regeln">Ich akzeptiere hiermit <a href="infos.htm" target="blank">diese</a> Regeln und nehme die Informationen zur Kenntnis.</td></tr>
<tr><td>&nbsp;</td> <td><input type="checkbox" name="akzeptiert" value="veröffentlichen">Ich erkläre mich hiermit einverstanden, dass mein Vor-, Nach- und Nickname auf <a href="http://www.weser-lan-brake.de">Weser-LAN-Brake.de</a> in der Teilnehmerliste veröffentlicht wird.</td></tr>
<tr><td><br></td></tr>
<tr><td><input type="submit" value="Abschicken"></td> <td><input type="reset" value="Zurücksetzen"></td></tr>
<tr><td><br></td></tr>
<tr><td class="wichtig" colspan="2">Ihr erhaltet spätestens 1 Woche nach der Anmeldung eine Bestätigungsmail. Falls nicht, meldet euch nochmal bei <a href="mailto:bla@bla.bla">uns</a>.</td></tr>

</form>



Wenn du allerdings sagst, dass die Ausgabe der $_POST Variablen nicht funktioniert, dann vermute ich, liegt es an der Übergabe vom Formular. Scheint so als ob das PHP Script keine Daten bekommt.

doch, das bekommt daten. mit nicht funktionieren meinte ich nur, das das übermitteln an die datenbank nicht klappt, auch wenn die post variablen noch da stehen. ich hab die nur gelöscht, weil ich nicht möchte, das man nach dem abschicken nochmal seine einträge sieht...


Ein Feld in der MySQL Datenbank solltest du ID nennen und es auf auto_increment setzen, damit hat jeder Datensatz eine eindeutige ID.
wenn ich das mache, meldet MySQL: #1063 - Incorrect column specifier for column 'ID'

dread
22.06.2004, 20:42
Gut, dann ist der Fehler hinsichtlich Übergabe Formular -> PHP Script auszuschließen.

Dann tippe ich stark auf die falschen Feldnamen der MySQL Datenbank, wenn in der Datenbank z.B. das Feld "vorname" klein geschrieben wird, dann musst du an dieser Stelle


$insert = "INSERT INTO anmeldeformular (vorname, ...) VALUES ('$vorname', ...)";

das Feld mit dem exakten Namen (Groß- und Kleinschreibung beachten) ansprechen. Ansonsten überprüfen, ob Benutzername, Passwort und Datenbankname richtig sind.

pogo
22.06.2004, 20:54
eigentlich hab ich alles richtig geschrieben.


P.S.: Beachte auch meinen edit oben!

Latency
22.06.2004, 21:39
Hmpf.. leider kann ich dir nicht mehr helfen, außer dir zu sagen, dass du

echo mysql_error();
deinem Newsscript anhängen solltest, vielleicht gibt das genauere Informationen zum Fehler aus.

Achja, das

$vorname = $post['vorname'] kannst du dir sparen, da die Variablen automatisch unter $Variablenname abgespeichert werden. Zumindest bei meiner PHP-Version.

dread
22.06.2004, 23:10
Wie Latency schon gesagt hat, bau eine MySQL Fehlerausgabe ein, vielleicht liegt dort der Fehler.

Zu deinem ID Problem, der Datentyp sollte INT sein und auf UNSIGNED gesetzt werden, ausserdem ist Primärschlüssel von Vorteil für solch ein Feld.

Dingsi
23.06.2004, 00:05
Original geschrieben von Latency

$vorname = $post['vorname'] kannst du dir sparen, da die Variablen automatisch unter $Variablenname abgespeichert werden. Zumindest bei meiner PHP-Version.
Nein, um Gottes Willen. Das darf er sich nicht sparen. Erstens kann es zu Verwirrung führen und zweitens ist es eine Sicherheitslücke so zu scripten. Ich empfehle mit ausgeschalteten register_globals zu scripten, so werden Scripte automatisches ein kleines bisschen sicherer.

Ich kann das jetzt nicht genau erklären, bin net so gut in sowas, aber informiert euch am besten selber über register_globals und die daraus folgenden Sicherheitslücke. ô_ô.

Latency
23.06.2004, 00:45
Original geschrieben von Dingsi
Nein, um Gottes Willen. Das darf er sich nicht sparen. Erstens kann es zu Verwirrung führen und zweitens ist es eine Sicherheitslücke so zu scripten. Ich empfehle mit ausgeschalteten register_globals zu scripten, so werden Scripte automatisches ein kleines bisschen sicherer.

Ich kann das jetzt nicht genau erklären, bin net so gut in sowas, aber informiert euch am besten selber über register_globals und die daraus folgenden Sicherheitslücke. ô_ô. Ach dazu braucht man die Register globals. Ich wusste nur, dass ich sie aktivieren musste damit meine Include Scripte laufen, wozu ich sie brauche hat mir nie jemand gesagt, aber nachher ist man immer schlauer :rolleyes:

pogo
23.06.2004, 02:35
erstmal nochmal: danke!
ich habe die fehlerausgabe eingebaut und anscheinend hat ihn der Bindestrich bei "E-Mail" gestört. Hab jetzt "Mail" eingegeben und es funktioniert wunderbar!:)

nun hab ich aber noch radio und checkbox felder eingefügt und wie dreadlord gesagt hat, nicht den name sondern den value eintrag als variable zu nehmen.
es geht aber nicht. der rest wird wie gewohnt angezeigt, diese sind in der datenbank jedoch leer. und ein fehler wird auch nicht gemeldet...

hier noch mal der code mit den radio und checkbox teilen:



<?php
mysql_connect ("localhost","weserlanbrake","begulan");
mysql_select_db ("weserlanbrake");

$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$straße = $_POST['straße'];
$hausnummer = $_POST['hausnummer'];
$plz = $_POST['plz'];
$ort = $_POST['ort'];
$nickname = $_POST['nickname'];
$mail = $_POST['mail'];
$clan = $_POST['clan'];
$clanpasswort = $_POST['clanpasswort'];
$cs = $_POST['cs'];
$wc3 = $_POST['wc3'];
$bf = $_POST['bf'];
$regeln = $_POST['regeln'];
$veröffentlichen = $_POST['veröffentlichen'];


$insert = "INSERT INTO anmeldung (Vorname, Nachname, Straße, Hausnummer, PLZ, Ort, Nickname, Mail, Clan, Clanpasswort, cs, wc3, bf, regeln, veröffentlichen) VALUES ('$vorname','$nachname','$straße','$hausnummer','$plz','$ort','$nickname','$mail','$clan','$clanpasswort','$cs','$wc3','$bf','$regeln','$veröffentlichen')";
mysql_query($insert);

echo "Daten erfolgreich hinzugefügt";
echo mysql_error();
?>


der dazu passende html-code steht schon weiter oben. da waren diese felder schon mit drin. die einträge von cs bis veröffentlichen sind's. in der datenbank hab ich sonst nichts anderes eingetragen. den gleichen typen wie auch bei textfelder. falsch? welchen muss ich nehmen?

Dingsi
23.06.2004, 02:59
$veröffentlichen
Variablen-Namen dürfen nur aus alphanumerischen Zeichen und Unterstrichen bestehen -> keine Sonderzeichen und Umlaute. Ich denke das wär das Problem schonmal. o-o

Ah, ne.
Qutasch.
$_POST['veröffentlichen']. Die Radiobox heißt doch akzeptiert, also muss es auch $_POST['akzeptiert'] sein.

pogo
23.06.2004, 03:35
$_POST['veröffentlichen']. Die Radiobox heißt doch akzeptiert, also muss es auch $_POST['akzeptiert'] sein.

aber das ist doch der name für die ganze gruppe? muss da nicht der von dem einzelnen stehen? sonst käme ja die ganze gruppe in ein feld...

Dingsi
23.06.2004, 03:39
Original geschrieben von pogo
aber das ist doch der name für die ganze gruppe? muss da nicht der von dem einzelnen stehen? sonst käme ja die ganze gruppe in ein feld...
nein. in die variable kommt ja immer nur das rein, was in dieser gruppe ausgewählt wurde. das ist doch der sinn von radioboxes... das auswählen eines wertes. die nicht ausgewählten boxen/boxes (? O_o) werden ignoriert..

pogo
23.06.2004, 03:56
ja, ist klar, aber ich hab ja auch noch checkboxes und da kann man mehrere auswählen....

außerdem funzt das mit den radioboxen nicht. habs grad ausprobiert...

edit: sorry, hattest recht. geht jetzt mit den radioboxen. aber bei den checkboxen wird dann nur ein eintrag angezeigt...

Dingsi
23.06.2004, 04:16
die checkboxen brauchen unterschiedliche namen. ganz einfach. o_o.

pogo
30.06.2004, 20:00
bin jetzt fertig!! vielen dank, das ergebnis könnt ihr euch hier (http://www.weser-lan-brake.de/) angucken.

und falls ihr da in der nähe wohnt, meldet euch gleich an! :D