2011-08-03 5 views
1

У меня есть HTML-форма, содержащая выпадающее меню, текстовую область tinyMCE и кнопку сохранения. Выпадающее меню используется для выбора файла для редактирования.Как получить выбранный индекс выпадающего списка из PHP post

Загрузите требуемый файл в редактор tinyMCE, выполнив вызов ajax, когда событие jquery change() запускается из раскрывающегося списка. Это прекрасно работает.

У меня проблема с сохранением файла. Я пытаюсь сделать это, разместив форму на другой php-странице, которая будет записываться в файл, а затем отправить нас на главную страницу.

Это PHP-код в моей странице writeFile.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/select, чтобы сообщить ему, чтобы он опубликовал индекс, а не строку значений
  3. Я изменяю его на событие jquery с помощью щелчка и передаю в индекс сообщение вручную с xhr.

Если кто-то может помочь мне в реализации одного из этих методов, это было бы здорово. Если у вас есть собственное, лучшее решение, я был бы рад услышать это.

Также обратите внимание, что я не могу построить путь из строки значений, потому что мое раскрывающееся меню использует дескриптивные строки, а не фактические имена файлов.

Заранее спасибо, имейте в виду, что я новичок в php и особенно в jquery.

ответ

2

Я не знаю, почему вы не можете использовать атрибут значение - описательная строка будет текст часть 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; 
} 

... теперь в $_POST переменной PHP, вы увидите $_POST['file_index'] содержит SelectedIndex из select элемента.

Длиной и недостатком является то, что свойство selectedIndex является элементом DOM, а не частью данных POST. Независимо от того, что вам нужно, вам придется вмешаться с javascript, чтобы добавить данные в POST, или изменить свои элементы опции, чтобы передать нужные данные. Я всегда полагался на прежний маршрут, поскольку он был менее сложным.

+1

Thankyou - это так очевидно, и я такой идиот, чтобы не думать об этом, я не знал, что это сработало с тегом опций. –

+0

Без проблем, рад помочь! –

0

Еще один вариант, о котором я могу думать: перед публикацией, поймайте новый индекс в change -эвенте и напишите его в скрытое поле ввода вашей формы. После этого вы можете serialize и опубликовать его с помощью jQuery.

Смежные вопросы