@odecember1205
Q&A

PHPでエラーが出ていて困っています

解決したいこと

PHPとMySQLを利用して、会員登録サービスを作成しております。構成としては、ログイン画面にユーザ名(従業員番号)とパスワードを入力します。ここで、未登録の方は新規登録画面に移動し、会員登録を行う。既に登録済みの方は、ログイン後ホーム画面へと遷移します。ここで、新規登録画面を設計中にエラーが生じました。
https://qiita.com/ryo-futebol/items/5fb635199acc2fcbd3ff を参照させていただきましたが、エラーが生じています。もちろん、コピペしたのではなく、所々変更している箇所がございます。27行目はソースコードのデータベースに同じ従業員番号が登録されている場合は戻るへのリンクへいく処理です。
解決方法を教えて下さい。

発生している問題・エラー

Notice: Undefined variable: user in /Applications/XAMPP/xamppfiles/htdocs/timecard1/newreg.php on line 27

Notice: Undefined index: user_no in /Applications/XAMPP/xamppfiles/htdocs/timecard1/newreg.php on line 27

該当するソースコード


<?php

if(!empty($_POST['user_no'])){
$pass = password_hash($_POST['password'], PASSWORD_DEFAULT);

$db_user = "kintai";
$db_pass = "password";
$db_host = "localhost";
$db_name = "mydb";

$dsn = "mysql:host=$db_host; dbname=$db_name; charset=utf8";

try {
    $dbh = new PDO($dsn, $db_user, $db_pass);
} catch (PDOException $Exception) {
    $msg = $Exception->getMessage();
}


//フォームに入力されたuer_noがすでに登録されていないかチェック
$sql = "SELECT * FROM users WHERE user_no = :user_no";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':user_no', $user_no);
$stmt->execute();
$user = $stmt->fetch();
};
if ($user['user_no'] === $_POST['user_no']) {
    $msg = '同じ従業員番号が存在します。';
    $link = '<a href="signin.php">戻る</a>';

} else {
    //登録されていなければinsert 
    $sql = "INSERT INTO users(user_no, pass) VALUES (:user_no, :pass)";
    $stmt = $dbh->prepare($sql);
    $stmt->bindValue(':user_no', $user_no);
    $stmt->bindValue(':pass', $password);
    $stmt->execute();
    $msg = '会員登録が完了しました';
    $link = '<a href="login.php">ログインページへ</a>';
}
?>

### 自分で試したこと
参考資料では、$mail(ここでは$user_no)となっていましたが、$_POST['user_no']のように書き換えました。
0
2
件の回答
<?php
if(!empty($_POST['user_no'])){
/* 省略 */
$user = $stmt->fetch();
};
if ($user['user_no'] === $_POST['user_no']) { // 27行目?
}

おそらく$_POST['user_no']が存在しない時にエラーになるのだと思います。

Undefined variable: user

$userは最初のifの中でしか初期化されていないので、27行の時点で未定義の変数になります。

Undefined index: user_no

これも$_POSTuser_noが存在しないことによるエラーです。

おそらく$_POST['user_no']に値があることが前提だと思われるので、それを最初にチェックすれば良いと思います。

<?php
if (isset($_POST['user_no'])) {
    echo 'user_noがありません。';
    exit;
};

$pass = password_hash($_POST['password'], PASSWORD_DEFAULT);
0

変数$msg$linkに入れた結果をその後使わないのも意味がないので、おそらく41行目のPHP終了タグ?>の後にも何らかの処理が続くのでしょう。

それを踏まえた上で

Undefined variable $user in ****.php on line 27

になることへの対応ですが、27~40行目の振り分けを行なっている処理ブロックを、25行目の$user = $stmt->fetch();と26行目の};間へ移動させればいいのではないでしょうか。

また、4行目で作られた変数$passが使用されていないのも気になります。
36行目の$password$passではないでしょうか。

23行目と35行目で使われている変数$user_noも未定義のようですので、どこか適切な位置で$_POST['user_no']の内容を$user_noに代入する処理も必要かと思います。

0
あなたも回答してみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン