2017-02-08 5 views
0

私はシリアライゼーションについて学んでいますが、私はその概念を理解していますが、その限界に精通していません。チェックボックスが入力されている場合、シリアル化された配列を更新する方法

次に示すのは架空のシナリオです。ウィークリーと呼ばれるテーブルがあり、そのテーブルの中には3つの列があります。 3列目、次のようにシリアライズされたデータを保持する:

INSERT INTO `meal` (`meal_id`, `meal_name`) VALUES 
(1, 'Chorizo tapas'), 
(2, 'Mediterranean halloumi burger'), 
(3, 'Lamb Moussaka'), 
(4, 'Snappy Asian Fish En Papillote'), 
(5, 'Puttanesca Risotto'), 
(6, 'Mexican Pork Chilli With Apple Salsa'), 
(7, 'Warm Greek Salad'); 

は今、私はいくつかと、いくつかのHTMLを持っていると言う:

INSERT INTO `week` (`week_id`, `meal_code`, `meal_id`) VALUES 
(1, 'week12016', 'a:7:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";i:5;s:1:"6";i:6;s:1:"7";}'), 

をそして私は、私は別のテーブルには食事と食事内部で呼び出さ持ってい以下の通りです。次のようにボックスをチェックしてください。

Monday  [] 
Tuesday [] 
Wednesday [] 
Thursday [] 
Wednesday [] 
Thursday [] 
Friday  [] 
Saturday [] 
Sunday  [] 

をそして私は8のmeal_idで別の食事を追加して、月曜日のボックスをチェックすることを決定し、それが可能です次のように示しているように、チェックボックスを反映するために、シリアル化された配列を更新します。

'a:7:{i:0;s:1:"8";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";i:5;s:1:"6";i:6;s:1:"7";}'), 

はどのように「8」が今、「1」の代わりに行ってきましたご覧ください食事テーブルはシリアル化された配列から少し無関係ですが、文脈のために追加しました。

私が記述していることが可能かどうか知りたいですか?

$monday=$_POST['monday'];  
$result = mysqli_query($conn,"SELECT meal_id from WEEK"); 
$array = unserialize($result); 
$array[0] = $meal_id; 
$sfood=serialize($array); 

if ($_POST['weekday'] == 'monday') 
{ 
mysqli_query($conn, "UPDATE week SET meal_id ('$sfood') ");     
} 

私は上記正しくありません知っているが、それは私が試したし、次に行くために何見当がつかないてきたものだ:

仮に私がこのような何かを推測しています。

+0

あなたは間違ったテーブル構造を持っています。私はそれを分ける必要があると思います。あなたが金曜日に「Puttanesca Risotto」を持っている週をフィルタするのが難しいと想像してみてください。 20の食事を追加する場合は? 1日に1食以上を選択する必要がありますか? – Wizard

+0

ええ、私は完全に同意します。これは、実際のシステムで実装するのが間違った方法ですが、テーブルの1つの行に基づいて学習するためには、管理が必要です。 –

+0

いいえ、このアイデアを出して、毎週meal_idを独自の行に格納してください。シリアライズされたデータは、データベース内の何ものにも適していません。私たち/他の間違いから学ぶことができ、間違いを学ぶことができます。 – AbraCadaver

答えて

0

データベースでシリアル化されたデータを使用する必要があるのは、データの関係とはまったく関係がないときだけです。CSS規則などを格納すると思いますが、行を選択してスタイルを設定すると実際のデータの条件や関係には関係しません。

、請求、ご$resultは、あなたはそれが何を考え、実際にはありませんが、それはSQL結果セットです...あなたはそれのうち、行、または列を取得する必要があります:

while($row = $result->fetchObject()){ 
    $meal_id = $row->meal_id; 
} 

ます。また、必要

$result->close

をしかし、あなたはまだ始まったばかりしているように見えることから、あなたはおそらく同様にPDOについて学ぶ必要があります:あなたが望むものを持ったときに別のクエリを実行する前に、接続を閉じます。私の経験では、多くのプロジェクトに適しています。

関連する問題