私はシリアライゼーションについて学んでいますが、私はその概念を理解していますが、その限界に精通していません。チェックボックスが入力されている場合、シリアル化された配列を更新する方法
次に示すのは架空のシナリオです。ウィークリーと呼ばれるテーブルがあり、そのテーブルの中には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') ");
}
私は上記正しくありません知っているが、それは私が試したし、次に行くために何見当がつかないてきたものだ:
仮に私がこのような何かを推測しています。
あなたは間違ったテーブル構造を持っています。私はそれを分ける必要があると思います。あなたが金曜日に「Puttanesca Risotto」を持っている週をフィルタするのが難しいと想像してみてください。 20の食事を追加する場合は? 1日に1食以上を選択する必要がありますか? – Wizard
ええ、私は完全に同意します。これは、実際のシステムで実装するのが間違った方法ですが、テーブルの1つの行に基づいて学習するためには、管理が必要です。 –
いいえ、このアイデアを出して、毎週meal_idを独自の行に格納してください。シリアライズされたデータは、データベース内の何ものにも適していません。私たち/他の間違いから学ぶことができ、間違いを学ぶことができます。 – AbraCadaver