2011-08-03 24 views
1

私は、ドロップダウン、tinyMCEテキストエリア、および保存ボタンを含むHTMLフォームを持っています。 ドロップダウンは、編集するファイルを選択するために使用されます。PHPポストからドロップダウンリストの選択方法

jquery change()イベントがドロップダウンリストからトリガーされたときにajaxコールを実行して、tinyMCEエディターに必要なファイルをロードします。それはうまく動作します。

問題は、ファイルを保存していることです。私はファイルに書き込んでからメインページに戻す別のPHPページにフォームを投稿することでそれをやろうとしています。

これは私のwriteFile.phpページ内のPHPコードです:

<?php 
session_start(); 
if (!isset($_SESSION['id'])) { 
    header ('Location: index.php?error=0'); 
} 
else { 
     if (isset($_POST['save'])) { 
     $text = $_POST['mceContent']; 
     $index = $_POST['files']; // << PROBLEM LINE! 
     $array = array('homeText.txt', 'anotherText.txt'); 
     $fileName = $array[$index]; 
     $path = '../txt/'.$fileName; 
     $length = strlen($text); 
     echo "INDEX: $index"; // TO TEST THE INDEX VARIABLE. 
     $fh = fopen($text,'w',true); 
     fwrite($fh,$text,$length) or die('Could not write'); 
     fclose($fh); 
     header ('Location: admin.php'); 
    } 
} 
?> 

$インデックス変数がドロップダウンに選択されたインデックスであることを意味する、しかしそれは、選択した文字列値として私のフォームで投稿されますドロップダウンで

私は、PHPのポストからインデックスを取得するためのいくつかの方法があります(ほとんどの場合に動作するものからそう命じた)3つのソリューション

  1. と考えることができますか?
  2. は私が上でクリックすると、私はjQueryのイベントに変更し、インデックスと値ではなく文字列
  3. を投稿することを伝えるためにHTMLフォーム/ selectタグで変更を行う、とのインデックスに渡すことができますxhrを使って手動で投稿します。

誰かがこれらの方法のいずれかを実装するのを手伝ってくれたら嬉しいです。 あなた自身の、より良い解決策があれば、私もそれを聞いてうれしいです。

また、ドロップダウンでは実際のファイル名ではなく説明的な文字列が使用されるため、値文字列からパスを構築できないことにも注意してください。

前もってありがとう、私はPHPと特にjqueryに新しいです心に留めて。 -

答えて

2

私はあなたがvalue属性を使用することはできませんなぜわからない説明的な文字列がoption要素のテキスト部分となり、保存するファイル名は、値のようになります。

<option value="path/to/file_to_save.php">Descriptive file name</option> 

それをやっていますユーザーが説明テキストを見ると、サーバーはフォームの投稿時に必要な情報を入手します。

onSubmitイベントをフォームに追加して、selectedIndexプロパティを隠しフォームフィールドに渡した後、trueを返して、フォームを正常に送信させることができます。

フォームスニペット

<form onsubmit="return beforeSubmit()"> 
    <input type="hidden" name="file_index" value="" id="file_index_fld" /> 
    <select id="file_name_dropdown"> 
    <option>...</option> 

Javascriptが今PHPの$_POST変数に、あなたは$_POST['file_index']select要素のselectedIndexのが含まれている参照してくださいよ...

var beforeSubmit = function() { 
    $('#file_index_fld').val($('#file_name_dropdown').attr("selectedIndex")); 
    return true; 
} 

スニペット。

selectedIndexプロパティはDOMアイテムであり、POSTデータの一部ではありません。何に関係なく、あなたは、データをPOSTに追加するためにjavascriptに介入するか、またはオプションの要素を変更して目的のデータを渡す必要があります。それほど複雑ではないので、私はいつも前のルートに向かって傾いています。

+1

ありがとうございます - それはとても明白で、私はそのことを考えていないような馬鹿です、私はそれがオプションタグで動作したのか分かりませんでした。 –

+0

問題ありません、喜んで助けてください! –

0

私が考えることのできる別のオプション:投稿する前に、change -eventの新しいインデックスをキャッチして、フォームの非表示の入力フィールドに書き込んでください。その後、serializeとjQueryで投稿することができます。

関連する問題