Registrierung mit php&mySQL

CreamyCewie

Photoshop-Künstler
Hi.

Ich bin ein PHP-Anfänger, und will eine Registrierung mit SQL machen.

Meine index.php sieht so aus:
HTML:
<body>
<form method="post">
                        	Bitte geben Sie Ihre Email-Adresse ein<br>
                        	<input type="text" size="25" name="reg-email"><br>
                            Bitte geben Sie Ihr Passwort ein<br>
                        	<input type="text" size="25" name="reg-passw"><br><br>
                        	Bitte geben Sie Ihren Vornamen ein<br>
                        	<input type="text" size="25" name="reg-firstname"><br>
                            Bitte geben Sie Ihren Nachnamen ein<br>
                        	<input type="text" size="25" name="reg-lastname"><br>
                            Bitte geben Sie Ihre Postanschrift ein<br><br>
                        	<input type="text" size="25" name="reg-adress"><br>
                            Bitte geben Sie Ihr Geburtsdatum ein<br><small>TAG     -  MONAT             -  JAHR</small><br>
                        	<select name="reg-bday-day" size="1">
                                  <option>1</option>
                                  <option>2</option>
                                  <option>3</option>
                                  <option>4</option>
                                  <option>5</option>
                                  <option>6</option>
                                  <option>7</option>
                                  <option>8</option>
                                  <option>9</option>
                                  <option>10</option>
                                  <option>11</option>
                                  <option>12</option>
                                  <option>13</option>
                                  <option>14</option>
                                  <option>15</option>
                                  <option>16</option>
                                  <option>17</option>
                                  <option>18</option>
                                  <option>19</option>
                                  <option>20</option>
                                  <option>21</option>
                                  <option>22</option>
                                  <option>23</option>
                                  <option>24</option>
                                  <option>25</option>
                                  <option>26</option>
                                  <option>27</option>
                                  <option>28</option>
                                  <option>29</option>
                                  <option>30</option>
                                  <option>31</option>
                            </select>
                            -
                            <select name="reg-bday-month" size="1">
                                  <option>Jänner</option>
                                  <option>Feber</option>
                                  <option>März</option>
                                  <option>April</option>
                                  <option>Mai</option>
                                  <option>Juni</option>
                                  <option>Juli</option>
                                  <option>August</option>
                                  <option>September</option>
                                  <option>Oktober</option>
                                  <option>November</option>
                                  <option>Dezember</option>
                            </select>
                            -
                            <input type="text" name="reg-bday-jear" size="4">
                            <br><br>
                            <p align="center">
                            <input type="checkbox" name="reg-agb" value="agree"> Ich stimme den <u><a href="agb.html" title="AGB anzeigen">AGB</a></u> und den <u><a href="datenschutz.html">Datenschutzrichtlinen</a></u> zu...
                            <br>
                            <input type="submit" value="Registrieren"> 
                                   
                            <input type="reset" value="Daten verwerfen">
</body>

Ich will dass beim Klick auf Registrieren die register.php ausgeführt wird.
Das geht doch mit " action="register.php" " in der Form oder?

die register.php enthält bis jezt folgendes:
HTML:
<head>
<?php 
INCLUDE 'sql-conn.php';
?>
</head>
<body>
</body>

alle name´s aus den Inputs werden doch in Variablen gespeichert, oder?
also aus " <input name="reg-agb"> " wird " $reg-agb " ?

meine sql-conn.php sieht folgend aus:
Code:
<?php
mysql_connect("localhost", "user","pw") or die ("Keine Verbindung zur Datenbank moeglich");
mysql_select_db("db1") or die ("Die Datenbank existiert nicht.");
?>
wie kann ich hier eine Table (UserData) auswählen?
sowas wie " mysql_select_table " ?

Wie muss die Register.php in etwa aussehen, um die daten in die SQL zu schreiben?

Mit der bitte um Hilfe:

Creamy
 
Hi Creamy,

wenn du das schon nicht hinbekommst, solltest du dir erst einmal ein vernünftigen Workshop oder ein vernünftiges Tutorial zu Gemüte führen. Weil wenn ich dir jetzt sage wie es geht, würde dir das überhaupt nichts bringen. Arbeite dich erst mal hier durch: Quakenet/#php Tutorial - de - Einleitung

Danach dürften deine gesamten Fragen sich selbst erledigen.

Grüße Maliko

EDIT: Ich hab mir gerade mal deinen HTML Code angeschaut. Der ist nicht Valide. Den solltest du auch noch überarbeiten. Was du noch machen musst, kannst du unter The W3C Markup Validation Service nachschauen. Einfach in das Feld den gesamten Inhalt der HTML Datei eintragen und schon bekommst du die Fehler ausgespuckt.
 
Hi,

danke, ich hab mir das tut jetz intensiv reingezogen.
Nun hab ich ein Problem: Ich will Datensätze in die SQL schreiben, da passiert aber nix.

ErrorReporting habe ich ein, also etwaige Fehlermeldungen müsst ich sehen.

Mein Code:

inhalt der register.php
Code:
<?php
$database = @new mysqli('server', 'user', 'pw', 'db1');
if (mysqli_connect_errno()) {
    die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}
?>

<?php
							// Varriablen übernehmen
							$email = $_POST["reg-email"];
							$passwort = $_POST["reg-passwort"];
							$firstname = $_POST["reg-firstname"];
							$lastname = $_POST["reg-lastname"];
							$adresse = nl2br($_POST["reg-adress"]);
							$birthdate = ($_POST["reg-bday-day"]) . " | " . ($_POST["reg-bday-month"]) . " | " . ($_POST["reg-bday-jear"]);
						?>

<?php
						//SQL-Befehl vorbereiten
						$sql_command = 
						"
						INSERT INTO
    					UserData(FirstName, LastName, BirthDate, Email, Passwort, Adress, IsActive)
						VALUES
						(
							".$firstname.",
						 	".$lastname.",
							".$birthdate.",
							".$email.",
							".$passwort.",
							".$adresse.", \" N \"
						);";
						
						//SQL-Befehl ausführen
						mysqli_query($database , $sql_command);
						$summary = $database->prepare($sql_command);
						if (!$summary) {
							die ('Es konnte kein SQL-Query vorbereitet werden: '.$database->error);
						}
						?>

hier hab ich mal testdaten verwendet, und bekomme folgende Fehlermeldung:


Es konnte kein SQL-Query vorbereitet werden: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, test, Mein Name
MeineAdresse 123
' at line 8


Woran könnte das liegen?

Danke & LG

Creamy
 
Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/.sites/127/site693/web/TEST/shop/register.php on line 72

Line 72 sieht so aus:
Code:
die (mysqli_error());


Was mir gerade einfällt, die Nicht-Numerischen Werte in dem SQL-Befehl müssten doch in Hochkomma stehen, oder?

also in dem Fall die Varriablen

HTML:
//SQL-Befehl vorbereiten
						$sql_command = 
						"
						INSERT INTO
    					UserData(FirstName, LastName, BirthDate, Email, Passwort, Adress, IsActive)
						VALUES
						(
							".$firstname.",
						 	".$lastname.",
							".$birthdate.",
							".$email.",
							".$passwort.",
							".$adresse.", \" N \"
						);";

oder ist das egal?
 
Der Inhalt von $sql_command ist
Code:
INSERT INTO UserData(FirstName, LastName, BirthDate, Email, Passwort, Adress, IsActive) VALUES ( Vorname, Nachname, 1 | Jänner | 1990, test@gmail.com, testpw, NAME
ADRESSE NR
PLZ ORT
BLAND
LAND, " N " );


PhpMyAdmin 3.4.3.2 gibt mir folgenden Fehler:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, testpw, NAME ADRESSE NR PLZ ORT BLAND LAND, " N " )' at line 1
 
Jetzt geht es, mit :
Code:
$sql_command = 
						"
						INSERT INTO
    					UserData(FirstName, LastName, BirthDate, Email, Passwort, Adress, IsActive)
						VALUES
						(
							'".$firstname."',
						 	'".$lastname."',
							'".$birthdate."',
							'".$email."',
							'".$passwort."',
							'".$adresse."', \" N \"
						);";
 
Hi.

Ich hab nun folgenden Code:
Code:
$sql_command3 =
		"
						INSERT INTO
    					UserTokens(KundenID, Token)
						VALUES
						(
							'".$UserID."',
						 	'".$token."',
						);";	
						
							mysqli_query($customer_database , $sql_command3);
								$summary = $customer_database->prepare($sql_command3);
									if (!$summary) {
										die ('Es konnte kein Token übergeben werden: '.$customer_database->error);
									}
									else {

Hier bekomm ich den Error
Es konnte kein Token übergeben werden:

Woran kann das liegen?
 
Das kann viele Gründe haben. Es kann schon daran liegen, das die Variablen aus irgendeinem Grund nicht existieren oder nicht gefunden werden können. Wenn die Variablen über ein Formular übergeben werden, dann versuch mal folgende Version:

Code:
$sql_command3 =
		"
						INSERT INTO
    					UserTokens(KundenID, Token)
						VALUES
						(
							'".$_POST[UserID]."',
						 	'".$_POST[token]."',
						);";	
						
							mysqli_query($customer_database , $sql_command3);
								$summary = $customer_database->prepare($sql_command3);
									if (!$summary) {
										die ('Es konnte kein Token übergeben werden: '$customer_database->error);
									}
									else {

Sollten die Variablen über die URL übergeben werden, dann musst du statt $_POST[VAR] $_GET[VAR] verwenden. Wenn die vorher aus einer Datenbank ausgelesen werden und dann gespeichert werden sollen kann es an einer ganz anderen Stelle des Scriptes liegen, das kann ich dir allerdings nicht sagen, solange ich nicht das gesamte Skript kenne.

Außerdem include bitte in jede Datei folgenden Codeschnipsel: error_reporting(E_ALL);. Der Stellt die Anzeige von ALLEN Fehlern an. Dazu gehören auch Notices. Das Errorreporting ist auf Servern oft Standartmäßig aus. Dein MySQL Error müsste übrigens eigentlich funktionieren, wenn du den Punkt vorm Prozent entfernst (oder die Prozeduale Schreibweise mysqli_error($customer_database); verwendest).
 
Zuletzt bearbeitet:
Danke, die Varriablen sind gesetzt, ich kann diese mit Eco ausgeben.

ErrorReporting hab ich vergessen, wird natürlich sofort gesetzt :)
 
Ich weiß nicht, ob Du das mittlerweile geändert hast, aber bei der Passworteingabe würde ich type="password" statt type="text" verwenden, damit das Passwort bei der Eingabe nicht von jedermann mitgelesen werden kann.
 
Dann poste mal bitte den MySQL Error wenns noch nicht funktioniert (weil momentan sieht man ja nur die Fehlermeldung, welche Du angegeben hast.
 
Ich weiß nicht, ob Du das mittlerweile geändert hast, aber bei der Passworteingabe würde ich type="password" statt type="text" verwenden, damit das Passwort bei der Eingabe nicht von jedermann mitgelesen werden kann.

ot:
Das ist der Teil, den ich am meisten hasse.. wer so nah an meinem Bildschirm steht um mein Passwort zu lesen, sieht es eh auf der Tastatur. Dafür muss ich immer dreimal tippen bis Rechtschreibfehler ausgebügelt sind, nicht selten hat man logins wo es nach dreimal falsch erstmal gesperrt ist. Der einzige wirkliche Vorteil: Formulardaten werden in dem Feld nicht gespeichert. Aber auch das könnte man für ein Textfeld künstlich erzwingen.
 
ot:
Dabei gibt es aber einen kleinen Haken: ich gebe Passwörter grundsätzlich nicht an öffentlichen Orten ein - in einem Internetcafe kann das fatal sein. Wer hinter einem sitzt und nicht auf die Tastatur sieht, könnte so dennoch das Passwort ausspähen. Nur weil ich es nicht mag, heisst das nicht dass es nicht manchmal sinnvoll wäre
 
ot:
außerdem kannst du dir sicher sein, das dich jeder Auftraggeber vierteilt und dir nie wieder einen Auftrag gibt, wenn du nicht einmal solch Elementaren Sicherheitsfaktoren verwendest. Also auch wenn es Unbequem ist, trotzdem auf jedem Fall einbauen.
 
Oben