2011-08-03 45 views
1

我有一個HTML表單,其中包含一個下拉菜單,一個tinyMCE textarea和一個保存按鈕。 下拉菜單用於選擇要編輯的文件。如何從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'); 
    } 
} 
?> 

的$索引變量,就是要在下拉列表中選擇的指標,但它是我的形式張貼在選定的字符串值在下拉菜單中。

我能想到的三種解決方案(從最不可能下令合作,最有可能的)

  1. 有一些辦法讓從PHP後的指數?
  2. 我可以在HTML表單/選擇標記中進行更改,告訴它發佈索引而不是值字符串
  3. 我將其更改爲jquery事件,並通過單擊並將索引傳遞給用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片段

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

...現在在PHP的$_POST變量,你會看到$_POST['file_index']包含select元素的selectedIndex。

它的長短之處在於selectedIndex屬性是一個DOM項目而不是POST數據的一部分。無論如何,您要麼必須使用javascript進行干預才能將數據添加到POST,或者修改您的選項元素以傳遞所需的數據。因爲它不那麼複雜,我總是會傾向於前一條路線。

+1

Thankyou - 這是如此明顯,我是如此愚蠢的想法,我不知道它與選項標籤。 –

+0

沒問題,樂於幫忙! –

0

我能想到的另一種選擇:在發佈之前,抓住change -event中的新索引,並將其寫入表單的隱藏輸入字段。之後,你可以serialize並用jQuery發佈。