0

ユーザーが時系列 (日付; シリーズ) をテキスト領域に入力できる Web サイトがあります。データは POST メソッドを使用してサーバーに送信されます。

時系列が異なるいくつかのテーブルが既に MySQL データベースに格納されています。ユーザーが指定した時系列とデータベースに保存されている時系列を組み合わせて、統計計算を行う必要があります。

分解を使用してユーザー入力を配列に保存し、日付をセレクタとして使用してデータベースから時系列を選択したいと考えています ( WHERE date = $datefromuserinput)。ここには2つの問題があります:

  • 配列の日付形式は、いくつかの変換 (例: ) の後、MySQL (ISO、omd) のものと一致しませんstrtotime
  • また、MySQL の時系列データ型は DECIMAL (15,4) 形式ですが、PHP のものは文字列 (に変換float) です。

解決策を探す前に、自分のコンセプトが正しいかどうかを知りたいです。ユーザー入力をMySQLテーブルに入れると、計算が速くなります(私が理解しているように)。ただし、複数のユーザーがフォームを同時に使用すると、MySQL の新しいテーブルのエントリが上書きされる可能性がありますよね? 完全な MySQL テーブルを PHP 配列にロードする必要がありますか (セッションが必要です)?

多くの解決策を読みましたが、これらの答えが見つかりませんでした。どんなヒントでも大歓迎です。

<?php
date_default_timezone_set('UTC');

//session_start();

//$datum = [];

if ($_POST['usersubmit']) {
if ($_POST['userinput1'] !=""){

        if ($_POST['separator'] != ""){
        if ($_POST['separator'] == comma){
        $separatorsign = ",";
        }
        elseif ($_POST['separator'] == semicolon){
        $separatorsign = ";";
        }
        else {
        $separatorsign = "\t";
        }
    }



$userinput1 = $_POST['userinput1'];


$zeilen= explode("\n", $userinput1);
$daten = array();
foreach($zeilen as $zeile) {
    list($datum, $zeitreihe) = explode($separatorsign, $zeile,2);
$datumkonv = strtotime($datum);


$daten[]['datum'] = date('o-m-d',$datumkonv);
$daten[]['zeitreihe'] = $zeitreihe;

}



$con = mysql_connect('localhost','username','pw');
if (!$con)
{
die('Could not connect: ' . mysql_error($con));
}

mysql_select_db("dbname");

$sql = "SELECT series FROM mytimeseries1 WHERE date = $daten[0]['datum']"; //[0]     just     for trying working with the first row

$result = mysql_query($sql); 

$row = mysql_fetch_object($result);

echo "$row->series";//["series"].'<br>';

$row = floatval($row);

$ergebnis = $row + 22;
echo $ergebnis; // $row is 100.5000 but $ergebnis returns 100.5023 ??


mysql_free_result($result);
mysql_close($con);


echo "<pre>";

//print_r ($result);
 print_r ($row);
var_dump($row); 
var_dump($ergebnis);




}
}



?>

<table width="800">
 <tr>
  <td width="400">
<form action="test.php" method="post">
 <p><textarea style="overflow-y:scroll;resize:none;" name="userinput1"   id="userinput1" cols="28" rows="12"></textarea></p>


   <p>Separator<br>
   <input type="radio" name="separator" value="comma">Comma</p>
     <p><input type="radio" name="separator" value="tab">Tab</p>
 <p><input type="radio" name="separator" value="semicolon">Semicolon</p>
   </td>     
   <td width="400">
 <p>Date Format<br>
 <input type="radio" name="dateformat" value="yyyy-mm-dd">YYYY-MM-DD</p>
 <p><input type="radio" name="dateformat" value="yyyy-dd-mm">YYYY-DD-MM</p>
 <p><input type="radio" name="dateformat" value="dd-mm-yyyy">DD-MM-YYYY</p>
 <p><input type="radio" name="dateformat" value="mm-dd-yyyy">MM-DD-YYYY</p>
 <p><input type="radio" name="dateformat" value="ddmmyyyy">DD.MM.YYYY</p>


   <p><input type="submit" name="usersubmit" value="GO"></p>
</form>
   </td>
  </tr> 
 </table>

<?php

編集:何時間も試した後、ユーザー入力配列をMySQLの一時テーブルにアップロードする方が理にかなっていると思います(日付形式は受け入れられます)。上記のコードの foreach() 部分を次のように変更する必要がありました。

for($y = 0;$y < count($zeilen);$y++){
    list($datum, $zeitreihe) = explode($separatorsign, $zeilen[$y], 2);
    $daten[$y]['datum'] = $datum;
    $daten[$y]['zeitreihe'] = $zeitreihe;
    }
4

0 に答える 0