Zum Inhalt springen

Error bei meinem PHP Skript: PDOStatement::bind_param()


Empfohlene Beiträge

<?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. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...