0

2つのバージョンのデータを表示したいフォームがあります。これに2つの変数を設定できることは知っていますが、postgresデータベースに挿入する方法がわかりません。データを入力し、テーブルに挿入するための新しい番号を入力するためのラベルを取得しました。

これが私がこれまでに持っているものです...

<script>
window.onload = function() {
    <?
    $yesterday = date('Y-m-d', strtotime('-1 day'));
    if ($_REQUEST['start'] == '') {
        $_REQUEST['stores'] = array(1,2,3,7,8,9,17,18,19,23,16,11,4,5,6);
        $_REQUEST['start'] = $yesterday;
    } else {
        $_REQUEST['stores'] = array(1,2,3,7,8,9,17,18,19,23,16,11,4,5,6);
    }
    $_REQUEST['submit'] = 'Get Data'; 
    ?>
}

</script>

<?
// various arrays and db connections we're going to need later 
include('/home/...some_data_goes_here.../db_connect.inc');

$dbx = DB::connect('******');
$dbx->setFetchMode(DB_FETCHMODE_ASSOC);

//get the data based on the date.
$start = $_REQUEST['start'];

//$stores = array(1 => '1,177,18', 2 => '2,277,28', 3 => '3,377,38', 7 => '4,477,48', 8 => '5,577,58', 18 => '338', 19 => '50,51', 9 => '6,677,68', 17 => '8,877,818', 16 => '44,45,47', 11 => '7,770,78', 4 => '11,15,17', 5 => '22,25,27', 6 => '33,35,37');

$formstores = $_REQUEST['stores'];

foreach($stores as $sid => $pcs) {
    $store_name = $db->getOne('SELECT store_name FROM stores WHERE store_id = ?', array($sid));
}

foreach($formstores as $k => $sid) {

        if(empty($storeDataMain)){ //array is empty so make one
            $storeDataMain = array();
        }

        //get the store names
        $store_name = $db->getOne('SELECT store_name FROM stores WHERE store_id = ?', array($sid));
        if(DB::isError($store_name)) { echo '<div class="error">Error '.$store_name->getdebuginfo().'</div>'; return; }

        $tempups = $db->getOne('SELECT sum(count) FROM traffic WHERE store_id = ? AND tdate = ?', array($sid,$start));
        //echo $tempups .' | ';
        if(DB::isError($tempups)) { echo '<div class="error">Error '.$tempups->getdebuginfo().'</div>'; return; }
        $tups = $tempups/2;
        //echo $tups;

        //Build array out and return it 
        $storeDataMain[$store_name] = array('trafficGuests' => number_format(floatval($tups),1,'.',',')); // floatval prevents the numbers from rounding to zero
}   
?>

<h3 class="heading">Traffic Updates</h3>
<p>Enter dates in yyyy-mm-dd format.</p>

<script type="text/javascript" src="/css/prototype.js"></script>
<script type="text/javascript" src="/css/scriptaculous.js"></script>
<script type="text/javascript" src="/css/datepicker.js"></script>
<form name="setTraffic" method="get" action="/traffic/updateTraffic.php">

<!-- Build the table where they can input the date to be changed -->
<table>
    <tr>
        <th>Date</th>
    </tr>
    <tr>
        <td>
            <input type="text" name="start" id="start" value="<?=$_REQUEST['start']?>" alt="mm/dd/yyyy" onblur="if(this.value.length){valid=check_date(this.value);if(!valid){this.value='';this.focus();alert('Invalid date input');}else{this.value=valid;}}" onchange="if(this.value.length){valid=check_date(this.value);if(!valid){this.value='';this.focus();alert('Invalid date input');}else{this.value=valid;}}" onfocus="if(this.value == this.defaultValue) this.value = ''" /></td>
            <script type="text/javascript">
                                var start_picker = new DatePicker({
                                    relative    : 'start',
                                    language    : 'en',
                                    dateFormat  : 'yyyy-mm-dd',
                                    showDuration: 0.1,
                                    closeEffectDuraction: 0.1,
                                    disableFutureDate: true,
                                    disablePastDate: false,
                                    keepFieldEmpty : true
                                });
            </script>
        </td>
    </tr>
</table>
<input class="button" type="submit" name="submit" value="Get Data" id="submit" />
</form>
<form method="post" action="">
    <table>
        <tr>
            <th style="height: 20px; width: 165px; vertical-align: bottom;">Stores</th>
                <? //build the list of stores for the headers.
                    foreach($storeDataMain as $k => $val){
                        echo '<th style="text-align: center; vertical-align:   bottom;">'.$k.'</th>';
                    }
                ?>
        </tr>
        <tr>
            <th style="height: 20px; vertical-align: bottom;">Guests for <?=$start?>    </th>
                <? //format and print out the traffic for each store
                    foreach($storeDataMain as $k => $val){
                    echo '<td style="text-align: center; vertical-align: bottom; font-size: 14px;">'.$val["trafficGuests"].'</td>';
                } 
            ?>
    </tr>  


    <tr>
        <th style="height: 20px; vertical-align: bottom;">Adjustment for <?=$start?></th>
        <? //build the input fields identified based on store id.
                foreach($formstores as $pcs) {
                    echo '<td><input class="newTraffic" type="number" style="width: 65px; text-align: right;" name="new_count" id="'.$pcs.'" value="'.$count.'" />'.$count.'</td>';
                    <script>// get the data ready for inserting into the database
                        if(isset($count)){
                            $count = $_POST['']
                        } else {
                            $count = '';
                        }}

                        if( $_POST ){
                            $count = $_POST["count"];
                            $store_id = $sid

                        $insertCounts = $db->query('INSERT INTO traffic (store_id, thour, tdate, count, door) VALUES ('$sid', )');
                    }
                }
                </script>

                }
            ?>
        </tr>      
    </table>
    <input class="button" type="submit" name="submit2" value="Submit" id="submit" />
</form>


<h5 style="color: #707070;">New Traffic Counts</h5>
<table style="color: #707070;">
        <tr>
            <td style="height: 20px; width: 165px; font-weight: bold; vertical-align: bottom;">Stores</td>
            <? //display the list of stores for the output of the new counts.
                    foreach($storeDataMain as $k => $val){
                        echo '<td style="text-align: center; width: 69px; padding: 4px; font-weight: bold; vertical-align: bottom;">'.$k.'</td>';
                    }
                ?>
        </tr>
        <tr>
            <td style="height: 20px; vertical-align: bottom; font-weight: bold;">Guests for <?=$start?></td>
                <? //format and display the NEW traffic for each store
                    foreach($storeDataMain as $k => $val){
                        $newCount = $val["trafficGuests"] + $count[$pcs];
                        echo '<td style="text-align: center; vertical-align: bottom; font-size: 14px;">'.$newCount.'</td>';
                    } 
                ?>
        </tr> 
</table>
</form>

ページがどのように表示されるかを確認したい場合は、[こちら](https://picasaweb.google.com/105736785937866961668/January22013#5828892865441021874)にアクセスして、入力が数値の調整を取り入れるように設計されているかどうかを確認してください。それはポジティブかネガティブかです。そこからDBテーブルに挿入され、既存の合計に追加されて、新しい合計が下部の灰色のテーブルに反映されるようになります。

これは達成できない可能性があることを私は知っていますが、それができない場合は、データがまだテーブルに入力され、送信後に反映されるポイントに到達できる必要があります。コードに関する既存の知識では、そこにたどり着くことができないようです。

助けてください?!

4

2 に答える 2

1

まだ質問にコメントすることはできませんが、php にいくつか問題があると思います。@Anubis が指摘しているように、insert ステートメントには作業が必要です。また、実際の php コードの最初の数行は、ウィンドウの読み込み用の JavaScript イベントにラップされているように見えます。コードは実行する JavaScript を生成しないため、これは必要ありません。とにかく、このコードはすべてのページの読み込み中にサーバー上で実行されます。<script>必要のないタグがあり、おそらくエラーの原因となる場所が他にもいくつかあります。

あなたがしたいことは、投稿フィールドに識別子を追加して、正しい値を取得できるようにすることだと思います。したがって、入力ボックスを作成するときは、次のようにします。

echo '<td><input class="newTraffic" type="number" style="width: 65px; text-align: right;" name="new_count__'.$pcs.'" id="'.$pcs.'" value="'.$count.'" />'.$count.'</td>';

そして、次のように送信された値にアクセスします。$_POST['new_count__' . $pcs]

2 つの別々のプロセスを統合しようとしているため、コードを理解するのが難しくなり、エラーが発生しやすくなります。あなたがやろうとしていることはわかりますが、入力処理コードを一番上に、表示コードを一番下に置いてみてください。大まかなコード/コメントで:

<?php //check for and process the new data
    //if posted values
    //process $_POST for values to add/subtract
    //if(isset($_POST)) {
    //if(!empty($_POST) {
    switch ($_POST['submit']) {
        case 'submit':
            //new date selected
            //get new display data
            break;
        case 'submit2':
            //new traffic counts submitted
            //for each input submitted
            //add/subtract value to current database traffic value
            //get new display data
            break;
        default:
            //stuff if no submit
            //get default display data
    }

?>

<html>
    display html data here
</html>
于 2013-01-02T17:49:29.813 に答える
0

あなたの挿入文は間違っています:

//, thour, tdate, count, door <- are there default values defined for theses? if not set the values
$db->query('INSERT INTO traffic (store_id) VALUES ('.$sid.')');

プログラミング中は、次のエラー設定を使用する必要があります。

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

これにより、問題が発生したときに多くのエラーと説明が表示され、デバッグが容易になります。

実稼働環境では、「display_errors」は 0 にする必要があります。

于 2013-01-02T17:15:37.847 に答える