データベースにパスワードが正常に書き込まれない問題の解決方法

このQ&Aのポイント
  • データベースにパスワードが正常に書き込まれない問題が発生しています。PHPのコードに問題はないようで、データベース側に問題がある可能性があります。
  • 登録データをphpmyadminで確認したところ、パスワードが空になったり文字が化けていたりすることがあります。
  • 一方、テスト用のMD5の実装では正常に動作しているため、データベース側に何らかの障害がある可能性が高いです。正常に書き込まれるようにするためには、データベースの設定やテーブル構造を確認する必要があります。
回答を見る
  • ベストアンサー

MD5ハッシュのデータが

<? include "config.php"; $Data = '<form action=register.php method=post> Login: <br><input type=text name=login><br><br> Password:<br><input type=password name=passwd><br><br> Repeat password:<br><input type=password name=repasswd><br><br> Email:<br><input type=text name=email><br><br> <input type=submit name=submit value="Registration"> </form>'; if (isset($_POST['login'])) { $Link = MySQL_Connect($DBHost, $DBUser, $DBPassword) or die ("Can't connect to MySQL"); MySQL_Select_Db($DBName, $Link) or die ("Database ".$DBName." do not exists."); $Login = $_POST['login']; $Pass = $_POST['passwd']; $Repass = $_POST['repasswd']; $Email = $_POST['email']; $Login = StrToLower(Trim($Login)); $Pass = StrToLower(Trim($Pass)); $Repass = StrToLower(Trim($Repass)); $Email = Trim($Email); if (empty($Login) || empty($Pass) || empty($Repass) || empty($Email)) { echo "All fields is empty."; } elseif (ereg("[^0-9a-zA-Z_-]", $Login, $Txt)) { echo "Login have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Pass, $Txt)) { echo "Password have a incorrect format."; } elseif (ereg("[^0-9a-zA-Z_-]", $Repass, $Txt)) { echo "Repeat password have a incorrect format."; } elseif (StrPos('\'', $Email)) { echo "Email have a incorrect format."; } else { $Result = MySQL_Query("SELECT name FROM users WHERE name='$Login'") or ("Can't execute query."); if (MySQL_Num_Rows($Result)) { echo "Account <b>".$Login."</b> is exists"; } elseif ((StrLen($Login) < 4) or (StrLen($Login) > 10)) { echo "Login must have more 4 and not more 10 symbols."; } elseif ((StrLen($Pass) < 4) or (StrLen($Pass) > 10)) { echo "Password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Repass) < 4) or (StrLen($Repass) > 10)) { echo "Repeat password must have more 4 and not more 10 symbols."; } elseif ((StrLen($Email) < 4) or (StrLen($Email) > 25)) { echo "Email must have more 4 and not more 25 symbols."; } elseif ($Pass != $Repass){ echo "Password mismatch."; } else { $Salt = $Login.$Pass; $Salt = md5($Salt); $Salt = "0x".$Salt; MySQL_Query("call adduser('$Login', $Salt, '0', '0', '0', '0', '$Email', '0', '0', '0', '0', '0', '0', '0', '', '', $Salt)") or die ("Can't execute query."); echo "Account <b>".$Login."</b> has been registered."; } } } echo $Data; ?> 上のスクリプトで登録をしてphpmyadminで登録されたデータを見ると、 パスワードが空になっていたり文字が化けた1文字とかになって書き込まれています。 PHP上で何か問題があるのかと <?php $str = 'test'; if (md5($str) === '098f6bcd4621d373cade4e832627b4f6'){ eco "MD5OK"; exit; } ?> のように書いてみると正常にMD5OKと出ますのでデータベース側に問題があるような気がします。 どうしたら正常に書き込まれるようになるか分かる方いらっしゃいませんでしょうか?

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

格納方法に問題があるからでしょう $Salt = "0x".$Salt; こっれて、16進数にわざわざ変換して、何型カラムに格納してるのでしょう? 桁も大きいし、格納できる整数の範囲逸脱=格納前に既に正しい値ではない可能性があります。 かりに、MySQLのnumeric型でうまく格納出来たとしても、phpで取り出した際に、phpの扱える範囲ではないので、数値表示出来ません。よって、比較対象にも使えません。 カラム型をvarchar(32)として、 md5($Salt)を文字列で格納すれば、同じ値をそのまま文字列で取り出せるはずです。そうすれば比較も容易です。

kaolu007
質問者

お礼

補足の部分にお礼を書いてしまってました;;

kaolu007
質問者

補足

そのあたり書いてなかったですね。すいません。 パスワードはvarchar(64)になっていました。 もともとデータベースもそれを使うスクリプトも他人が作ったもので 上記のDBへの登録のスクリプトも多少手を加えた程度なんですが、 このDBを使うスクリプトの方がセキュリティを考慮してなのか理由はわかりませんが16進数から変換して読み込むようになってるのかもしれません。 上記の登録のスクリプト以外はモジュールとして多数のスクリプトが組み込まれて動くみたいでかなり複雑なので私の知識ではその部分がどうなっているのか確かめることも厳しいですが16進数に変換しないでも使えるようにならないかいろいろ試してみます。 ありがとうございました。

関連するQ&A

  • phpのwhileで希望通りの動作ができない

    以下のようにしてみたのですが「データはありません」という文章が何度も(何行も)表示されてしまいました。 while($test = mysql_fetch_array($sql, MYSQL_ASSOC)){ $name = $test[name]; if($cnt > 0){ echo "データはありません"; echo '<br>'; } elseif(empty($name)){ echo "データはありません"; echo '<br>'; } else{ $name = $name.'<br>'; } } whileで繰り返した結果、すべての$nameが「$cnt > 0」か「empty」の場合だけ、「データはありません」と一回だけ表示したいのですが、どのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • 他ページの入力内容を出力するには

    PHPあまり詳しくないです。 会員登録ページなるものを作っています。 register.phpというページで入力した会員情報をconfirm.phpというページで最終確認させたいのですが、その際に入力した情報がconfirm.phpに反映されません。 regiser.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> confirm.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> できればあまりこの形は変えたくありません…。 action部分をconfirm.phpに変えると、入力値が空だったりするエラー時にconfirm.phpに飛ばないようにする方法が分かりません。 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • 簡単なif文でちゃんと分岐しません

    今参考書を見ながらやっていますがうまくいきません。 postからusernameとpasswordの値を受け取って処理する スクリプトなんですが、うまく作動してくれません。 ■問題点 分岐点が4箇所ありますが、 パスワードだけ間違っても、すべて■1■ ログイン処理状態になります。 どうしてもパスワード再設定の画面に切り替わりません。 入力されたデータはデータベースにきちんと入ります。 3日間これで悩んでいて、ついに投稿してみました。 こんなこともわからない私ですが なんとかお願い致します。 ----ここから---- <?php session_start(); $username = $_POST["username"]; $sql = "SELECT * FROM `art_users` WHERE `user_name` = '%{$username}%'"; $query = mysql_query($sql) or die("データ追加エラー" . mysql_error()); $record = mysql_fetch_array($query, MYSQL_ASSOC); if ( $_POST["mode"] == "login" && mysql_num_rows($query) > 0 && $_POST["password"] == $record["user_password"] ) { $_SESSION["userid"] = $record["user_id"]; header("Location: kaukau_top.php"); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ログイン処理</title> </head> <body> <?php // ■1■ ログイン処理状態 if ( $_POST["mode"] == "login" ) { // 新規登録:クエリ実行結果が0行=既存ユーザー名と一致しない if ( mysql_num_rows($query) == 0 ) { echo '新規ユーザー登録<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="mode" value="register">'; echo '<input type="submit" value="登録">'; echo '</form>'; } // パスワードミス:クエリ実行結果のパスワードと入力されたパスワードが一致しない elseif ( $_POST["password"] != $record["user_password"] ) { echo 'パスワードが違います。<br>'; echo 'ひみつの質問に答えると、パスワードを変更できます。<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="username" value="' . $username . '">'; echo '<input type="hidden" name="mode" value="resetpassword">'; echo '<input type="submit" value="送信">'; echo '</form>'; } } // ■2■ パスワード再設定状態 elseif ( $_POST["mode"] == "resetpassword" ) { if( $record["user_answer"] == $_POST["answer"] ) { echo 'パスワード再設定<br>'; echo '<form action="kaukau_login.php" method="POST">'; echo '<input type="hidden" name="username" value="' . $username . '">'; echo '<input type="hidden" name="mode" value="modifypassword">'; echo '<input type="submit" value="登録">'; echo '</form>'; } else{ echo "ひみつの答えが違います"; } } // ■3■ 新規ユーザー登録状態 elseif ( $_POST["mode"] == "register" ) { if( $_POST["password"] == $_POST["confirm"] ) { $sql = "INSERT INTO users (user_name, user_password, user_question, user_answer) VALUES ("; $sql .= " '" . $_POST["username"] ."',"; $sql .= " '" . $_POST["password"] ."',"; $sql .= " '" . $_POST["question"] ."',"; $sql .= " '" . $_POST["answer"] ."')"; $result = mysql_query($sql); echo '登録しました。'; } else { echo 'パスワードを再確認してください。'; } } // ■4■ パスワード変更状態 elseif ( $_POST["mode"] == "modifypassword" ) { if ( $_POST["password"] == $_POST["confirm"] ) { $sql = "UPDATE users"; $sql .= " SET user_password = '" . $_POST["password"] . "'"; $sql .= " WHERE user_name = '" . $_POST["username"] . "'"; mysql_query( $db, $sql ); echo '登録しました。'; } else { echo 'パスワードを再確認してください。'; } } ?> </body> </html>

    • 締切済み
    • PHP
  • PHP PCでログインできたのに、スマホから無理

    PCからは既存アカウントでログインできるのですが、スマホからログインできません。 もちろんスマホ用サイトにも同様のスクリプトを書いております。 PCでは、ブラウザ:Google Chrome スマホのOSは、Android4.3 です。 ログインスクリプトは下記のようなものです。ちなみにこのスクリプトはスマホ用の方です。 -------------------------------------------------------------------------------------------- <?php session_start(); //////////////////// // POST変数の取得 // //////////////////// $login_id = (isset($_POST['login_id']))? $_POST['login_id'] : ""; $password = (isset($_POST['password']))? $_POST['password'] : ""; /* var_dump($login_id); var_dump($password); exit; */ if($login_id!=="" and $password!==""){ //////////////////////// // データベースを検索 // //////////////////////// $con = mysql_connect("~", "~", "~"); mysql_select_db("LAA0471050-shopcart"); mysql_set_charset('utf8'); $sql = "SET NAMES utf-8"; mysql_query($sql); $sql = "SELECT * FROM member_profile;"; $result = mysql_query($sql, $con) or die(mysql_error()); $rowco = mysql_num_rows($result); for($i=0; $i<$rowco; $i++){ $row = mysql_fetch_row($result); // 取得された行に対応する配列を返し、内部のデータポインタを前に進める if($login_id===$row[4] && $password===$row[5]){ // IDとパスワードが両方一致していた場合 $_SESSION['login'] = 1; // ログイン状態にする // setcookie("id", $login_id, time()+60*60*24*365); // アカウント用のクッキーの有効期限は一年間 // setcookie("pass", $password, time()+60*60*24*365); $_SESSION['login_id'] = $login_id; // メールアドレス header("Location: mypage.php?login_id=$login_id"); }else{ // header("Location: login.php"); // echo 'error'; } } mysql_close($con); // データベースとの接続を解除する } ?> <!doctype html> <html> <head><title>ログインページ</title> <meta charset="utf-8"> <!-- ◆ スマートフォン用 --> <meta name="viewport" content="width=device-width, initial-scale=1" /> <!-- jQuery本体--> <script type="text/javascript" src="./jquery/jquery-2.1.3.js"></script> <!-- スマホ用スタイルシート --> <link rel="stylesheet" href="./jquery/jquery.mobile-1.4.5.min.css" /> <!-- スマホ用JavaScript --> <script src="./jquery/jquery.mobile-1.4.5.min.js"></script> </head> <body bgcolor="#FFFFCC"> <br> <?php for($i=0; $i<60; $i++){ echo '&nbsp'; } if($_SESSION['login']!==1){ echo '<a href="membership_form.php"><img src="./images/shinki.png" border="0"></a>'; echo '&nbsp;<a href="login.php"><img src="./images/login.png" border="0"></a>'; }else{ // ログインしてれば echo '<a href="mypage.php"><img src="./images/mypage.png" border="0"></a>'; echo '&nbsp;<a href="logout.php"><img src="./images/logout.png" border="0"></a>'; } ?> <br><br> <?php ////////////// // 表の表示 // ////////////// echo '<center>'; echo '<table width="320" cellpadding="0" cellspacing="0" border="0">'; echo '<tr rowspan="10" width="320">'; // ⇐ このrowspan="14"で、⇒の画像などを幅寄せできる【重要】 echo '<form name="form1" method="post" action="login.php">'; echo '<tr><td><img src="./images/login_bar.png" width="100%"></td></tr>'; echo '<tr><td width="320" height="20" class="line1">ログインID(メールアドレス)</td></tr>'; echo '<tr>'; echo '<td width="320" height="20" align="middle">'; echo '<input type="text" class="yokohaba" name="login_id" id="login_id" size="75" tabindex="1">'; echo '</td>'; echo '</tr>'; echo '<td width="320" height="20" class="line1">パスワード</td>'; echo '</tr>'; echo '<tr>'; echo '<td width="320" height="20" align="middle">'; //echo '<input type="password" class="yokohaba" name="password" id="password" size="75" tabindex="2" value="'.$_COOKIE['pass'].'">'; echo '<input type="password" class="yokohaba" name="password" id="password" size="75" tabindex="2">'; echo '</td>'; echo '</tr>'; echo '<tr><td width="320" height="20" align="middle">'; echo '<a href="JavaScript:document.form1.submit()" onclick="location.href=\'login.php\'"><img src="./images/login_send.png" border="0" tabindex="3" width="100%"></a>'; echo '</td></tr>'; echo '</form>'; echo '</table>'; ?> <br><br> <center><a href="top.php">トップページ</a></center> </center> </body> </html> どこがどう間違っているのか、ご指導お願い致します。

    • 締切済み
    • PHP
  • セッションを使ったログインページでのエラー

    前にもセッションを使ったログインページについて質問したものです。 上記の通りセッションを使ったログインページを作っております。 前回このソースを載せたときセキュリティー的にとても危険だというご意見をいただきました。何分まだ初心者ですのでどうかご了承ください。 ソース /*ログインのページは省略しました。ログイン後ID・パスワードが正しいか、そして訪問者がログインせずにこのページに直接アクセスした際にログインページにジャンプするようにするようにするプログラムです*/ <?PHP if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } else { $user = addslashes($_POST['username']); $pass = md5($_POST['password']); $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "*****"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); if($rowCheck > 0){ while($row = mysql_fetch_array($result)){ session_start(); session_register('username'); echo 'Success!'; header( "Location: checkLogin.php" ); } } else { echo 'Incorrect login name or password. Please try again.'; } } ?> このようなプログラムを作ったのですが、ちゃんとパスワードをいれても、ちゃんと認証されずに、ログインのページ戻されてしまいます。 おそらく if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } の部分がおかしいのかと思いますがどう変えたら良いのかよく分かりません。また、おかしいと思った部分を削除したら普通にログインはできるのですが、今度は一度ログインしても他のページに移動した後もう一度このページに行くと、もう一度ログインしないとアクセスできなくなりました。 まとめると、お聞きしたいことは、2つです。 (1)紹介したのプログラムでログインしてもちゃんとログインが認証されない。これを解消するにはどうすればいいのか? (2)ユーザーがログインした後もう一度このページにアクセスした場合もう一度ログインさせなくてもいいようにすればどうすればよいのか。 もし可能でしたら、解決するためのプログラムを(さらに可能でしたら紹介したプログラムを生かした形で)添えてアドバイスしていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+ApacheでMySQLに接続できない。プロンプトからは可能

    以下のようなコードでmysqltest.phpというファイルを作成しました。 これを php -f mysqltest.php とやると成功します。 しかし、ブラウザでhttp://パス/mysqltext.phpとやると失敗します。 双方がどう違うのか教えていただけないでしょうか。 以下コードです。 ----------------------- <html> <body> <?php $hostname = "localhost:/var/lib/mysql/mysql.sock"; $name = "root"; $password = "pass"; printf( "hostname:%s<br>\n" , $hostname ); printf( "username:%s<br>\n" , $name ); printf( "password:%s<br>\n" , $password ); mysql_connect($hostname, $name, $password ) or die('cannot connect to database'); ?> </body> </html> ---------------------------------- 単に「ホスト:ポート」「ユーザネーム」「パスワード」を指定してconnectしているだけです。 コマンドラインから実行すると成功します ---------------------- <html> <body> hostname:localhost:/var/lib/mysql/mysql.sock<br> username:root<br> password:komaba<br> </body> </html> ---------------------------- ブラウザで実行すると失敗します。 ----------------------------- hostname:localhost:/var/lib/mysql/mysql.sock username:root password:pass cannot connect to database -----------------------------

  • IDとパスワードを認証すコードをかきましたが動きません

    phpの超初心者です、よろしくお願いします。 IDとパスワードを認証すコードをかきましたが動きません。 Formから別に使ったdbにあるIDとパスを見に行くコードでが、 dbにあるIDとパスと同じものを打ち込んでも認証しません、 また別のdbにあるIDとパスを打ち込んでも認証するときがあります。 一体どこが悪いのでしょうか。どこが悪いのかさっぱり分かりません。 よろしくお願いします。 --------------------------------------- <?php $conn = mysql_connect(localhost, "root", ""); //DBにコネクト mysql_select_db('login_test', $conn); //'login_test'をselect mysql_query('SET NAMES utf8'); //defalt $res_init=mysql_query('SELECT * from user'); //userからすべてのdataを取得 while($arr = mysql_fetch_assoc($res_init)){ //結果セットが無くなるまでループ foreach($arr as $k => $v){ echo "フィールド ".$k." の値は ".$v; echo "<br />"; } echo "<br />"; } //formからDATAを取得 $id=$_POST['input_ID']; $pass=$_POST['input_pass']; print("入力したid= ".$id." 入力したpass= ".$pass); //認証check if(auth ($id,$pass,$conn)===true){ print("認証成功"); } else{ print("認証不成功"); } //function function auth ($id,$pass,$conn){ $sql = "SELECT * from user WHERE user_id = $id AND password = '$pass'"; $res = mysql_query($sql, $conn); return $res; } ?> <form action="http://localhost/test/test.php" method="POST"> IDの入力:<input type="text" name="input_ID"><br /><br /> Passの入力:<input type="text" name="input_pass"><br /><br /> <input type="submit" name="delete_submit" value="送信"><br /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • 他ページの内容を出力するには

    PHPあまり詳しくないです。 会員登録ページなるものを作っています。 register.phpというページで入力した会員情報をconfirm.phpというページで最終確認させたいのですが、その際に入力した情報がconfirm.phpに反映されません。 regiser.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> confirm.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>確認画面</title> </head> <body> <h3>入力内容を確認してください</h3> <form method="POST" action=""> <br /><br /> <p>ユーザ名</p> <br /> <?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>メールアドレス</p> <?php print htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>パスワード</p> <?php print htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); ?> <br /><br /><br /> <?php print('この内容でよろしければ下の登録ボタンを押してください'); ?> <br /> <form method="POST" action="dbconnect.php"> <input type="submit" name="completion" value="登録する" /> </form> <br /><br /> <?php print('変更がある場合は下の戻るボタンを押してください'); ?> <br /> <form method="POST" action="register.php"> <input type="submit" value="戻る" /> </form> </body> </html> できればあまりこの形は変えたくありません…。 action部分をconfirm.phpに変えると、入力値が空だったりするエラー時にconfirm.phpに飛ばないようにする方法が分かりません。 回答よろしくお願いします。 色々と間違えていたのであげ直させていただきました。

    • 締切済み
    • PHP
  • ログイン画面を作るとき

    ログイン画面を作っています。 メールアドレスとパスワードを入力するとログイン完了画面に飛ぶという形です。 入力したメールアドレスをデータベースから検索し、パスワードを照合して合致すれば完了画面へ、しなければはじかれるようにしたいのですが正しいパスワードを入力しても完了画面に飛びません。 回答よろしくお願いします。 ソース文(入力するテキストボックス等のソースは省いています) <?php if(isset($_POST['login'])) { if(empty($_POST['email'])) { print('メールアドレスを入力してください'); } elseif(empty($_POST['password'])) { print('パスワードを入力してください'); } elseif(!empty($_POST['email']) && !empty($_POST['password'])) { try { $db = new PDO('mysql:host=●;dbname=●;charset=utf8', '●', '●'); $stt = $db->prepare('SELECT password FROM `information` WHERE email=:email'); $stt->bindValue(':email', $_POST['email']); $stt->execute(); } catch(PDOException $e) { die('Error:'.$e->getMessage()); } /* while ($row = $stt->fetch()) { print($row['password']); } */ if($row['password'] == $_POST['password']) { header('Location: ログイン完了画面のページ'); } else { print('入力内容が間違っています。'); } } } ?>

    • ベストアンサー
    • PHP
  • PHPの代数処理について

    下記のようなPHPを組みました。 af1~af4のカラムの中に空きがあったら表示するPHPです。 <?php $fr1=$row_friend_name['af1']; $fr2=$row_friend_name['af2']; $fr3=$row_friend_name['af3']; $fr4=$row_friend_name['af4']; if (empty($fr1)) { echo "af1"; } elseif (empty($fr2)) { echo "af2"; } elseif (empty($fr3)) { echo "af3"; } elseif (empty($fr4)) { echo "af4"; } else { echo "空きなし"; } ?> ここまでは問題なく、空きのカラムを表示してくれます。 【質問】 次に、この結果をPHPの中で代数として扱いたいと考えています。 (計算結果を$kekkaとする) <?php $fr1=$row_friend_name['af1']; $fr2=$row_friend_name['af2']; $fr3=$row_friend_name['af3']; $fr4=$row_friend_name['af4']; $kekka=( if (empty($fr1)) { echo "af1"; } elseif (empty($fr2)) { echo "af2"; } elseif (empty($fr3)) { echo "af3"; } elseif (empty($fr4)) { echo "af4"; } else { echo "10"; }) IF $kekka='10' { echo "空きなし"; } else { echo "空きあり"; } ?> 結果 エラー (真っ白) $kekka=() がまずいと思い、$kekka=(); や$kekka={} $kekka={}; もダメでした。 大変初歩的な部分かと思いますが、ご指導を宜しくお願い致します。

    • ベストアンサー
    • PHP