2012-03-14 10 views
1

私はMySQLテーブルからデータを取り出し、レコードを編集(更新)するためのフォームにロードしています。私がチェックボックスに来るまで、すべてがうまくいっています。フォームのチェックボックスは、db内の適切な列の値を正確に反映します。しかし、編集者が編集フォームのチェックボックスを変更すると、データはデータベースに渡されません。私はチェックボックスQ &のスタックオーバーフローのトンを読んだが、私が探しているものを見つけることができないようです。申し訳ありませんが、これは冗長な質問です。ここにコードがあります。チェックボックスからPHPを使ってMySQL DBを更新する

value="<?php echo $row1["amenitiesB"]; ?> 

でSELECT文でDBから返されたものです::

でamenitiesBが
<label for="amenities-beach"> 
<input class="choose" name="amenitiesB" id="amenities-beach" type="checkbox" 
value="<?php echo $row1["amenitiesB"]; ?>" 
<?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> /> 
&nbsp;Close to Beach</label> 

$row1 = mysql_fetch_array($result); 

しかし、私は、フォームの値を変更して提出UPDATEステートメントの変数には何も渡されません。私の欠点は何ですか?私はこれらのチェックボックス、アメニティB、アメニティK、アメニティS、アメニティP、アメニティFの6つを持っていて、すべて同じコードで優先しています。どんな助けもありがとう。 ありがとうございました Dave

ここにコードがあります。フォームの他のすべてが正常に更新されます。私はそれに渡そうとします: $ amenitiesB = $ _POST ['amenitiesB'];
が、私は更新ステートメント Hotels.amenitiesB =に入れて "」。$ amenitiesB。 "」、 私のUPDATE文は、 $クエリです=" UPDATEホテル はHotels.id = surfcup_Rates.hotelid SET ON surfcup_Ratesを登録しようHotels.hotelは= ' "$ホテル。"'、そして より列、そして

Hotels.amenitiesB='".$amenitiesB."', 
Hotels.amenitiesB='".$amenitiesK."', 
Hotels.amenitiesB='".$amenitiesS."', 
Hotels.amenitiesB='".$amenitiesP."', 
Hotels.amenitiesB='".$amenitiesF."', 
Hotels.amenitiesB='".$preferred."',  

もっとコラム:

WHERE Hotels.id='".$id."'"; 
+0

あなたは文が不足しているUPDATEをコンパイルして実行コードの送信方法に応じて、$ _POSTと$ _GETを変更することができます。 – hakre

+0

1.値がフォームに正しく埋め込まれていることを確認します。 2.フォームが送信されたときに値がサーバーに戻されていることを確認します。 3. SQLステートメントに正しく構築されていることを確認します。 4.クエリーがエラーなしで実際に実行されたことを確認してください。 –

+0

あなたを助けるために、より多くのロジックを参照する必要があります。 – Crashspeeder

答えて

0

チェックボックスをオフにすると、デフォルトでそのデータがPHPに送信されないため、UPDATEクエリパラメータを空にすることで問題が発生するため、問題が発生します。

$fieldenabled=(bool)(isset($_POST['CHECKBOXNAME']) ? TRUE : FALSE; 

をそして、それを使用してUPDATEクエリを呼び出す: だからあなたの更新ステートメントの前に、あなたが持っている必要があります。

EDIT:もちろん、あなたが<form>

+0

これは、ここでブール値を生成するのは難しいことです。 'isset($ _ POST ['CHECKBOXNAME'])'はあなたが必要とするもので、TRUEまたはFALSEを単独で生成します。 '(bool)'にキャストする必要はありません。すでにブール値です...そして、それをテストして三項演算子でTRUEまたはFALSEを返す必要はありません。 – Jason

+0

はい、理論的には正しいですが、過去に特定の条件で問題が発生しました。比較は取り除くことができますが、ブールへのキャストはとにかく害を及ぼさず、===や!==を使うと確実に安全です – StormByte

0

編集:ボックスが最初であるとき、私は私が問題を取得すると思いますチェックされていない、入力が空の値を持っている場合、それをチェックすると、空の値が渡されます。チェックされた値を意図するもので決して埋めることはありません。だから、代わりにあなたはこのような何か必要があります:「値」を作らない...

<input class="choose" name="amenitiesB" id="amenities-beach" type="checkbox" value="amenity B Selected" <?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> /> 

を動的属性、またはそうでなければ空になったら、それは常に空になります。

オリジナル回答:

あなたは、あなたがチェックボックスのチェックを外すことを意味し、「フォームの値を変更する」と言うとき、私は仮定し、フォームを送信すると...未チェックのチェックボックスには、任意のデータを送信することはありません。フォーム変数がまったく渡されているかどうかをチェックすることで、「チェックされていない」ステータスをチェックします。例えば

if (isset($_GET['amenitiesB'])) { 
    // process with the knowledge that "amenitiesB" was checked 
} 
else { 
    // process with the knowledge that "amenitiesB" was unchecked 
} 

あなたが何らかの形で動的に何か他にあるチェックボックスの「値」を変更することを意味している場合、私はそれを達成したコードを参照してくださいする必要があります。

あなたは配列として変数を渡している時に、チェックボックスの入力で「値」属性の主な目的は次のとおりです。

<label for="amenities-beach"> 
    <input class="choose" name="amenities[]" id="amenities-beach" type="checkbox" value="<?php echo $row1["amenitiesB"]; ?>" <?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> /> 
    &nbsp;Close to Beach 
</label> 

...私は「名前」を変更したことに特に注意してくださいあなたのアメニティのチェックボックスのすべてを通っていれば、$ _GET ['amenities']配列(または$ _POST、if $ _POST)を通してあなたの処理スクリプトにアクセスできます。適用可能)。それ以外の場合は、$ _GET ['amenitiesB']がチェックされているので(フォームと一緒に送信される)、チェックされていないことを知るだけで、チェックボックス入力の "value"属性を使用する理由はあまりありませんフォームとともに送信されます)。

+0

あなたのお手伝いをありがとうございます。私はこれが役立つかどうかは分かりませんが、dbにレコードを読み込むフォームは、まずは備品Bの列に "B"を入力し、便宜Kの列に "K"を入力します。だから、データをプルダウンして編集するときは、値が同じ "B"、 "k"などと仮定していました。主に、編集フォームのチェックボックスが、編集するレコードの正しいチェックを反映しているためです。つまり、編集フォームのチェックボックスは、単に列の実際の値ではなく、チェックされているかチェックされていないと言っています。何か意味がありますか? – user316717

+0

追加の文脈は常に役立ちます。したがって、行は "amenitiesB"を "B"として初期化され、フォームが作成され、すべてのPHPが処理された後、チェックを外すと、データベースに "amenitiesB" = ""が反映されます。私が集めることができるように、ポストされていないコードのどこかにエラーがない限り、起こっているはずです。次に続く... – Jason

+0

PHPが処理されたときに、amenitiesBが空の場合、チェックボックスは次のようになります:(空の値属性に注意してください)何回チェックしても、常に空の値を返すため、決してチェックされません。実際にはここではデータベース内のブール値を使用し、HTMLのvalue属性は無視してください。 – Jason

関連する問題