こんにちは、
今、PHPを独学しています。
商品登録ページ→入力チェックページに至る所を作っております。
入力チェックページでは、金額入力チェックを!preg_match('/¥A[0-9]+¥z/',$price)を使ってチェックしているですが、半角整数字で入力してもエラーが表示されて、次のページへ飛べない状態でした。正規表現の書き方間違っていないと思いますが。。。但し、is_numeric関数を使ってチェックするとちゃんと正しく動作します。
でも、なぜ、preg_matchを使ったら、ダメなのか?!。。。
因みに、PCはMacを使用しています。
ご存知の方がお手数をおかけいたしますが、ご教示お願い致します。
何卒よろしくお願いいたします。
入力ページとチェックページは次の通りです。
まず、pro_add.php
session_start(); require 'lib/functions.php'; //トークンを確認 if(!isset($_SESSION['token'])){ $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); } $token = $_SESSION['token']; require 'header.php'; ?> <div class="staff_add"> <p>商品追加</p> <?php //errorがあったら表示 if(isset($_SESSION['error'])){ foreach($_SESSION['error'] as $value){ echo '<span class="error">' . h($value) . '</span>' . '\n'; } } //変数にpostされたデータを代入 $name = isset($_POST['name']) ? $_POST['name'] : ''; $price = isset($_POST['price']) ? $_POST['price'] : ''; ?> <form action="pro_add_check.php" method="post"> <p>商品名を入力してください。</p> <p><input type="text" name="name" value="<?php echo h($name); ?>" maxlength="100" required></p> <p>価格を入力してください。</p> <p><input type="text" name="price" value="<?php echo h($price); ?>" required></p> <div> <!--<input type="button" onclick="history.back()" value="戻る">--> <input type="hidden" name="token" value="<?php echo h($token); ?>"> <input type="submit" value="確認"> </div> </form> </div> <?php require 'footer.php'; コード
次、pro_add_check.php
<?php session_start(); require 'lib/functions.php'; ini_set("display_errors", On); error_reporting(E_ALL); //変数初期化 $name = ""; $price = ""; $token = ""; if($_SERVER["REQUEST_METHOD"] == "POST"){ //トークンをcheck if(isset($_POST['token']) && isset($_SESSION['token'])){ $token = $_POST['token']; if($token != $_SESSION['token']){ die('不正アクセスですが発生!'); } }else{ die('操作が間違っています。最初からやり直してください。'); } //変数にpostされたデータを代入 $name = isset($_POST['name']) ? $_POST['name'] : ''; $price = isset($_POST['price']) ? $_POST['price'] : ''; var_dump($price); $error = []; //nameチェック if(trim($name) == ''){ $error[] = '商品名を入力してください'; } //priceチェック if(!preg_match('/¥A[0-9]+¥z/',$price)){ $error[] = '価格をきちんと入力してください。'; } // if(is_numeric($price) == false){ // $error[] = '価格をきちんと入力してください。'; // } $_SESSION['error'] = $error; //error数の確認 if(count($error) > 0){ header('Location: ./pro_add.php'); //確認画面を表示 }else{ require 'header.php'; ?> <div class="staff_add"> <p>商品を追加</p> <form action="pro_add_done.php" method="post"> <input type="hidden" name="name" value="<?php echo h($name); ?>"> <input type="hidden" name="price" value="<?php echo h($price); ?>"> <p>商品名</p> <p><?php echo h($name); ?></p> <p>価格</p> <p><?php echo h($price); ?>円</p> <div> <input type="button" onclick="history.back()" value="戻る"> <input type="hidden" name="token" value="<?php echo h($token); ?>"> <input type="submit" value="確認"> </div> </form> </div> <?php } } require 'footer.php';
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/21 07:25