Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht
<?php
	session_start();
	//ini_set( 'default_charset', "" );
	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
	error_reporting(E_ALL);
		
	$sqlhost = "localhost";
	$sqluser = "root";
	$sqlpass = "";
	$dbname  = "user_data";
	
	try{
		$pdo = new PDO('mysql:host=localhost; dbname=user_data', $sqluser, $sqlpass);
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		echo "Connected Successfully";
	} catch(PDOException $e){
		echo "Connection failed: " . $e->getMessage();
	}
	//$mDatabase = mysqli_connect($sqlhost, $sqluser, $sqlpass, $dbname) or die ("DB-system no available");
?>

<!DOCTYPE html> 
<html> 
	<head>
		<title>Registrierung</title>    
	</head> 
	
	<body>
	 
		<?php
		$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
		 
		if(isset($_GET['register'])) {
			$error = false;
			$eMail = $_POST['eMail'];
			$password = $_POST['password'];
			$password2 = $_POST['password2'];
			$nickname = $_POST['nickname'];
			$name = $_POST['name'];
			$age = $_POST['age'];
			$sex = $_POST['sex'];
		  
			if(!filter_var($eMail, FILTER_VALIDATE_EMAIL)) {
				echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';
				$error = true;
			}     
			if(strlen($password) == 0) {
				echo 'Bitte ein Passwort angeben<br>';
				$error = true;
			}
			if($password != $password2) {
				echo 'Die Passwörter müssen übereinstimmen<br>';
				$error = true;
			}
			
			//Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
			if(!$error) { 
				$statement = $pdo->prepare("SELECT * FROM users WHERE eMail = :eMail");
				$result = $statement->execute(array('eMail' => $eMail));
				$user = $statement->fetch();
				
				if($user !== false) {
					echo 'Diese E-Mail-Adresse ist bereits vergeben<br>';
					$error = true;
				}    
			}
			
			//Keine Fehler, wir können den Nutzer registrieren
			if(!$error) {    
				$pw_hash = password_hash($password, PASSWORD_DEFAULT);
				/*	$stmt = $pdo->prepare("INSERT INTO users (nickname, eMail, password, name, age, sex) VALUES (?, ?, ?, ?, ?, ?)");
					$stmt->bind_param("ssssss", $nickname, $eMail, $pw_hash, $name, $age, $sex);
					$stmt->execute();*/
				
				$statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (?, ?, ?, ?, ?, ?)");
				$statement->bind_param("ssssis", $nickname, $eMail, $pw_hash, $name, $age, $sex); 
				$result = $statement->execute(
					array('nickname' => $nickname, 'eMail' => $eMail, 'password' => $passwort_hash,  'name' => $name, 'age' => $age, 'sex' => $sex, ));
				
				if($result) {        
					echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
					$showFormular = false;
				} else {
					echo 'Beim Abspeichern ist leider ein Fehler aufgetreten';
				}
			} 
		}
		 
		if($showFormular) {
		?>
			<h1> Registrierung </h1>
			
			<form action="?register=1" method="post">
			E-Mail:<br>
			<input type="eMail" size="40" maxlength="250" name="eMail"><br><br>
			
			Dein Passwort:<br>
			<input type="password" size="40"  maxlength="250" name="password"><br><br>
			
			Passwort wiederholen:<br>
			<input type="password" size="40" maxlength="250" name="password2"><br><br>

			Dein Nickname:<br>
			<input type="nickname" size="40" maxlength="250" name="nickname"><br><br>

			Dein Name:<br>
			<input type="name" size="40" maxlength="250" name="name"><br><br>

			Dein Alter:<br>
			<input type="age" size="40" maxlength="120" name="age"><br><br>

			Dein Geschlecht:<br>
			<input type="sex" size="40" maxlength="250" name="sex"><br><br>
			
			<input type="submit" value="Abschicken">
			</form>
			
		<?php
			 } //Ende von if($showFormular)
		?>
		 
	</body>
</html>

Hallo zusammen, 

ich versuche hier eine Registrierung zu erstellen bekomme aber immer wieder folgenden Fehler: 

Zitat

Fatal error: Uncaught Error: Call to undefined method PDOStatement::bind_param() in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php:76 Stack trace: #0 {main} thrown in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php on line 76

Und ich kann ihn einfach nicht lösen. Könnte mir hier jemand eventuell weiter helfen. Ich bin nicht besonders gut in PHP und verstehe auch das meiste kaum. Muss das aber fertig bekommen. Ich wäre euch echt dankbar. 

  • Autor
vor 23 Minuten schrieb Whiz-zarD:

Die Methode heißt bindParam() und nicht bind_param() und du musst jeden Parameter einzeln binden.

https://www.php.net/manual/en/pdostatement.bindparam.php

bind_param() stammt aus der mysqli Bibliothek und nicht aus PDO.

https://www.php.net/manual/de/mysqli-stmt.bind-param.php

Klasse ich danke dir. Der Fehler ist verschwunden aber jetzt stehe ich vor dem nächsten Fehler. Ist hier auch etwas falsch?:

$result = $statement->execute(
					array('nickname' => $nickname, 'eMail' => $eMail, 'password' => $pw_hash,  'name' => $name, 'age' => $age, 'sex' => $sex, ));
				
				if($result) {        
					echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
					$showFormular = false;
				} else {
					echo 'Beim Abspeichern ist leider ein Fehler aufgetreten';
				}

Denn jetzt sehe ich folgenden Fehler bezogen auf diese Zeilen:

Zitat

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php:84 Stack trace: #0 D:\Software\XAMPP\htdocs\VierGewinnt\registry.php(84): PDOStatement->execute(Array) #1 {main} thrown in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php on line 84

 

Wenn du beim prepare()-Aufruf mit Fragezeichen arbeitest, dann dürften die Parameter nicht benannt werden, wie du es jetzt getan hast. Wenn man die Parameter mit Namen ansprechen möchte, muss der Code wie folgt aussehen:

$statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (:nickname, :eMail, :password, :name, :age, :sex)");
$result = $statement->execute(
  array(
    'nickname' => $nickname,
    'eMail' => $eMail,
    'password' => $pw_hash,
    'name' => $name,
    'age' => $age,
    'sex' => $sex
  )
);

Mit den Fragezeichen so:

$statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (?, ?, ?, ?, ?, ?)");
$result = $statement->execute(array($nickname, $eMail, $pw_hash, $name, $age, $sex));

Steht doch alles in der Dokumentation.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.