За последние 24 часа нас посетили 51308 программистов и 1758 роботов. Сейчас ищут 1579 программистов ...

Проблема с массивом $_POST

Тема в разделе "PHP для новичков", создана пользователем ASHOT, 16 май 2008.

  1. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Как внести в массив $_POST "ТЕКСТ" из формы?

    В нижеприведенном примере в массив $_POST вводится только два значения -


    [D1] => ЗНАЧЕНИЕ
    и
    [B1] => Submit

    _________________________________________

    <?php

    echo "<pre>";
    print_r($_POST);
    ?>


    <form method="POST" action = "echo.php">
    <p><select size="1" name="D1">
    <option value="ЗНАЧЕНИЕ">ТЕКСТ</option>
    </select><input type="submit" value="Submit" name="B1"></p>
    </form>
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    ПИСАТЬ В ВЕРХНЕМ РЕГИСТРЕ И ИГНОРИРОВАТЬ BBCode ФОРУМА - НЕПРИЛИЧНО.
     
  3. Mc X

    Mc X Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Северная и Культурная Столица России
    Полностью согласен ;)

    К массиву $_POST присваиваются значения также, как и к остальным массивам :)

    Все зависит от того, откуда они берутся при выводе этой формы :)
    Если у Вас форма не собирается динамически, получая все "ЗНАЧЕНИЕ" и "ТЕКСТ" для формы к примеру из базы,
    тогда просто создайте массив...

    Код (Text):
    1. $array['ЗНАЧЕНИЕ'] = "ТЕКСТ";
    После получения выбранного "ЗНАЧЕНИЕ" из формы,
    присваиваете к массиву $_POST соответсвующий выбранному "ТЕКСТ"

    Код (Text):
    1. $_POST['text'] = $array[$D1];

    P.S. А вобще, на будущее, если задаете вопрос, старайтесь наиболее точно его формулировать и описывать, что и откуда берете.
    Многие телепатией не страдают, а додумывать за Вас им просто влом ;)
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    В РНР да, а чел спрашивает про HTML а точнее про форму (причём спрашивает явно не вежливо, по этому и отвечать я не буду)
     
  5. Mc X

    Mc X Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Северная и Культурная Столица России
    Эм...не понял мысль :)
    Он спросил, как к $_POST добавить "ТЕКСТ" :)
    с каким пор в HTML массив $_POST есть %)))))
     
  6. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    А это я спросонья не туда посмотрел (5 утра всё-же)
     
  7. Mc X

    Mc X Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Северная и Культурная Столица России
    Бывает ;) а у меня 6 ужо :)
     
  8. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Прошу прощения за нечеткое оформление вопроса.
    Постораюсь обьяснить поточнее..


    Насколько я знаю, когда HTML формы передаются сценарию PHP для обработки -
    автоматически создается массив $_POST[] (или $_GET. Смотря каким методом пользовались.)
    который содержит данные обрабатываемой формы в виде массива.

    После выполнения нижеописанного сценария массив $_POST выдает два элемента -

    Код (Text):
    1. [D1] => THE_VALUE
    и
    Код (Text):
    1. [B1] => Submit

    В браузере видно следующее:

    _________________________

    Array
    (
    [D1] => THE_VALUE
    [B1] => Submit
    )

    и внизу сама форма - DropDown-Box с текстом "THE_TEXT" и кнопка "Submit".

    _________________________


    Суть вопроса:

    Как видно из кода, HTML тег
    HTML:
    1. "<option value="THE_VALUE">THE_TEXT</option>"
    содержит два текстовых значения : "THE_VALUE" и "THE_TEXT"

    Но в массив попадает тольно один из них. Это - "THE_VALUE"


    Вопрос:

    Как сделать так, чтобы в массив $_POST вместе с "THE_VALUE" и "Submit" попала и "THE_TEXT"?

    Или

    как читать значение "THE_TEXT" из формы в массив $_POST?



    Это код файла: echo.php

    PHP:
    1.  
    2.  
    3. <?php
    4. echo "<pre>";
    5. print_r($_POST);  // выводит содержимое массива $_POST на обозрение.
    6. ?>
    7.  
    8.  
    9. // Форма из которой берется массив $_POST
    10.  
    11.  
    12. <form method="POST" action = "echo.php">
    13. <p><select size="1" name="D1">
    14. <option value="THE_VALUE">THE_TEXT</option>
    15. </select><input type="submit" value="Submit" name="B1"></p>
    16. </form>
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Никак. Если есть такая необходимость, то можно дополнительно создавать hidden поле с нужным значением.
     
  10. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Как создать hidden поля для DropDown-Box?
    в этом случае скрытое значение из hidden поля попадет в массив $_POST автоматически вместе с двумя другими (THE_VALUE и Submit)?
     
  11. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    никак не могу понять, зачем это нужно...
    напишите на месте THE_VALUE THE_TEXT. Не поменяйте местами, а именно напишите. Получится THE_VELUE == THE_TEXT
    пользователю формы ведь всё равно, что там за value="", а вы получаете желанное.
     
  12. Taris

    Taris Активный пользователь

    С нами с:
    13 май 2008
    Сообщения:
    29
    Симпатии:
    0
    [js]<script type="text/javascript">
    function setHiddenValue() {
    var v = this.options[this.selectedIndex].value;
    $('optionText').setAttribute('value', v);
    }

    function $(obj) {
    return ((document.getElementById(obj)) ? document.getElementById(obj) : false);
    }

    document.onload = function() {
    $('optionSelect').onchange = setHiddenValue;
    }
    </script>[/js]

    HTML:
    1.  
    2. <form method="post">
    3. <select id="optionSelect">
    4.   <option value="OptionValue1">OptionText1<option>
    5.   <option value="OptionValue2" selected="selected">OptionText2<option>
    6.   <option value="OptionValue3">OptionText3<option>
    7. <input type="hidden" id="optionText" name="optionTextValue" value="" />
    8. <input type="submit" value="Submit" />
    9. </form>
    10.  
    Как то так.
     
  13. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0

    THE_TEXT: Это - имя продукта,
    THE_VALUE: Это цена продукта.

    После нажатия кнопки нужно определить какой же именно THE_TEXT выбрал пользователь, чтобы узнать который THE_VALUE соответствует ему.

    Это нужно для того чтобы после выбора THE_TEXT отобразить THE_VALUE в другой форме "Form".
     
  14. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0

    THE_TEXT: Это - имя продукта,
    THE_VALUE: Это цена продукта.

    После нажатия кнопки нужно определить какой же именно THE_TEXT выбрал пользователь, чтобы узнать который THE_VALUE соответствует ему.

    Это нужно для того чтобы после выбора пользователем опции THE_TEXT и нажатия кнопки
    отобразить и THE_TEXT и THE_VALUE в другой форме "Form".
     
  15. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    HTML:
    1. <option value="THE_TEXT:THE_VALUE">THE_TEXT</option>
    PHP:
    1. <? $what = explode(":", $_POST['D1']); ?>

    З.Ы. ОМГ, что я пишу... :(
     
  16. Taris

    Taris Активный пользователь

    С нами с:
    13 май 2008
    Сообщения:
    29
    Симпатии:
    0
    Если данные обрабатываются посредством PHP, то самый правильный метод это передавать не ЦЕНУ и НАЗВАНИЕ продукта, а ИДЕНТИФИКАТОР продукта :) И затем пересчет вести согласно данным из БД. Смешивать логику, отображение и контроллеры нельзя. Хотя процедурно это очень сложно, но нужно стараться этого избегать.
     
  17. Mc X

    Mc X Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Северная и Культурная Столица России
    Эм...
    создайте базу в которой будут перечислены все продукты и их цены,
    продукт ведь не один и цены у них разные...

    php сам будет динамически создавать форму с продуктами перечисленными в базе
    и Вы всегда имея название продукта можете получить его цену ;)
    А лучший вариант, как уже сказали...
    передавать его идентификатор и по нему выводить название с ценой товара.

    И расширять возможности проще будет...
    если нужно будет разделить товары на категории, типы и тд

    А по Вашей логике, получается гибрид какой-то...
    Вы не хотите полность использовать HTML, создавая каждую страницу ручками,
    но в тоже время и позволять PHP выполнять его работу :)

    Зачем Вам вобще тогда пхп?
    Проще после нажатия кнопки отправлять на заранее подготовленную страницу ;)
     
  18. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Этот метод чтения значений в массив помог.
    Спасибо.


    Сначала пишем в массив $_POST обе значения ="THE_TEXT:THE_VALUE" разделяя их знаком ":"
    потом читаем уже имеюшееся значение "THE_TEXT:THE_VALUE" из массива $_POST
    с помощю функции explode разделяем THE_TEXT и THE_VALUE от знака ":".
    PHP:
    1. <? $what = explode(":", $_POST['D1']); ?>
    и вносим отделенные значения в новый массив $what.

    После этого можно пользоватся с значениями THE_TEXT и THE_VALUE по отдельности.
     
  19. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Вот что у меня получилось...



    PHP:
    1. <?php
    2.  
    3. echo "<form method=Post>";
    4. echo "<select size=1 name=D1[]>";
    5.  
    6. global $D1, $THESECONDVALUE, $PRODNAME;
    7. $THEFILE = "1.txt";
    8. $THEARRAY = file($THEFILE);
    9. $LINESCOUNT = count($THEARRAY);
    10. $THESECONDVALUE = explode(":", $D1[0]);
    11. $ONSTARTVALUE = explode ("|", $THEARRAY[0]);
    12.  
    13. for ($VIEWLINES = 0; $VIEWLINES < $LINESCOUNT; $VIEWLINES++)
    14. {
    15. $THEFIELDS = explode ("|", $THEARRAY[$VIEWLINES]);
    16. $PRODNAME = $THEFIELDS[0];
    17. $PRODPRICE = $THEFIELDS[1];
    18. echo "<option value='$PRODPRICE : $PRODNAME'>$PRODNAME</option>";
    19. }
    20. if($THESECONDVALUE[1])
    21. {
    22. echo "<option selected='$THESECONDVALUE[0]' value='$PRODPRICE : $PRODNAME'>$THESECONDVALUE[1]</option>";
    23. }
    24. if($THESECONDVALUE[0])
    25. {
    26. echo "<input type='text' value = $THESECONDVALUE[0]>";
    27. }
    28. else
    29. {
    30. echo "<input type='text' value = $ONSTARTVALUE[1]>";
    31. }
    32. ?>
    33.  
    34.  
    спасибо за помощь.
     
  20. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Дело в том, что данный скрипт читает не из базы данных а из файла.

    Нужно так чтобы когда пользователь выберает один из опций, после нажатия на кнопку
    в соседней форме (input text) отоброжалось значение которое присвоено выбранной опции.
    Но при этом не изменялась выбранная опция.


     
  21. Mc X

    Mc X Активный пользователь

    С нами с:
    14 май 2008
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Северная и Культурная Столица России
    Да, теперь понимаю :)
    Вариант с указанием название и цены в value наиболее подходящий вариант :)
     
  22. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Осталась только одна маленькая проблема.

    После нажатия Enter в списке опций появляетсе еще одна - с тем же именем который был выбран.

    Скажем если выберается опция "Mainboard1" то список становится таким:

    Mainboard1
    Mainboard2
    Mainboard3
    Mainboard1 // внизу появилась еще одна опция "Mainboard1"

    это из-за

    Код (Text):
    1. echo "<option selected='$THESECONDVALUE[0]' value='$PRODPRICE : $PRODNAME'>$THESECONDVALUE[1]</option>";
    Как вы думаете возможно ли сделать так чтобы последняя опция не появилась в списке?
    Или нужно использовать Javascript...
     
  23. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    ASHOT, смените аватарку. только личное фото.
     
  24. Taris

    Taris Активный пользователь

    С нами с:
    13 май 2008
    Сообщения:
    29
    Симпатии:
    0
    Внесите в цикл:
    PHP:
    1.  
    2. if($THESECONDVALUE[1])
    3. {
    4. echo "<option selected='$THESECONDVALUE[0]' value='$PRODPRICE : $PRODNAME'>$THESECONDVALUE[1]</option>";
    5. }
    6.  
    К тому же не
    PHP:
    1. selected='$THESECONDVALUE[0]'
    а

    PHP:
    1. selected="selected"
     
  25. ASHOT

    ASHOT Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    21
    Симпатии:
    0
    Псоле внесения в цикл, повторение имен в списке увеличелось в разы выполнения цикла :?