2012-03-14 6 views
1

このダムの質問を許してください。私は音楽教師であり、プログラマーではありません。SQLフォームでのチェックボックスの単純な問題提出

私はフォームを提出しています。 「音声言語」のチェックボックスをチェックした可能性があります。

<input type="checkbox" id="speakEnglish" name="speakEnglish" value="yes" /> 
<input type="checkbox" id="speakGerman" name="speakGerman" value="yes" /> 

し、フォーム上には、私が

$speakEnglish = $_POST['speakEnglish']; 
$speakGerman = $_POST['speakGerman']; 

を持っており、それから、私のSQLクエリを策定提出します。起こっていただきました!私は理解してもそれは。これが私を混乱させる...

AN error occurred in the script '/home/berli/public_html/TEST/signup.php' on line 295: 
Undefined index: speakGerman 

を提出し、細かい挿入する私のローカルホスト上ではなく、チェックボックスが空の場合、サーバーにアップロードして以来、私はこれを取得していました。

なぜ、以前に空のチェックボックスを使用してフォームを送信したのですが、エラーが発生しましたか? これを処理する通常の方法は何ですか?

何かのような..?

if(isset($_POST[checkboxVar]) { $SQLcheckboxVar = $_POST[checkboxVar]} }; 

空のチェックボックスがローカルホストで私をハングアップさせなかった理由は分かりませんが、今はそのようにしています。私はそれを引き起こすために何かできたことがないと思います。私は確かにチェックボックス変数をテストしていませんでしたが、INSERTされたエントリでいっぱいのSQLテーブルがあります。

これはサーバーとローカルでの動作とサーバーでの動作の違いはありますか?

答えて

2

サーバーのエラー報告には、通知/警告が表示されている必要があります(具体的な通知はありません)。

php設定(php.ini)を変更できない場合は、if(isset($_POST['checkboxVar']))であればそのエラーを非表示にする必要があります。

;Show all errors, except for notices and coding standards warnings 
error_reporting = E_ALL & ~E_NOTICE 
+0

私はいくつかのチュートリアルを行っていたときに、(MAMPの)php.iniファイルを見たのは覚えています...しかし、それはサーバー上でどこにありますか?私は全周を突き刺して、PHPファイルを見ることができません。 –

+1

Linuxサーバーですか? rootアカウントとしてログインし、 '/ etc/php.ini'にアクセスする必要があります。共有ホスティング環境にいる場合は、コントロールパネルにある可能性があります(一部のcPanelでPHP設定を行うことができます)か、サーバーにSSHできる場合は、/ var/www/vhosts/yoursite/conf'どこかにあります。しかし、ええ、設定を変更するために、すべてのページにインクルードするブートストラップ/バックエンドファイルで 'error_reporting(E_ALL&〜E_NOTICE);'を実行することもできます。 – Benno

+0

情報ありがとう! –

2

あなたのローカル設定はおそらく何らかの通知を抑制しているデフォルトのPHPの設定を、使用している:これは、あなたのオンラインサーバー(通常は/etc/php.ini)に必要なものです。プロダクションサーバーには、より小さい(おそらく重要ではない)問題を知ることができる、より厳密なエラー報告があります。

この場合、ブラウザは選択されていないチェックボックスのデータを送信しないため、定義されていない変数にアクセスしようとしています。

すでに指摘したように、単純なif(isset($ _ POST [checkboxVar]))は、変数ごとのレベルの通知を取り除くためにこのトリックを行います。

あなたの音楽の先生に滞在したいと壁にこれらの事は、単にあなたのプログラムの最初の行を次のように配置する方が簡単かもしれポップアップするたびに、あなたの頭を壊さない場合:

error_reporting(E_ALL & ~E_NOTICE); 
1

if (!isset($_POST['checkboxVar'])) $_POST['checkboxVar'] = 'no'; 

または

$checkboxVar = isset($_POST['checkboxVar']) ? $_POST['checkboxVar'] : 'no'; 

この通知を回避するための最も簡単な方法は、あなたのチェックボックスがのようなものでチェックされているかどうかを確認することです

あなたが遭遇した問題は、チェックボックスがチェックされていないとブラウザはフォームデータに何も送信しないということです。