0

私はPHPを初めて使用し、この問題を理解するために10時間を費やしました。

目標は、この注文フォームに入力されたすべてのデータを取得し、PHP経由で私の電子メールに送信することです。

2つの質問があります:

1. PHPに単一のメニュー項目(例:Mexican Tortas)からデータを送信させることはできますが、PHPに複数の項目(例:Mexican Tortas、Fish Sandwich、Hamburger)からデータを送信させるにはどうすればよいですか?

2.「いくつ」がないメニュー項目からデータを送信しないようにPHPに指示するにはどうすればよいですか?または「カスタマイズしますか?」記入されたテキストフィールド?

非常に簡単な例(または学習リソースへのリンク)を提供していただければ幸いです。

ありがとう、アビヤ


PHP

<?php
if(isset($_POST['submit'])) {

$to = "test@mywebsite.com"; 
$subject = "New Order";
$name_field = $_POST['name'];
$phone_field = $_POST['phone'];
$item = $_POST['item'];
$quantity = $_POST['quantity'];
$customize = $_POST['customize'];

}

$body = "Name: $name_field\nPhone: $phone_field\n\nItem: $item\nQuantity: $quantity\nCustomize: $customize";

echo "Data has been submitted to $to!";
mail($to, $subject, $body);

?>

HTML

<form action="neworder.php" method="POST">

<div class ="item">
<img style="float:left; margin-right:15px; border:1px Solid #000; width:200px; height:155px;" src="images/mexicantortas.jpg">
<h1>Mexican Torta - $8.50</h1>
<input name="item" type="hidden" value="Mexican Torta"/>
<h2>How Many? <font color="#999999">Ex: 1, 2, 3...?</font></h2> 
<input name="quantity" type="text"/>
<h3>Customize It? <font color="#999999">Ex: No Lettuce, Extra Cheese...</font></h3> 
<textarea name="customize"/></textarea>
</div><!-- ITEM_LEFT -->

<div class ="item">
<img style="float:left; margin-right:15px; border:1px Solid #000; width:200px; height:155px;" src="images/fishsandwich.jpg">
<h1>Fish Sandwich - $8.50</h1>
<input name="item" type="hidden" value="Fish Sandwich"/>
<h2>How Many? <font color="#999999">Ex: 1, 2, 3...?</font></h2> 
<input name="quantity" type="text"/>
<h3>Customize It? <font color="#999999">Ex: No Lettuce, Extra Cheese...</font></h3> 
<textarea name="customize"/></textarea>
</div><!-- ITEM_LEFT -->

<div class ="item">
<img style="float:left; margin-right:15px; border:1px Solid #000; width:200px; height:155px;" src="images/hamburgers.jpg">
<h1>Hamburger w/ Fries - $7.00</h1>
<input name="item" type="hidden" value="Fish Sandwich"/>
<h2>How Many? <font color="#999999">Ex: 1, 2, 3...?</font></h2> 
<input name="quantity" type="text"/>
<h3>Customize It? <font color="#999999">Ex: No Lettuce, Extra Cheese...</font></h3> 
<textarea name="customize"/></textarea>
</div><!-- ITEM_LEFT -->

<div class="horizontal_form">
<div class="form">
<h2>Place Your Order Now: <font size="3"><font color="#037B41">Fill in the form below, and we'll call you when your food is ready to be picked up...</font></font></h2>
<p class="name">
<input type="text" name="name" id="name" style="text-align:center;" onClick="this.value='';" value="Enter your name"/>
</p>
<p class="phone">  
<input type="text" name="phone" id="phone" style="text-align:center;" onClick="this.value='';" value="Enter your phone #"/>
</p>
<p class="submit">
<input type="submit" value="Place Order" name="submit"/>
</p>
</div><!-- FORM -->
</div><!-- HORIZONTAL_FORM -->

</form>
4

2 に答える 2

3

複数の入力フィールドを配列にグループ化するため、「[]」を使用することをお勧めします。

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

  $to = "test@mywebsite.com"; 
  $subject = "New Order";

  $order = array();
  $order['name']  = $_POST['name'];
  $order['phone'] = $_POST['phone'];

  $food = $_POST['food'];

  foreach ($food as $type => $value)
    if (strlen($value['quantity']) > 0) // assuming 'customize' is optional
      $order[$type] = $value;

  print_r($order);
}

?>

<html>
<head>
  <title>Order now!</title>
  <style>label,input,textarea {display:block}</style>
<body>
<?php // You need enctype for '[]' support' ?>
<form action="" method="post" enctype="multipart/form-data">
  <div class ="item">
    <label>Mexican Torta - $8.50</label>

    <b>How Many?</b> 
    <input name="food[mexican_torta][quantity]" type="text">

    <b>Customize It? <font color="#999999">Ex: No Lettuce, Extra Cheese...</font></b> 
    <textarea name="food[mexican_torta][customize]"></textarea>
  </div>

  <div class ="item">
    <label>Fish - $3.50</label>

    <b>How Many?</b> 
    <input name="food[fish][quantity]" type="text">

    <b>Customize It? <font color="#999999">Ex: No Lettuce, Extra Cheese...</font></b> 
    <textarea name="food[fish][customize]"></textarea>
  </div>

  <h2>Place Your Order Now:</h2>

  <em>Fill in the form below, and we'll call you when your food is ready to be picked up.</em>

  <label>Enter your name</label>
  <input type="text" name="name">

  <label>Enter your phone nr.</label>
  <input type="text" name="phone">

  <button>Submit</button>
</form>
</body>

ユーザーが送信すると(たとえば、私は魚を空白のままにしました)、

Array ( 
 [name] => Fab 
 [phone] => 1212
 [mexican_torta] => Array ( [quantity] => 2 [customize] => Test ) 
)

'[]'を少し試して、本当に必要な配列出力を取得してください。print_rは、得られたものを正確に表示します。ここから、食べ物の詳細を電子メールに入れるのは本当に簡単です

于 2012-08-21T00:04:55.593 に答える
1

一意のフォームフィールド名が必要です。つまり、次の形式のアイテムを繰り返すことはできません。

<input name="quantity" type="text"/>

代わりに、次のような一意の名前が必要になります。

<input name="quantity_fish" type="text"/>

次に、PHPを使用して$ _POSTを解析し、必要に応じて空のフィールドを破棄できます。

于 2012-08-21T00:03:17.203 に答える