如何从PHP帖子中获取选定的下拉列表索引

时间:2011-08-03 16:44:54

标签: php jquery forms tinymce drop-down-menu

我有一个HTML表单,其中包含一个下拉列表,一个tinyMCE文本区域和一个保存按钮。 下拉列表用于选择要编辑的文件。

当从下拉列表触发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');
  }
}
?>

$ index变量应该是下拉列表中的选定索引,但是我的表单将其作为下拉列表中的选定字符串值发布。

我可以想到三种解决方案(按最不可能的方式排序)

  1. 有一些方法可以从php帖子中获取索引吗?
  2. 我可以在HTML表单/ select标签中进行更改,告诉它发布索引而不是值字符串
  3. 我通过点击将其更改为jquery事件,并使用xhr手动将索引传递给帖子。
  4. 如果有人可以帮助我实施其中一种方法,那就太棒了。 如果您有自己的更好的解决方案,我也很乐意听到这一点。

    另请注意,我无法从值字符串构建路径,因为我的下拉列表使用描述性字符串,而不是实际文件名。

    在此先感谢,请记住我是php的新手,特别是jquery。

2 个答案:

答案 0 :(得分: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 :(得分:0)

我能想到的另一个选择:在发布之前,在change - 事件中捕获新索引并将其写入表单的隐藏输入字段。之后,您可以serialize并使用jQuery发布它。