2015-12-20 5 views
0

В моем учебнике дается задание, которое требует, чтобы у меня было 2 формы на одной странице и выводили их на одну страницу. Возможно ли это? Обе формы работают нормально. Оба имеют действие:2 формы на одной странице php

<?php echo $_SERVER['PHP_SELF']; ?>". 

У обоих есть кнопка отправки, но кнопка представляет только форму, из которой она состоит. Это, вероятно, имеет смысл.

Вещь - мне нужна страница, чтобы либо вывести оба выхода формы, щелкнув одну из двух кнопок отправки, либо нажми их впоследствии, но информация из первой формы должна оставаться на странице.

Возможно ли это, или я пытаюсь сделать невозможное?

формы следующие:

форма 1:

<form name="orderform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Korting: 
<tr> 
<td> 
<input type="checkbox" name="korting[]" value=15 /> Student 15% <br> 
<input type="checkbox" name="korting[]" value=10 /> Senior 10% <br> 
<input type="checkbox" name="korting[]" value=5 /> Klant 5% <br> 
<hr /> 
</td> 
</tr> 
<tr> 
<td> 
betalingswijze 
<input type="radio" name="betalingswijze" value="paypal"> Paypal 
<input type="radio" name="betalingswijze" value="mastercard"> Mastercard 
<input type="radio" name="betalingswijze" value="visa"> Visa 
<hr /> 
</td> 
<tr> 
<td> 
    <img src="toshiba.jpg" alt=" " /> 
</td> 
</tr> 
<tr> 
<td> 
    Toshiba Sattelite A100-510 Basisprijs 999.99 
</td> 
</tr> 
<tr> 
<td><!--Shopping Cart Begin--> 
    <input type="hidden" name="toshibaproduct" value="001" /> 
    <input type="hidden" name="toshibamerk" value="toshiba" /> 
    <input type="hidden" name="toshibamodel" value="Sattelite A100-510" /> 
    Operating system <select name="toshibaos" value="Toshiba"> 
    <option value="xp">Windows XP</option> 
    <option value="vista">Windows Vista</option> 
    <option value="linux">Linux</option> 
    </select> 
    Aantal: <input type="text" size=2 maxlength=3 name="toshibaaantal" value="0" /> 
    <input type="hidden" name="toshibaprijs" value="999.99" /> 

    <input type="image" src="bestel.jpg" border=0 value="bestellen" /> 
    <hr /> 

<tr> 
<td> 
    <img src="acer.jpg" alt=" " /> 
</td> 
</tr> 
<tr> 
<td> 
    Acer Aspire 5735Z Basisprijs 529.99 
</td> 
</tr> 
<tr> 
<td>  
    <input type="hidden" name="acerproduct" value="002" /> 
    <input type="hidden" name="acermerk" value="acer" /> 
    <input type="hidden" name="acermodel" value="Aspire 5735Z" /> 
    Operating system <select name="aceros" value="Acer"> 
    <option value="xp">Windows XP</option> 
    <option value="vista">Windows Vista</option> 
    <option value="linux">Linux</option> 
    </select> 
    Aantal: <input type="text" size=2 maxlength=3 name="aceraantal" value="0" /> 
    <input type="hidden" name="acerprijs" value="529.99" /> 

    <input type="image" src="bestel.jpg" border=0 value="bestellen" /> 
    <hr /> 
    </td><!--Shopping Cart End--> 
</tr> 
</form> 

Форма 2

<form name="klant gegevens" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border=1 > 
<tr> 
<td colspan="2"> 
    <b>Factuur klantgegevens</b> 
</td> 
</tr> 
<tr> 
<td width="100">Naam: </td> 
<td> 
    <input type="text" sie="55" name="naam" /> 
</td> 
</tr> 
<tr> 
<tr> 
<td>Adres: </td> 
<td> 
    <input type="text" sie="55" name="adres" /> 
</td> 
</tr> 
<tr> 
<td>Woonplaats:</td> 
<td> 
    <input type="text size="34" name="woonplaats"> 
    Postcode:<input type="text" size="6" name="postcode"> 
</td> 
</tr> 
<tr> 
<td>e-mail:</td> 
<td> 
    <input type="text" size="55" name="email"> 
</td> 
</tr> 
<tr> 
<td>Feedback:</td> 
<td> 
<textarea cols="40" rows="3" name="commentaar"> 
</textarea> 
</td> 
</tr> 
</table> 
<input type="image" src="checkout.png" value="send"/> 
</form> 

Оба имеют функции, которые пинают в на кнопку. Извините за расстояния. У меня есть их лучше в моих собственных файлах, но я просто не знаю, как их получить прямо на этом сайте.

Привет,

Lennart

+0

Да, это возможно. Можете ли вы добавить PHP-код, который управляет отправкой формы? – Lipsyor

+0

Благодарим за отзыв. Я редактировал втулку. – Lennart

+0

вам нужна только одна форма и фильтрация данных. – miglio

ответ

2

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

Рассмотрим эти простые формы:

<form name="form_a" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
    <input type="hidden" name="form" value="A"> 
    <button type="submit">Form A</button> 
</form> 

<form name="form_b" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
    <input type="hidden" name="form" value="B"> 
    <button type="submit">Form B</button> 
</form> 

управлять различными представления, вы должны были проверить значение скрытого поля:

if(isset($_POST['form'])){ 

    switch ($_POST['form']) { 
     case "A": 
      echo "submitted A"; 
      break; 

     case "B": 
      echo "submitted B"; 
      break; 

     default: 
      echo "What are you doing?"; 
    } 
} 

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

Вы можете объединить вручную поля двух форм или использовать Javascript для этого. Имейте в виду, что если вы делаете это через Javascript, поле форм должно иметь разные имена.

Как вы Каан видите here вы можете сделать просто с помощью JQuery:

var str1 = $("form_a").serialize(); 
var str2 = $("form_b").serialize(); 
$.post(url, str1 + "&" + str2); 

Где url является PARAMS действия вида

+1

Не нужно проверять 'isset ($ _ POST)', потому что это SUPER-global и всегда будет установлен :-) – Qirel

+0

вы правдивы. старый школьный код написания :) – Lipsyor

+0

Спасибо! Но будет ли это сообщение обеим формам? похоже, что он будет публиковать только «А» или «В».Мне нужно, чтобы обе формы были опубликованы одновременно. Или я должен объединить их в одну форму (которая, теперь, я говорю, звучит логично). вещь - мое учебное пособие требует, чтобы я использовал 2 формы и выводил их одновременно на одной странице. – Lennart

0

DUPLICATE POST

Да, вы можете!

Во-первых, добавьте соответствующие действия для всех форм, во-вторых, дать им уникальное имя

HTML Side

Не забудьте добавить метод HTTP, что вы хотите (GET или POST)

<form method="post"> 
    <input type="hidden" name="orderform" /> 
    <!-- rest of form goes here --> 
</form> 

<form method="post"> 
    <input type="hidden" name="klant_gegevens" /> 
    <!-- rest of form goes here --> 
</form> 

Оставив action пустой или атрибута по извлекая его полностью будет сделать форму отправить на текущую страницу (see this post), и использование $_SERVER["PHP_SELF"] может привести к XSS-инъекций read under "Big Note on PHP Form Security"

Примечание:

Избегайте использования пространства для имен полей, это может сделать некоторые проблемы, чтобы соответствовать их ...

PHP Side

получать входные значения , путем фильтрации по полученному имени формы

if (isset($_POST["orderform"])) { 
    // The first form was submitted 
} 

if (isset($_POST["klant_gegevens"])) { 
    // The second form was submitted 
} 

Примечание:

Использование print_r() или var_dump(), отлаживать содержание обмениваемых ценностей

+2

Проверка того, что имя формы не пуста, не будет работать. Было бы лучше назвать имена отправлений и проверить их (или другие конкретные значения в форме). Также обратите внимание на использование '$ _SERVER ['PHP_SELF'];', прочитайте [«Большая заметка о безопасности PHP Form» в w3schools] (http://www.w3schools.com/php/php_form_validation.asp). – Qirel

+0

Вы хорошо, но это рефлекс. Тестирование одного или некоторых конкретных значений на этом этапе недостаточно (так же, как и имена целых полей - слишком долго). В это время единственное, что нужно, это знать, была ли форма отправлена. Условный придет после внутри это. почему область действия пуста! (я знаю, что php_self, я надеюсь, что его упражнение не навязывает это) – MTroy

+0

Могу сказать, что вы не можете проверить '' form name = "something" 'в PHP, это не то, что опубликовано над' $ _POST'. Значения внутри формы отправляются, и вы можете проверить эти имена. – Qirel

0

форма должна быть такой.
Первая форма

<form method="post" > 
     ... 
    <input type="hidden" name="form1submission" value="yes" > 
    <input type="submit" name="submit" value="Submit" > 
    </form> 

Вторая форма

<form method="post" > 
     ... 
    <input type="hidden" name="form2submission" value="yes" > 
    <input type="submit" name="submit" value="Submit" > 
    </form> 

И ваш PHP для первой формы.

if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['form1submission'])) { 
     // first form code. 
    } 

И второй код формы php.

if('POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['form2submission'])) { 
     // second form code. 
    } 

Всё.

+0

Спасибо за ваш ответ! будет ли это сообщение обеим формам или только одному из них? – Lennart

+0

Это будет делать покупки по одной форме за раз. Передача обеих форм вместе невозможна без js. Если вам нужно представить обе формы вместе, мы будем использовать функции jQuery или raw js, чтобы отправить их вместе. – Kvvaradha