質問編集履歴

2 文章の修正

kalon

kalon score 90

2018/04/13 08:53  投稿

一度CRSFエラーを吐いて画面に表示された物が消えない
皆様いつもお世話になっております。
CRSFエラーを吐くようにコードを組んだのですが、一度エラーが画面に表示された後に登録してもエラーメッセージが消えません。どうしたらよいでしょうか?
CRSFエラーを吐くようにコードを組んだのですが、一度エラーが画面に表示された後に新たに登録してもエラーメッセージが消えません。どうしたらよいでしょうか?
ご教授のほどよろしくお願いします。
```PHP
<?php
function insertSQL($post){
   $user = "root";
   $pass = "root";
   try{
       $dbh =new PDO('mysql:host=localhost;dbname=todo;charset=utf8', $user, $pass);
       $stmt = $dbh->prepare("insert into todo values ('', :post)");
       #$stmt -> bindParam(':name', $myname, PDO::PARAM_STR);評価語にバインドされる
       #$stmt -> bindValue(':age', $myage, PDO::PARAM_STR);バインド時に評価される
       $stmt->bindParam(':post', $post, PDO::PARAM_STR);
       $stmt-> execute();
       $stmt = NULL;
   }catch (PDOException $e){
       echo $e->getMessage();
       die();
   }
}
function selectSQL(){
   $user = "root";
   $pass = "root";
   try{
       $dbh = new PDO('mysql:host=localhost;dbname=todo;charset=utf8', $user, $pass);
       $stmt = $dbh->query("select todo from todo");
       #$todo_list = array();
       foreach ($stmt as $value) {
           #$todo_list = "$value[todo]<br>";
           echo"$value[todo]"."<input type='text' value='<?php echo time() ?>'><br>";
       }
   }catch (PDOException $e){
       echo $e->getMessage();
       die();
   }
}
/* トークンをセッションにセット */
function setToken() {
   $token = rtrim(base64_encode(openssl_random_pseudo_bytes(32)),'=');
   $_SESSION['token'] = $token;
}
/* トークンをセッションから取得 */
function checkToken() {
   if(empty($_SESSION['token']) || ($_SESSION['token'] != $_POST['token'])) {
       echo 'CSRFの可能性アリ';
   }
}
/* チェック用関数 */
function checkDump() {
   if (isset($_POST['token'])) {
       var_dump($_SESSION['token']);
       var_dump($_POST['token']);
   }
}
@session_start();
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
   setToken();
   checkDump();
   if (isset($_POST["submit"])){
       insertSQL($_POST["user_todo"]);
   }
} else {
   checkToken();
   checkDump();
}
?>
<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport"
         content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>ToDo List</title>
</head>
<body>
<form action="todo.php" method="post">
   <input type="text" name="user_todo">
   <input type="submit" name="submit" value="登録">
</form>
<?php
selectSQL();
?>
</body>
</html>
```
  • PHP

    24036 questions

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

1 修正依頼

kalon

kalon score 90

2018/04/13 08:50  投稿

一度CRSFエラーを吐いて画面に表示された物が消えない
皆様いつもお世話になっております。
ご教授のほどよろしくお願いします。
```PHP
<?php
function insertSQL($post){
   $user = "root";
   $pass = "root";
   try{
       $dbh =new PDO('mysql:host=localhost;dbname=todo;charset=utf8', $user, $pass);
       $stmt = $dbh->prepare("insert into todo values ('', :post)");
       #$stmt -> bindParam(':name', $myname, PDO::PARAM_STR);評価語にバインドされる
       #$stmt -> bindValue(':age', $myage, PDO::PARAM_STR);バインド時に評価される
       $stmt->bindParam(':post', $post, PDO::PARAM_STR);
       $stmt-> execute();
       $stmt = NULL;
   }catch (PDOException $e){
       echo $e->getMessage();
       die();
   }
}
function selectSQL(){
   $user = "root";
   $pass = "root";
   try{
       $dbh = new PDO('mysql:host=localhost;dbname=todo;charset=utf8', $user, $pass);
       $stmt = $dbh->query("select todo from todo");
       #$todo_list = array();
       foreach ($stmt as $value) {
           #$todo_list = "$value[todo]<br>";
           echo"$value[todo]"."<input type='text' value='<?php echo time() ?>'><br>";
       }
   }catch (PDOException $e){
       echo $e->getMessage();
       die();
   }
}
/* トークンをセッションにセット */
function setToken() {
   $token = rtrim(base64_encode(openssl_random_pseudo_bytes(32)),'=');
   $_SESSION['token'] = $token;
}
/* トークンをセッションから取得 */
function checkToken() {
   if(empty($_SESSION['token']) || ($_SESSION['token'] != $_POST['token'])) {
       echo 'CSRFの可能性アリ';
   }
}
/* チェック用関数 */
function checkDump() {
   if (isset($_POST['token'])) {
       var_dump($_SESSION['token']);
       var_dump($_POST['token']);
   }
}
@session_start();
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
   setToken();
   checkDump();
   if (isset($_POST["submit"])){
       insertSQL($_POST["user_todo"]);
   }
} else {
   checkToken();
   checkDump();
}
?>
<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport"
         content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>ToDo List</title>
</head>
<body>
<form action="todo.php" method="post">
   <input type="text" name="user_todo">
   <input type="submit" name="submit" value="登録">
</form>
<?php
selectSQL();
?>
</body>
</html>
```
  • PHP

    24036 questions

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

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