2009-05-18 10 views
0

私は、フォームをチェックボックスで表示し、そのチェックボックスがチェックされているかどうかにかかわらずデータベースに挿入しようとするフォームを持っています。次に、ページが呼び出されるたびに、値をチェックして情報をHTMLフォームに追加し、チェックボックスをチェックして適切に表示します。PHPフォームの問題

以下のコード例を簡潔にするように変更しました。チェックされた値を 'value'に割り当てていることに気付きましたが、これは何も行いません。チェックするよう

<input type="checkbox" name="notice" value="checked" checked/> 

のアプローチが有効でないHTMLながら、すべてのブラウザで動作し、かつ例hereに基づいて、チェックボックスを表示します。私はこのアプローチにこだわりたい。

ここで、自分のコードに何が間違っているかわかりません。

最初の手順は、article_noが主キーであるため、データベースから値を取得し、そのうちの1行が取得されるようにします。何も検索されない場合、変数には単に ""が割り当てられ、チェックボックスはチェックされません。

値が選択されている場合は、これをデータベースに挿入し、次のページの表示時にチェックされた状態で表示されます。

今のところ、このコードは強制的に失敗します。 Firebugはコンソールに何も表示されず、エラーもphpやmysqlで記録されず、フィールドにもかかわらずデータベースに何も表示されず、mysqlエラーは報告されません。

問題?

The code: 

<?php 

error_reporting(E_ALL); 
if (isset($_GET["cmd"])) 

    $cmd = $_GET["cmd"]; 

else 
if (isset($_POST["cmd"])) 

    $cmd = $_POST["cmd"]; 


    if (isset($_GET["pk"])) 

    { $pk = $_GET["pk"];} 
    if (isset($_POST["deleted"])) 
    { $deleted = $_POST["deleted"];} 
    if (isset($_POST["notice"])) 
    { $notice = $_POST["notice"];} 

$con = mysqli_connect("localhost","user","pass", "db"); 

if (!$con) { 

    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 

    exit; 

} 
$con->set_charset("utf8"); 
$getformdata = $con->query("select * from TEST where ARTICLE_NO = '$pk'"); 

$checkDeleted = ""; 
$checkNotice = ""; 


    while ($row = mysqli_fetch_assoc($getformdata)) 

    { 

    $checkDeleted = $row['deleted']; 

    $checkNotice = $row['notice']; 

    } 
if($cmd=="submitinfo"){ 
$statusQuery = "INSERT INTO TEST VALUES (?, ?, ?)"; 

if ($statusInfo = $con->prepare($statusQuery)) { 

    $statusInfo->bind_param("sss", $pk, $deleted, $notice); 

    $statusInfo->execute(); 

    $statusInfo->close(); 
} else { 

print_r($con->error); 

} 
} 

echo "<form name=\"statusForm\" action=\"x.php\" method=\"post\" enctype=\"multipart/form-data\"> 

<h1>Editing information for auction: ".$pk."</h1> 
Löschung Ebay: 
<input type=\"checkbox\" name=\"deleted\" value=\"checked\" ".$checkDeleted." align=\"right\"/> 
<br /> 
Abmahnung: 
<input type=\"checkbox\" name=\"notice\" value=\"checked\" ".$checkNotice." align=\"left\"/> 
<br /> 
<input type=\"hidden\" name=\"cmd\" value=\"submitinfo\" /> 
<input name=\"Submit\" type=\"submit\" value=\"submit\" /> 
</form>"; 

実際のフォーム/ページでは、適切な衛生化を行っています。

大きな問題は、データベースに何も挿入されておらず、エラーがまったく返されていないことです。

+0

PHPで入力サニタイズを追加する - クライアント側のサニタイズをオフにすることができます... – Alnitak

+1

あなたのコードはSQLインジェクションに脆弱です。最初の選択クエリで$ pkにbind_paramを使用します。それはまた、xss-注射に脆弱です。 htmlにembeddingするとき、 'htmlspecialchars()'で$ pkをエスケープします。 – troelskn

答えて

1

チェックボックスをオフにすると、送信時にフォームに値が入力されないことに注意してください。削除されたボックスがチェックされていない場合、$ _POST ['deleted']値は設定されません。

チェックボックスをオフにすると、$ deletedの値を実際に設定しないように見えます。このようなイディオムを使用してください。

$deleted = isset($_POST["deleted"]) ? 1: 0; 

(「」あなたのケースでは、「チェックする」と)

+0

チェックボックスがチェックされていない場合、関連する値は必ず ""のままにしてください。チェックされていないと単純に表示されます。私はまだ何も明らかに送られていないと私は何の誤りもないと理解していない。 –

+0

未確認のチェックボックスには提出された値がありません。私はそれを明確にするために私の答えを修正しました。 –

+0

あなたの答えをありがとう...今これをテストしてください。 $ deleted = isset($ _ POST ["deleted"])で試していますか? "checked": "";私はそれは奇妙だと思う私は何もエラーを取得しない –

-1

を何でもチェックし、未チェックの状態については、データベース・テーブルに必要な値で1と0を代入私はチェックボックスがこれを行うべきであると思いました方法:ポール・ディクソンの答えと同じ線に沿って

<input type="checkbox" name="notice1" value="value1" checked="checked"/> 
<input type="checkbox" name="notice2" value="value2" checked="checked"/> 
+0

はい、でも、やりたいことを簡単にすることはできません。私のappraochは、私が述べたように、うまくいきます。 –

+0

あなたはラジオボタンを考えていると思います。ユーザーが両方のチェックボックスをオンにすると、value2のみが送信されます(name = "notice"をname = "notice []"に変更しない限り)。 – ceejayoz

+0

これは質問に直接答えたものではありませんでしたが、htmlのヒント:入力フィールドにchecked属性を使用する方法を指していました。 – TheHippo

0

、私は時間でこれをやった:

<input type="hidden" name="notice" value="not checked" /> 
<input type="checkbox" name="notice" value="checked" checked="checked" /> 

ユーザがチェックボックスのチェックを外すと、隠れた入力値が代わりに送られます。この方法では、$_POST['notice']は常にあなたのスクリプトに送られます。