以下のコードにつきまして、お聞きしたいことがございます。
php
1<?php 2session_start(); 3include 'shop_class.php'; 4 5if(!isset($_SESSION['id'])){ 6 header('Location:login.php'); 7} 8 9$shop = new Shop('mysql:host=localhost;dbname=ec_website','root','12345'); 10$product_list = $shop->line_up_product(); 11$stock_list =$shop->display_quantity(); 12$success_msg = ''; 13 14 15 16if($_POST){ 17 // var_dump($_POST); 18 // exit(); 19 $user_id = intval($_SESSION['id']); 20 $product_name = $_POST['name']; 21 22 $img = $_POST['img']; 23 $price = $_POST['price']; 24 $product_id = intval($_POST['product_id']); 25 26 var_dump($product_id); 27 //exit(); 28 29 $item_check = $shop->cart_check($user_id,$product_id); 30 //var_dump($item_check); 31 32 33 34 35 if(!$item_check){ 36 // try{ 37 $shop->add_select_item($user_id,$product_id); 38 $shop->decrease_stock($product_id); 39 // }catch(PDOException $e){ 40 // echo $e->getMessage(); 41 // } 42 43 echo __LINE__; 44 $success_msg = 'カートに登録しました。'; 45 header('Location:top.php'); 46 //exit(); 47 48 }else{ 49 $shop->update($product_id); 50 $shop->decrease_stock($product_id); 51 echo __LINE__ . PHP_EOL; 52 $success_msg = 'カートに登録しました。'; 53 header('Location:top.php'); 54 //exit(); 55 } 56 57} 58 59?> 60 61 62<!DOCTYPE html> 63<html lang="ja"> 64<head> 65 <meta charset="UTF-8"> 66 <link type="text/css" rel="stylesheet" href="./css/top.css"> 67 <title>トップページ</title> 68</head> 69<body> 70 <header class="header_box"> 71 <a href="top.php" class="top_logo"> 72 <img class="logo" src="./images/logo.png" alt="CodeShop"> 73 </a> 74 75 <p class="user_name"> 76 ユーザー名:<?php echo $_COOKIE['name']; ?> 77 </p> 78 <a href="cart.php"> 79 <img src="./images/cart.png"> 80 </a> 81 <a href="logout.php" class="logout"> 82 ログアウト 83 </a> 84 </header> 85 <p><?=$success_msg ?></p> 86 <div class="content"> 87 88 <?php for($i = 0; $i < count($product_list); $i++): ?> 89 <?php 90 $list = $product_list[$i]; 91 $stock = $stock_list[$i]; 92 // var_dump($list['id']); 93 94 ?> 95 96 <div class="content_list"> 97 <img src="<?=$list['img']?>" width="300px" height="300px"> 98 <div class="wrap_content"> 99 100 <p class="item_name"><?=$list['name']?></p> 101 <!-- <?php var_dump($list['item_id']); ?> --> 102 103 <p>¥<?=$list['price']?></p> 104 </div> 105 <?php if($stock['stock'] > 0): ?> 106 <form action="top.php" method="post"> 107 <input type="submit" value="カートに入れる" class="cart_send"> 108 <input type="hidden" name="name" value="<?=$list['name']?>"> 109 <input type="hidden" name="img" value="<?=$list['img']?>"> 110 <input type="hidden" name="price" value="<?=$list['price']?>"> 111 <input type="hidden" name="product_id" value="<?=$list['id']?>"> 112 <input type="hidden" name="user_id" value="<?=$_SESSION['id']?>"> 113 <?php else: ?> 114 <p class="err_msg"> 売り切れ</p> 115 <?php endif;?> 116 </form> 117 </div> 118 119 <?php endfor;?> 120 121 </div> 122 123 124</body> 125</html> 126
上記コードを実行した結果の画像が、下記になります。
カートに入れるボタンを押す(POST)すると、「if($_POST){」移行の処理がなされ、データベース接続処理などを行っているのですが、F5の更新により、post処理が2重にされないため、データベース接続処理が終わった後、「header('Location:top.php');」を行っております。しかしheaderで飛ばしてしまうと、成功を表示する為の$success_msgの値がリセットされてしまい、成功メッセージが表示できません
上記の問題を解決するには、どうすれば良いでしょうか?
ご助言頂ければ幸いです。
よろしくお願いします。
追記です。
以下は自身へのリダイレクトを行った際のセッション変数へ成功メッセージを格納したコードです
php
1<?php 2session_start(); 3include 'shop_class.php'; 4 5if(!isset($_SESSION['id'])){ 6 header('Location:login.php'); 7} 8 9$shop = new Shop('mysql:host=localhost;dbname=ec_website','root','12345'); 10$product_list = $shop->line_up_product(); 11$stock_list =$shop->display_quantity(); 12$success_msg = ''; 13 14 15 16if($_POST){ 17 // var_dump($_POST); 18 // exit(); 19 $user_id = intval($_SESSION['id']); 20 $product_name = $_POST['name']; 21 22 $img = $_POST['img']; 23 $price = $_POST['price']; 24 $product_id = intval($_POST['product_id']); 25 26 var_dump($product_id); 27 //exit(); 28 29 $item_check = $shop->cart_check($user_id,$product_id); 30 //var_dump($item_check); 31 unset($_SESSION['success_msg']); 32 33 34 35 if(!$item_check){ 36 // try{ 37 $shop->add_select_item($user_id,$product_id); 38 $shop->decrease_stock($product_id); 39 // }catch(PDOException $e){ 40 // echo $e->getMessage(); 41 // } 42 43 echo __LINE__; 44 45 $_SESSION['success_msg'] = 'カートに登録しました。'; 46 47 48 49 header('Location:top.php'); 50 //exit(); 51 52 }else{ 53 $shop->update($product_id); 54 $shop->decrease_stock($product_id); 55 echo __LINE__ . PHP_EOL; 56 $success_msg = 'カートに登録しました。'; 57 $_SESSION['success_msg'] = $success_msg; 58 header('Location:top.php'); 59 60 //exit(); 61 } 62 63} 64 65?> 66 67 68<!DOCTYPE html> 69<html lang="ja"> 70<head> 71 <meta charset="UTF-8"> 72 <link type="text/css" rel="stylesheet" href="./css/top.css"> 73 <title>トップページ</title> 74</head> 75<body> 76 <header class="header_box"> 77 <a href="top.php" class="top_logo"> 78 <img class="logo" src="./images/logo.png" alt="CodeShop"> 79 </a> 80 81 <p class="user_name"> 82 ユーザー名:<?php echo $_COOKIE['name']; ?> 83 </p> 84 <a href="cart.php"> 85 <img src="./images/cart.png"> 86 </a> 87 <a href="logout.php" class="logout"> 88 ログアウト 89 </a> 90 </header> 91 92 <p><?php if(isset($_SESSION['success_msg'])){ echo $_SESSION['success_msg'];} ?></p> 93 <div class="content"> 94 95 <?php for($i = 0; $i < count($product_list); $i++): ?> 96 <?php 97 $list = $product_list[$i]; 98 $stock = $stock_list[$i]; 99 // var_dump($list['id']); 100 101 ?> 102 103 <div class="content_list"> 104 <img src="<?=$list['img']?>" width="300px" height="300px"> 105 <div class="wrap_content"> 106 107 <p class="item_name"><?=$list['name']?></p> 108 <!-- <?php var_dump($list['item_id']); ?> --> 109 110 <p>¥<?=$list['price']?></p> 111 </div> 112 <?php if($stock['stock'] > 0): ?> 113 <form action="top.php" method="post"> 114 <input type="submit" value="カートに入れる" class="cart_send"> 115 <input type="hidden" name="name" value="<?=$list['name']?>"> 116 <input type="hidden" name="img" value="<?=$list['img']?>"> 117 <input type="hidden" name="price" value="<?=$list['price']?>"> 118 <input type="hidden" name="product_id" value="<?=$list['id']?>"> 119 <input type="hidden" name="user_id" value="<?=$_SESSION['id']?>"> 120 <?php else: ?> 121 <p class="err_msg"> 売り切れ</p> 122 <?php endif;?> 123 </form> 124 </div> 125 126 <?php endfor;?> 127 128 </div> 129 130 131</body> 132</html> 133
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/04 12:27
2019/05/04 20:31 編集
2019/05/04 21:56
2019/05/04 23:35
2019/05/04 23:42
2019/05/04 23:46
2019/05/04 23:55
2019/05/05 00:01
2019/05/05 00:09
2019/05/05 00:14
2019/05/05 00:18
2019/05/05 00:19
2019/05/05 00:25
2019/05/05 00:26
2019/05/05 00:47
2019/05/05 00:58 編集
2019/05/05 00:55
2019/05/05 01:01
2019/05/05 01:05
2019/05/05 01:07
2019/05/05 01:11
2019/05/05 01:19
2019/05/05 01:23
2019/05/05 01:45