

初めまして。  
PHPを3ヶ月前に勉強し始めたもので、現在PHP+MySQLで初歩的なウェブアプリを作ろうと試行錯誤しています。まずは簡単な発注書を作ってみようと始めたのでが、フォームの入力で躓き、ネットで調べてますがうまくいかないので教えて頂けると幸いです。

入力項目ですが、

  * 日付
  * 注文先  
  

    * 企業名
  

    * 支店名
  

  * 注文項目  
  

    * 大分類
  

    * 中分類
  

    * 小分類
  

    * 単価
  

    * 数量
  

    * 総額
  

となってます。  
日付、注文先、注文項目毎に選定ボタンを用意して色々と試行錯誤しているのですが、複数の実行ボタンがあるせいで、入力した項目が消えてしまいます。つまり、日付確定ボタンを押した後に、注文先確定ボタンを押すと入力した日付が消えてしまうといった感じです。`＄_COOKIE`も試してはいるのですが、なかなかうまく行きません。どなたかこういった販売管理ツールをPHPで構築されたことがあればご教示頂けると幸いです。私が目指す仕様は以下の通りです。よろしくお願い致します。

★ やりたいこと：  
①.注文日付を選択  
② dcodeというINPUT欄に品目コードを入れて品目をDBから抽出  
③ 全てのデータを入れて発注書を作成

★ 困っていること：  
日付を入れても、set_itemボタンを押すと消えてしまう

function show_item($counter)  
{

[code]

    // PDO情報
    $dbhost_name = "localhost";  
    $database = "xxx";      
    $username = "yyy";           
    $password = "zzz"; 
    $pdo = new PDO('mysql:host='.$dbhost_name.';dbname='.$database, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    
    
    
    // 品目情報取得
    $filter_item = "";
    $var1 = "set_item" . $counter;
    $var2 = "dcode" . $counter;
    
    if(isset($_POST[$var1]))
        {
        $filter_item = $_POST[$var2];
        $sql_item = "SELECT type_name, prod_name, item_name FROM mst_item WHERE dcode = '{$filter_item}'";
    
        // PDOデータ取得
        foreach ($pdo -> query($sql_item) as $lst_item) 
            {
            ${"type".$counter} = $lst_item['type_name'];
            ${"prod".$counter} = $lst_item['prod_name'];
            ${"item".$counter} = $lst_item['item_name'];
           }
        }
    
    
    // 品目選択テーブルの表示
    echo '<tr>' . "\n";
    echo '<td><input type="text" name="dcode' . $counter . '"></td>' . "\n";
    echo '<td><input type="submit" name="set_item' . $counter . '" value="選択"></td>' . "\n";
    echo '<td style="width: 100px;"><input type="text" name="type_name" value="' . ${"type".$counter} . '"></td>' . "\n";
    echo '<td style="width: 100px;"><input type="text" name="prod_name" value="' . ${"prod".$counter} . '"></td>' . "\n";
    echo '<td style="width: 100px;"><input type="text" name="item_name" value="' . ${"item".$counter} . '"></td>' . "\n";
    echo '<td><input type="text" name="place' . $counter . '" id="div_item"></td>' . "\n";
    echo '<td><input type="text" name="quant' . $counter . '" id="div_item"></td>' . "\n";
    echo '<td>' . "\n";
    echo '<select name="base' . $counter . '" id="div_item">' . "\n";
    echo '<option value="個">個</option>' . "\n";
    echo '<option value="箱">箱</option>' . "\n";
    echo '<option value="kg">kg</option>' . "\n";
    echo '<option value="g">g</option>' . "\n";
    echo '</select>' . "\n";
    echo '</td>' . "\n";
    echo '<td><input type="text" name="unit' . $counter . '" id="div_item"></td>' . "\n";
    echo '<td><input type="text" name="sum' . $counter . '" id="div_item"></td>' . "\n";
    echo '</tr>' . "\n";
    echo "\n";
    
    }
    
[/code]

日付 "> 取扱コード 操作ボタン 種類 品目 品種 産地 数量 単位 単価 小計


CC BY-SA 3.0
2015-02-15T02:18:23.930
6503
2015-02-21T01:17:10.387
2015-02-19T17:45:41.810
8284
8284
question
javascript php html
フォームの入力が消えないようにするには


状況とあっているかわかりませんが、ごく単純な、`<input type="date">`を使うphpを書いてみましたので参考にしてみてください。  
ファイルはutf-8で保存するか、環境に併せて meta charset の文字コード指定を変更してください。

[code]

    <?php
    $ex3val = "";
    if (isset($_POST["example3"])){
      // 値が送られてきていたらその値を採用する
      $ex3val = htmlspecialchars($_POST["example3"]);
    }
    ?><html lang="ja">
    <meta charset="UTF-8">
    <body>
    <form method="post">
      <div>
        <!-- 工夫無し -->
        いつも消える：<input type="date" name="example1">
      </div>
      <div>
        <!-- 初期値あり -->
        いつも2012/02/16：<input type="date" name="example2" value="2012-02-16">
      </div>
      <div>
        <!-- 初期値はphpで設定 -->
        ボタン後も残る：<input type="date" name="example3" value="<?php echo $ex3val; ?>"><br/>
      <input type="submit" value="submit">
      </div>
    </form>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-02-15T04:50:10.473
6509
2015-02-15T04:50:10.473
728
6503
answer


Webシステムについての誤解があるように思います。

ブラウザはsubmitするとサーバの返事を待つのですが、その内容がHTMLまたはテキストであったらその内容で画面を更新しようとします。（以前の画面は全部なくなります）  
なので、先の動作で日付を入れてもらって、それを次の画面に表示したいなら日付の情報が入っているHTMLを作ってブラウザに渡す必要があります。  
今回ならば、次の画面で品目コードを入れてもらって返送してもらう際に、日付はやはりブラウザから送ってもらう必要があります。たとえ変更がなくても、サーバは以前の日付は覚えていないのでブラウザが送らなければHTMLを作ることはできません。（他のところに保存する方法はありますが、この例で使用するのはあまり適切とは思えないし、書くと混乱されると思うので割愛します）  
変更したくないけど、送ってほしいデータがある場合inputタグにtype="hidden"という属性を付けて次のsubmitで送ってもらえるようHTMLの中に埋めておきます。  
そういったものを全部formタグで囲んでHTMLを作れば意図した動作になるのではないでしょうか。

ただ、今日ではそういったシステムの作り方はあまりされていなくて、Ajaxという機能を利用して画面の一部だけを更新するプログラミングが主流です。  
それと、例のプログラムの中に$_POSTからSQLを生成する処理がありますが、こういった処理はセキュリティ面で非常に危険なので止めた方がいいです。  
全般的にいえることは、独学ではなく一度誰かに教えてもらうのが早道なのではないかと思います。


CC BY-SA 3.0
2015-02-21T01:17:10.387
6847
2015-02-21T01:17:10.387
8136
6503
answer