人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

配列でPOSTされたデータをSQL文使ってMysqlにデータを登録
前回http://q.hatena.ne.jp/1281429669からDBに登録する方法が分かりません。
, 区切りで複数登録できることは知ってます。

確認画面 登録部分は前回質問にて
<?php $dateArray = array( date("Y-m-j"), date("Y-m-d",strtotime("+1 day")), date("Y-m-d",strtotime("+2 day")), date("Y-m-d",strtotime("+3 day")), date("Y-m-d",strtotime("+4 day")), date("Y-m-d",strtotime("+5 day")), date("Y-m-d",strtotime("+6 day")));
?>
<form action="syuxtukin_fix.php" method="POST">
<table border="1">
<tr>
<td>ID</td>
<td>名前</td>
<?php foreach( $dateArray as $d ) {?>
<td><?php echo $d ?></td>
<?php } ?>
</tr>
<?php foreach( $_POST['name'] as $k1 => $v1 ) {?>
<tr>
<td><?php echo $k1 ?></td><td><?php echo $v1 ?></td>
<?php foreach( $dateArray as $d ) {?>
<td>
<?php if(isset($_POST['data'][$k1][$d])){echo "出勤";}?>
<?php $_SESSION["data"] = $_POST['data'] ;?>
</td>
<?php
} ?>
<?php } ?>
</tr>
<tr>
<td>
<input type="submit" value="登録" />
<input type="button" value="戻る" onClick="history.back();" />
</td>
</tr>
</table>

完了画面(syuxtukin_fix.html)こちらにSQL文を書きたい
<?php
session_start();
?>
<?php
$data = $_SESSION["data"];
print_r($data);
session_unset();
?>
PEAR:DB使ってます
テーブルはひとつのIDでその日が出勤するかどうかをひとつのデータとしています。

●質問者: goodbabies
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB HTML MySQL Pear PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●80ポイント ベストアンサー

PEAR-DB環境は現在利用していないのでテストはしておりません。参考URL先を参照しつつ下記の順序で利用してください

【1】接続

require_once 'DB.php';
$dsn = 'mysql://ユーザー名:パスワード@ホスト名/データベース名';
$db = DB::connect($dsn);
if (PEAR::isError($db)) {
 die($db->getMessage());
}

【2】クエリ実行

データベースの作業手順は、該当する日付範囲をデリートして、新たにインサートするという手順になります

どちらかの作業が失敗した場合はロールバック(データベース操作開始前の状態に戻す)して作業を終えます

ロールバックを利用するためMySQLのデータベースエンジンは InnoDB が必須となります

$s1 = "DELETE FROM テーブル名 WHERE 日付 BETWEEN '" . date("Y-m-j") . "' AND '" . date("Y-m-d",strtotime("+6 day")) . "'";
$db->autoCommit( false ); 
$res = $db->query($s1);
if( DB :: isError( $res ) ){ 
 $db->rollback();
 die( $res->getMessage() ); 
}
if ( count( $data ) > 0 ) {
 $dataArray = array();
 foreach( $data as $k1 => $v1 ) {
 foreach( $data[$k1] as $k2 => $v2 ) {
 $dataArray[] = sprintf("(%s,'%s',%s)", $k1, $k2, $v2 );
 }
 }
 $s2 = 'INSERT INTO テーブル名(日付,ID,出勤) VALUES ' . implode( ',', $dataArray );
 $res = $db->query($s2);
 if( DB :: isError( $res ) ){ 
 $db->rollback();
 die( $res->getMessage() ); 
 }
}
$db->commit();

MyISAMのようにロールバックできないデータベースエンジン利用の場合は失敗した場合に不整合が発生する覚悟で次のようになります

$s1 = "DELETE FROM テーブル名 WHERE 日付 BETWEEN '" . date("Y-m-j") . "' AND '" . date("Y-m-d",strtotime("+6 day")) . "'";
$res = $db->query($s1);
if( DB :: isError( $res ) ){ 
 die( $res->getMessage() ); 
}
if ( count( $data ) > 0 ) {
 $dataArray = array();
 foreach( $data as $k1 => $v1 ) {
 foreach( $data[$k1] as $k2 => $v2 ) {
 $dataArray[] = sprintf("(%s,'%s',%s)", $k1, $k2, $v2 );
 }
 }
 $s2 = 'INSERT INTO テーブル名(日付,ID,出勤) VALUES ' . implode( ',', $dataArray );
 $res = $db->query($s2);
 if( DB :: isError( $res ) ){ 
 die( $res->getMessage() ); 
 }
}

【3】開放

$db->disconnect();

参考URL

http://pear.php.net/manual/ja/package.database.db.php

◎質問者からの返答

す、すごいです・・・感激しました。実は別の方法で登録事態はできたのですが、なにせソースが汚いものでして・・・

windofjulyさんのやり方をまねしたいと思います!ありがとうございます!


2 ● yamaneroom
●0ポイント

SQLのINSERT文を使う。


DB構造が分からないので具体的な回答はできない。

詳細は下記参照。

http://www.phpbook.jp/pear/pear_db/index9.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ