2016-05-02 25 views
1

私は、データベースにアーティスト、アルバム、および曲を追加して議論することができる音楽ウェブサイトを作成しています。ただし、ユーザーがサインアップフォームに入力したデータをデータベースの「ユーザー」テーブルに転送することはできません。私は何が間違っているのか正確には分かっていませんが、データベースの接続に問題がないため、構文に問題があると思われます。私は何時間も探していますが、私はまだ解決策を見つけていません。誰でも助けてくれますか?PHPを使用してMySQLデータベースにデータを挿入できません

<?php include 'header.php'; ?> 

<form class="form" action="register.php" method="POST"> 
    <fieldset> 
    <label for="firstName">First Name:</label> 
    <input type="text" name="firstName" placeholder="John Smith"> 
    <br> 
    <label for="lastName">Last Name:</label> 
    <input type="text" name="lastName" placeholder="John Smith"> 
    <br> 
    <label for="email">Email:</label> 
    <input type="email" name="email" value="[email protected]"> 
    <br> 
    <label for="username">Username:</label> 
    <input type="text" name="username" value="helloitsme"> 
    <br> 
    <label for="password">Password:</label> 
    <input type="password" name="password"> 
    <br> 
    <label for="confirmPassword">Confirm Password:</label> 
    <input type="password" name="confirmPassword"> 
    <br> 
    <label for="age">Age:</label> 
    <input type="number" name="age"> 
    <br> 
    </fieldset> 
    <fieldset> 
    <input type="submit" name="submit" value="Register"> 
    </fieldset> 
</form> 

register.php:エラーは、ユーザーが

signup.phpを「提出」ヒットの後にサインアップフォームからの情報のどれもが私のデータベースに入力されていない取得されていることである。明確にするために

<?php 
session_start(); 

if ($_POST["password"] != $_POST["confirmPassword"]) { 
    $_SESSION['signUpBadPassword'] = true; 
    header('Location: signup.php'); 
} 
// Re use connection stuffs 
include "db.php"; 
// get connection 
$conn = DB::connect(); 

$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email, username, password, age) VALUES (?, ?, ?, ?, ?, ?)"); 

$stmt->bind_param(
    "sssssi", 
    $_POST["firstName"], 
    $_POST["lastName"], 
    $_POST["email"], 
    $_POST["username"], 
    $_POST["password"], 
    $_POST["age"] 
); 

$stmt->execute(); 

// Close the connection 
$conn->close(); 
header('Location: index.php'); 

?> 

とをdb.php:

<?php 

class DB 
{ 

    public static function connect() 
    { 
    $hostname = 'localhost'; 
    $username = 'user'; 
    $password = 'password'; 
    $dbName = 'dbname'; 
    $connection = new mysqli($hostname, $username, $password, $dbName); 

    if ($connection->connect_error) { 
    die('Failed to connect'); 
    } 

    return $connection; 
    } 
} 
+0

エラーは何ですか? – Talhiner

+0

エラーが生じましたか? –

+0

申し訳ありませんが、私は十分に明確ではありませんでした。エラーは、サインアップフォームに「提出」した後、データがミュージックデータベースに挿入されていないことです。 –

答えて

-1

use die(mysql_error());はあなたのクエリの後、あなたの解決策を見つけるでしょうよりも、私はコメントすることはできません申し訳ありませんが、まだ...

$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email, 
username, password, age) VALUES (?, ?, ?, ?, ?, ?)") or die(mysql_error()); 
+0

私はそこに置いた後も何のエラーも戻っていません。 –

+0

@AlexKamensしかし、すべてが完璧になっているようです。 – Talhiner

+0

この回答は根本的に間違っていて、最初はmysqli_ではなくmysql_を使用しています。オブジェクト指向接続。 @AlexKamensこれはあなたのために動作しない心配はありません。 – Martin

1

は、これらの6つのフィールドは、「ユーザー」テーブルで唯一のものはありますか?この問題は、データが挿入されておらず、デフォルト値がない表の 'not null'フィールドから発生する可能性があります。たぶんテーブルの構造を見ることができましたか?パラメータを結合することは、すなわちそのポストの値ISSETかどうかを確認してくださいながら、コードの下に

2

チェック:

$stmt = $conn->prepare("INSERT INTO users (firstName, lastName, email, username, password, age) VALUES (?, ?, ?, ?, ?, ?)"); 

$stmt->bind_param(
    "sssssi", $firstName, $lastName, $email, $userName, $passWord, $age 
); 

//check firstname is set or not 
if(isset($_POST['firstName'])) 
{ 
    $firstName= $_POST['firstName'];  
} 
else 
{ 
    $firstName= NULL; 
} 
//check lastname is set or not 
if(isset($_POST['lastName'])) 
{ 
    $lastName= $_POST['lastName']; 
} 
else 
{ 
    $lastName= NULL; 
} 
//check email is set or not 
if(isset($_POST['email'])) 
{ 
    $email= $_POST['email'];  
} 
else 
{ 
    $email= NULL; 
} 
//check username is set or not 
if(isset($_POST['username'])) 
{ 
    $userName= $_POST['username']; 
} 
else 
{ 
    $userName= NULL; 
} 
//check password is set or not 
if(isset($_POST['password'])) 
{ 
    $passWord= $_POST['password']; 
} 
else 
{ 
    $passWord= NULL; 
} 
//check age is set or not 
if(isset($_POST['age'])) 
{ 
    $age= $_POST['age'];  
} 
else 
{ 
    $age= 0; 
} 
+0

これはうまくいきました - ありがとう! –

1

$_POST値は常にがタイプ「文字列」であることを行っているので、$_POST["age"]は常になります:

$_POST['age'] !== (int)$_POST['age'] 

しかし、あなたのタイプの宣言(ssssiビット)は$_POST["age"]"i"nteger型であると述べています。

したがって、これを反映するように->bind_paramを修正してください。最も簡単な方法は確立することです:あなたのPHPで

$_POST['age'] = (int)$_POST['age']; 

ヘッダは、実行中のスクリプトの残りを防ぐためにを呼び出した直後に、あなたexitまたはdieを呼び出す必要があります。たとえば、正しいスクリプトでは、ヘッダーが送信されている間はページの残りの部分がまだ実行中であるため、実行挿入コードが実行されます。


関連する問題