質問編集履歴

2 function.phpの追加と余計な部分の削除

退会済みユーザー

退会済みユーザー

2017/08/12 15:57  投稿

Connection failed: SQLSTATE[HY000] [1045]
Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password:
データベースへの接続自体ができていないようなので、
どうしたらいいのかがわかりません。
現在引っかかっているコードは下記のものです。
先ほど質問したコードでもデータベースのやり取りに問題があるようでしたので、こちらも含めて解決したいです、よろしくお願いします。
```
<?php  
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
require_once("function.php");
session_start();
header("Content-type: text/html; charset=utf-8");
$_SESSION["token"] = get_csrf_token();
$id = $_POST['id'];
$mail = $_POST["mail"];
$password = $_POST["password"];
$confirm_password = $_POST["confirm_password"];
if($password != $confirm_password){
    //pass不一致
    $_SESSION["error_status"] = 1;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: register.php");
    exit();
}
//IDcheck
//DB接続 ※
$dsn = 'mysql:host=localhost;dbname=portfolio;charset=utf8';
$user = 'root';
$password = '';
$dbh = new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//プレースホルダでSQL作成 ※
$sql = "SELECT COUNT(*) AS CNT FROM USER WHERE ID = ?;";
//パラメータの型指定 ※
$stmt = $dbh->prepare($sql, array('text'));
//パラメータを渡してSQL実行
$rs = $stmt->execute(array($id));
// try{
//     $pdo = new PDO(
//       'mysql:host=localhost;dbname=portfolio;charset=utf8',
//       'root',
//       '';
//       [
//         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
//         PDO::ATTR_DEFAULT_FETCH_MODE => PDO:: FETCH_ASSOC,
//       ]
//     );
// }catch(PDOException $e){
//    header('Content-Type: text/plain; charset=UTF-8', true , 500);
//    exit($e->getMessage());
// }
try {
   $dbh = new PDO($dsn, $user, $password);
   $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
   echo 'Connection failed: ' . $e->getMessage();
}
while ($row = $stmt->fetch()){
 $count = $row['CNT'];
}
$dbh = null;
//IDがすでに登録されていた場合
if($count != 0){
    $_SESSION['error_status'] = 2;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: register.php");
    exit();
}
//エラー情報リセット
$_SESSION['error_status'] = 0;
// print_r($_SESSION);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
  </head>
  <form action="register_submit.php" method="post" >
    <table border="0">
  <tr>
  <td>ID</td>
  <td><?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8"); ?></td>
  <td>メールアドレス</td>
  <td><?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8"); ?></td>
  </table>
  <input type="hidden" name="id" value="<?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="mail" value="<?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="password" value="<?php echo htmlspecialchars($password , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="token" value="<?php echo htmlspecialchars($_SESSION['token'] , ENT_QUOTES , "UTF-8") ?>" >
  <input type="submit" value="登録">
  <input type="reset" value="リセット">
  <input type="button" value="戻る" onclick="history.back();">
  </form>
  </body>
  </html>
?>
 
```  
function.php  
```  
<!DOCTYPE html>  
 
<?php  
 
define("DNS","mysql://user01:pass@localhost/posrtfolio?charset=utf8");  
define("SERVER","192.168.11.11");  
define("SENDER_EMAIL","root@localhost");  
define("STRETCH_COUNT" , 1000);  
 
/* CSRFトークン作成 */  
function get_csrf_token(){  
$TOKEN_LENGTH = 16;  
$bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH);  
return bin2hex($bytes);  
}  
 
/* パスワードのソルト+ストレッチング */  
function stretchedPassword($salt,$password){  
 
$hash_pass="";  
 
for($i = 0; $i<STRETCH_COUNT; $i++){  
 $hash_pass = hash("sha256",($hash_pass . $salt . $password));  
}  
 return $hash_pass;  
}  
 
/* ソルト作成 */  
function get_salt(){  
 $TOKEN_LENGTH = 4;//4*2=8byte  
 $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH);  
 return bin2hex($bytes);  
}  
 
/* URLの一時パスワード作成 */  
function get_url_password(){  
   $TOKEN_LENGTH = 16;//16*2=32byte  
   $bytes = openssl_random_pseudo_bytes($TOKEN_LENGTH);  
   return hash("sha256",$bytes);  
}  
 
?>  
 
 
<html>  
<head>  
<meta charset="UTF-8">  
<title></title>  
</head>  
<body>  
 
</body>  
</html>  
 
```
  • PHP

    38437 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1 コメントアウト部分など更新

退会済みユーザー

退会済みユーザー

2017/08/12 15:33  投稿

Connection failed: SQLSTATE[HY000] [1045]
Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password:
データベースへの接続自体ができていないようなので、
どうしたらいいのかがわかりません。
現在引っかかっているコードは下記のものです。
先ほど質問したコードでもデータベースのやり取りに問題があるようでしたので、こちらも含めて解決したいです、よろしくお願いします。
```
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
require_once("function.php");
session_start();
header("Content-type: text/html; charset=utf-8");
$_SESSION["token"] = get_csrf_token();
$id = $_POST['id'];
$mail = $_POST["mail"];
$password = $_POST["password"];
$confirm_password = $_POST["confirm_password"];
if($password != $confirm_password){
    //pass不一致
    $_SESSION["error_status"] = 1;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: register.php");
    exit();
}
//IDcheck
//DB接続
//DB接続 
$dsn = 'mysql:host=localhost;dbname=portfolio;charset=utf8';
$user = 'root';
$pass = '';
$dbh = new PDO($dsn,$user,$pass);
$password = '';
$dbh = new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//プレースホルダでSQL作成
//プレースホルダでSQL作成 
$sql = "SELECT COUNT(*) AS CNT FROM USER WHERE ID = ?;";
//パラメータの型指定
//パラメータの型指定 
$stmt = $dbh->prepare($sql, array('text'));
//パラメータを渡してSQL実行
$rs = $stmt->execute(array($id));
// try{
//     $pdo = new PDO(
//       'mysql:host=localhost;dbname=portfolio;charset=utf8',
//       'root',
//       '';
//       [
//         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
//         PDO::ATTR_DEFAULT_FETCH_MODE => PDO:: FETCH_ASSOC,
//       ]
//     );
// }catch(PDOException $e){
//    header('Content-Type: text/plain; charset=UTF-8', true , 500);
//    exit($e->getMessage());
// }
try {
   $dbh = new PDO($dsn, $user, $password);
   $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
   echo 'Connection failed: ' . $e->getMessage();
}
while ($row = $stmt->fetch()){
 $count = $row['CNT'];
}
$dbh = null;
//IDがすでに登録されていた場合
if($count != 0){
    $_SESSION['error_status'] = 2;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: register.php");
    exit();
}
//エラー情報リセット
$_SESSION['error_status'] = 0;
print_r($_SESSION);
// print_r($_SESSION);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
  </head>
  <form action="register_submit.php" method="post" >
    <table border="0">
  <tr>
  <td>ID</td>
  <td><?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8"); ?></td>
  <td>メールアドレス</td>
  <td><?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8"); ?></td>
  </table>
  <input type="hidden" name="id" value="<?php echo htmlspecialchars($id , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="mail" value="<?php echo htmlspecialchars($mail , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="password" value="<?php echo htmlspecialchars($password , ENT_QUOTES , "UTF-8") ?>" >
  <input type="hidden" name="token" value="<?php echo htmlspecialchars($_SESSION['token'] , ENT_QUOTES , "UTF-8") ?>" >
  <input type="submit" value="登録">
  <input type="reset" value="リセット">
  <input type="button" value="戻る" onclick="history.back();">
  </form>
  </body>
  </html>
?>  
```
  • PHP

    38437 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る