ユーザーが時系列 (日付; シリーズ) をテキスト領域に入力できる 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;
}