• 締切済み

PHPでの確認画面について

入力フォーム(html)に必要事項を入力し PHPでデータを受け取り、Mysqlに保存後 PDF出力しております。 DBに書きこむ前に確認画面を出したいのですが 以下のプログラム1つで行なうことは可能でしょうか? それとも、プログラムを分ける必要がありますか? フォームに入力 ↓ 確認画面 ↓ OKならDBへ出力&PDF出力。 NGなら入力フォームに戻りたいです。 PHP初心者です。 どうぞ、宜しくお願いします。 ----- <?php //#環境設定 mb_language("Japanese"); mb_internal_encoding ("utf8"); $errflg = 0; $host = 'localhost'; $user = 'xxxxxx'; $password = 'xxxxxx'; $database = 'xxxxxx'; //DBへ接続開始 $link = mysqli_connect($host, $user, $password, $database); if (!$link) { print("接続できませんでした"); exit(); } /* 文字セットを SJIS に変更します */ mysqli_set_charset($link, "SJIS"); //オートコミットOFF mysqli_autocommit($link, FALSE); //重複チェック $account = $_POST["name"]; $sql = 'select * from xxxxx where name = "'.$name.'";'; $rs = mysqli_query($link, $sql); $rows = mysqli_num_rows($rs); if($rows == 0){ } else {   echo "【".$name."】は既に登録されています。<BR>"; $errflg = 1; } // ステートメントの設定 $sql = 'INSERT INTO schoolmate (id,name) VALUES(?,?)'; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_bind_param( $stmt,"ss", $id, $name ); // 入力チェック //名前(性) if($_POST['name'] == ""){ echo "【名前】が未入力です。<BR>"; $errflg = 1; } ~省略~ // 値設定 if($errflg == 0){ $id = $_POST["id"]; $name = $_POST["name"]; //SQL文を実行する mysqli_stmt_execute($stmt); //コミットする mysqli_commit($link); //ステートメントクローズ mysqli_stmt_close($stmt); //DBへの接続を切断 mysqli_close($link); require('/php/includes/fpdf/mbfpdf.php'); $pdf=new MBFPDF(); $pdf->AddMBFont(GOTHIC ,'SJIS'); $pdf->AddMBFont(PGOTHIC,'SJIS'); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont(GOTHIC,'',10); $pdf->Write(8,"(xxxxx)\n"); $pdf->Cell(0,30,'平成  年  月  日',0,1,R); $pdf->SetFont(GOTHIC,'',12); $pdf->Cell(0,20,'氏 名             印',0,1,R); $pdf->SetFont(GOTHIC,'',14); $pdf->Cell(63,10,'氏名(漢字)',1); $pdf->Cell(63,10,$id,1); $pdf->Cell(63,10,$name,1,1); ~省略~ $pdf->Output(); }else{ $errflg = "1"; } ?>

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

確認画面か 保存画面かの どちらのモードで実行しているかを示す変数を使って 切り替えれば、1ファイルで実装することは可能です。 特に、DBの項目が増えるような メンテナンス作業が発生したときのことを考えると、 チェックや保存の処理部など同じことをいろんなファイルに書くよりも、共通化するのが 望ましいです。 ただし、共通部だけincludeファイル化してしまえば同じことなので、 確認画面と 保存画面を1ファイルにするか 分けるかというのは、別の話になります。

regal38
質問者

お礼

ありがとうございます。 参考になるプログラムがあれば教えて頂けないでしょうか?

noname#147388
noname#147388
回答No.1

1ファイルでの実装は可能ではあるけど分けたほうがいい。

regal38
質問者

お礼

分けて作成し、なんとか完成しました。 ありがとうございました。

関連するQ&A

  • php+mysqlでの重複チェックについて

    phpからCSVに吐き出して重複チェックを考えていたのですが 大変そうなので、mysqlを導入し、php+mysqlで重複チェックを行なうことにしました。 nameをユニークインデックスにしたところ 同じ名前は登録されなくなったのですが できれば、「その名前は登録済みです!」と表示させたいです。 エラーコードかなにかを使って 判断するのでしょうか? 以上、宜しくお願いいたします。 -----文字数の関係で一部削除しております。----- <?php //DBへ接続開始 $link = mysqli_connect($host, $user, $password, $database); if (!$link) { print("接続できませんでした"); exit(); } /* 文字セットを utf8 に変更します */ mysqli_set_charset($link, "SJIS"); //オートコミットOFF mysqli_autocommit($link, FALSE); // ステートメントの設定 $sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)'; $stmt = mysqli_prepare($link, $sql); mysqli_stmt_bind_param( $stmt,"ss", $id, $name ); // 値設定 if($errflg == 0){ $id = $_POST["id"]; $name = $_POST["name"]; //SQL文を実行する mysqli_stmt_execute($stmt); //コミットする mysqli_commit($link); //ステートメントクローズ mysqli_stmt_close($stmt); ?>

    • ベストアンサー
    • PHP
  • データベース接続 ログインフォーム

    PHPにてログインフォームを作成しています。 PHPは初心者のため、ご教授いただけたらと思います。 下記の記述方法はPHP逆引きレシピという参考書を元に作成しています。 <?php //DB設定 $DB_HOST = 'localhost'; $DB_USER = 'root'; $DB_PASS = '0000; $DB_NAME = 'members'; if (count($_POST) == 0) { echo <<< EOL <form method="post" action="./main.php"> ユーザーID: <input name="id" /> PASSWORD: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> EOL; } else { $link = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if (mysqli_connect_errno()) { die('データベースエラー'); } // クエリを準備 $sql = 'SELECT * FROM members WHERE id=? AND password=?'; $msg = '認証NG'; if ($stmt = mysqli_prepare($link, $sql)) { mysqli_stmt_bind_param($stmt, 'ss', $_POST['id'], $_POST['password']); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); $count = mysqli_stmt_num_rows($stmt); mysqli_stmt_close($stmt); if ($count == 1) { $msg = '認証OK' ; } } echo $msg; } ?> という記述ですが、IDとPASSWORDがあっていれば「認証OK」と表示されます。 文字の表示ではなく次のページ(main.php)が表示されません。 どこを編集、記述したらmain.phpが表示されるのでしょうか? また、間違っていたら「認証NG」と表示されるのですが、 この文言のみの表示でフォームが表示されません。 間違っていたらフォームの上に表示させたいのですが、どのように編集、記述したらよろしいでしょうか? 例↓ *ここに間違っていたら認証NGと表示させる <form method="post" action="./main.php"> ユーザーID: <input name="id" /> PASSWORD: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> 質問ばかりで申し訳ありません。 本やネットなどで色々としらべたのですが、自分の求めているサイトや記述方法が見つかりませんでした。 大変申し訳ないのですが、参考記述または参考サイトなどがありましたらご教授ください。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでDBから比較結果を取得する関数が作りたい

    タイトルの通りで、まず、データベース(MySQL)の例を以下。 ユーザー    単語  田中    初志貫徹  鈴木    一石二鳥  品川    四面楚歌 /***以下省略****/ のような感じでデータが入っています。 (なお、ユーザーは一意な値となっています。単語は重複します。およそ2万件登録されています。) ユーザーの名前を入力するとDB内を参照し、その組となる単語を出力する関数を考えています。 一応、以下のように作ってみたのですが、5つのテストデータを呼び出すだけで、3sもかかってしまいました。(PHP ver 5.4.1.6 eAccelerator適応済み環境にて確認) 比較処理の速度が遅く、使い物になりません。 もっと実行速度が速くなるような書き方を教えていただけないでしょうか? よろしくお願いいたします。m(_ _)m /************以下、関数のソースコード*********/ function conp_db($name){ //DBアクセス用変数 $cflag=true; $host = HOST; $user = USER; $password = PASSWORD; $database = DB; $table = TABLE; $data=''; $res = mysqli_connect($host, $user, $password,$database); if(!$res) { printf("MYSQLの接続に失敗しました。: %s\n",mysqli_connect_error()); exit(); } mysqli_set_charset($res,'utf8'); if($stmt = mysqli_prepare($res, "SELECT user,word from {$table}")) { mysqli_stmt_execute($stmt); //取得変数固定 mysqli_stmt_bind_result($stmt,$row['user'],$row['word']); while (mysqli_stmt_fetch($stmt) and $cflag) { if($name === $row['user'] and $cflag){ $data = $row[word']; $cflag = false; }else{ $data = 'nobody'; } } mysqli_stmt_close($stmt); } mysqli_close($res); return $data; }

    • ベストアンサー
    • PHP
  • PHPとMySQLとの連携エラー

    環境はWin 8.1, Apache 24, PHP 5.5.6, MySQL 5.5です。 My SQLとの連携で、以下のエラーが出てしまいました。 ---------------------------------------------エラー文ここから Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\Program Files\Apache\Apache24\htdocs\sample\省略.php on line 11 データベースの選択に失敗しました。 ---------------------------------------------エラー文ここまで ---------------------------------------------コードここから <?php $url = "省略"; $user = "省略"; $pass = "省略"; $db = "省略"; // mysqliへ接続 $link = mysqli_connect($url,$user,$pass) or die("mysqliへの接続に失敗しました。"); // データベースを選択する $sdb = mysqli_select_db($link, $db) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM省略"; $result = mysqli_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysqli_num_rows($result); //結果保持用メモリを開放する mysqli_free_result($result); // mysqliへの接続を閉じる mysqli_close($link) or die("mysqli切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> <title>全件表示</title> </head> <body> 接続ID:<?= $link ?><br /> 選択の成否:<?= $sdb ?><br /> 結果ID:<?= $result ?><br /> 行数:<?= $rows ?><br /> </body> </html> ---------------------------------------------コードここまで 11行目はコメント文「データベースを選択する」です。 ただ、実際の間違いはその下ですよね? ネットで検索してみたつもりですが、良い情報はありませんでした。 直訳を考えると、mysqli_select_db($link の部分がmysqliであるべきなんですか? 少なくともmy SQLへの接続には成功していると取っていいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの書き方について

    PHPを独学で勉強中で、気になったことがあるので質問させていただきます。 最初に買った書籍とその次に買った書籍で書き方が違うところがあるので、普通はどちらでやるのか、また、使い分けがあるのかが知りたいです。 たとえば、データベースを1行ずつ取り出す処理で、1冊目では $pdo = new PDO($dnsinfo,$USER,$PW); $sql = "SELECT * FROM ○○"; $stmt = $pdo->prepare($sql); $stmt->execute(null); $res = ""; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $res .= $row['△△'] ."," .$row['□□'] ."<br>\n"; } ・・・というコードがあったのですが、2冊目には同じような処理が mysqli_fetch_assoc()を使って書かれていたり、 接続の仕方も1冊目では「new PDO($dnsinfo,$USER,$PW);」を使って書かれているのが、2冊目では「mysqli_connect()」になっていたり、 他にも同じような処理がよく似たコードで書かれています。 調べてみると、PHP5.5から1冊目のやり方になった・・・ような記事を見つけたのですが、どちらの本もPHP5.5と書いてあり、いまいちよくわかりません。 詳しい方いらっしゃいましたらご教示お願いいたします。

    • ベストアンサー
    • PHP
  • 突如!接続エラー!?php

    いつもお世話になりありがとうございます。 標記の件。 下記のエラーがlocalhost/index.php/で出ました。 接続失敗SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for $host failed: ���̂悤�ȃz�X�g�͕s���ł��B 大変恐縮ではございますが、下記のコードを吟味して頂けないでしょうか? 度々申し訳ございません。 宜しくお願い申し上げます。      記 index.php <?php require_once ('blog.php'); $blog = new Blog(); $blogData = $blog->getAll(); function h($s){ return htmlspecialchars($s, ENT_QUOTES,"UTF-8"); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <p><a href="/form.html">新規作成</a></p> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <th>投稿日時</th> <tr> <?php foreach ($blogData as $column): ?> <tr> <td><?php echo h($column['title']) ?></td> <td><?php echo h($blog->setCategoryName($column['category'])) ?></td> <td><?php echo h($column['post_at']) ?></td> <td><a href="/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td> <td><a href="/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td> <td><a href="/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td> </tr> <?php endforeach; ?> </body> </html> env.php <?php define('DB_HOST','localhost'); define('DB_NAME','blog_app'); define('DB_USER','blog_user'); define('DB_PASS','**********'); ?> dbc.php <?php require_once('env.php'); class Dbc { protected $table_name; protected function dbConnect() { $host = DB_HOST; $dbname = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = 'mysql:host=$host;dbname=$dbname;blog_app;charset=utf8'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } } ?> <p><a href="/">戻る</a></p> 大変、お手数をおかけします。 どうか教えてください。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • セキュリティ

    プログラム初心者です PDOやる前にmysqliの手続き型で勉強中です 手続き型でフォームから入力された値をこんな感じにするのは危険でしょうか? 悪意を持ったユーザーに簡単に突破されますか? if(!empty($_POST['name'])){ $sql = sprintf('SELECT * FROM hoge WHERE name="%s"', mysqli_real_escape_string($link,$_POST['name']) ); } 更新するとき if(!empty($_POST['name'])){ mysqli_query($link,sprintf('UPDATE hoge SET name="%s" WHERE id=%d', mysqli_real_escape_string($name), mysqli_real_escape_string($link,10) )); } よろしくお願いします

    • ベストアンサー
    • PHP
  • phpでフォーム登録したものがチェックされない

    初めて投稿します。 入力フォームから受け取ったuserIDをMYSQLを呼び出し重複がないかチェックした上で、重複があればエラー出力、なければ登録へ、といった形を考えています。 mysqladminから直接入力・保存したものはエラー検出するのですが、入力フォームから保存したものはエラー検出しません。 この原因・理由と解決方法が分かる方、どうか教えていただけないでしょうか? テーブルは以下の形で保存されています。 テーブル名 touroku idはint、dateはdatetime、他はvarchar(50)で作成 idにA_I、primary key設定、userIDのkeyにmulが設定されている 文字コードはutf-8で設定 id | userID | password | email | name |date | 1 | aaaa | aaaa | aaaa | aaaaa | |・・・※1 A 2 |ああああ |ああああ  |ああああ |ああああ | |・・・ B 3 | bbbb | bbbb | bbbb | bbbb | |・・・ B 4 | cccc | cccc | cccc | cccc | |・・・ A ※1 A・・・mysqladminからの直接入力・保存  B・・・入力フォームからの入力・保存 問題のプログラム(フォーム確認部分・userIDの部分のみ抜粋) 文字コードはutf-8で設定 <?php //DB設定 $DB_HOST = 'localhost'; $DB_USER = '○○'; $DB_PASS = '○○'; $DB_NAME = '○○'; $link = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if (mysqli_connect_errno()) { die('データベースエラー'); } extract($_POST); $error_flag=0; //ログインID入力チェック if(empty($userID)){ echo '<p><span>必須</span>ログイン用の名前を入力して下さい。</p><br />'; $error_flag=1; }elseif($sql = "SELECT userID FROM touroku WHERE userID = '".$userID."' "){ $result = mysqli_query($link, $sql); $rows = mysqli_num_rows($result); ※2 if($rows == 0){ }else{ echo '<p><span>必須</span>ログインID欄に入力した'.$userID.'は既に使用されています。</p><br />'; $error_flag = 1; } }               ・               ・               ・ ?> ※2 この段階でvar_dump($rows);で型と変数を確認してみると、 userIDがaaaaのときのみ int(1)、他はint(0) どうか、お願い申し上げます。

    • 締切済み
    • PHP
  • 文字化け

    下記ソースの商品の部分が 文字化けします。 何か改善策ないでしょうか? <?php require_once('mbfpdf.php'); $GLOBALS['EUC2SJIS']=true; $pdf=new MBFPDF(); $pdf->AddMBFont(PMINCHO,'SJIS'); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont(PMINCHO,'',14); $pdf->Cell(30,10,"商品",1,1,'C'); $pdf->Cell(30,10,$_POST['syouhin'],1,0,'C'); $pdf->Cell(30,10,$_POST['conto'],1,0,'C'); $pdf->Cell(30,10,$_POST['thank'],1,1,'C'); $pdf->Cell(30,10,$_POST['xyz'],1,0,'C'); $pdf->Cell(30,10,$_POST['opq'],1,0,'C'); $pdf->Cell(30,10,$_POST['stu'],1,0,'C'); $pdf->Output(); ?>

    • 締切済み
    • PHP
  • php パラメータ

    新規登録として登録できたら別ウインドウに遷移せずそのままtopに戻し戻ってきたらデータが登録されているようにしたいですがなかなか出来ません 調べたら、exec関数を使えばできるとのことですが $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); こんな例がありましたが自分の力ではこのプログラムのどこを修正すればtop.phpに返ってくるかわかりません 下記は新規登録を行うための入力フォームです 登録するボタンを押したらそのままtopに移動したいのですがいまはinsert.phpに飛んでしまいます regist.php <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"></A> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 下記はinsert.phpです <!--insert.php 登録完了--> <html> <body> <blockquote> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != '') { $id = mysqli_real_escape_string($con, $_POST['ID']); $name = mysqli_real_escape_string($con, $_POST['NAME']); $addr = mysqli_real_escape_string($con, $_POST['ADDR']); $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; } else { echo "<br><br>データが未入力の箇所があります。すべてデータを入力してください"; } mysqli_close($con); $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); ?> <br><br><br> <a href="http://localhost/regist.php"> <INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> <br><br><br> <A HREF="http://localhost/top.php"> <INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> </blockquote> </body> </html> どこを直せばいいですか? 本格的に直さないとできないですか?

    • ベストアンサー
    • PHP

専門家に質問してみよう