首页 > 解决方案 > 发布网络表单的更有效方式(更少重复代码)?

问题描述

我有一个 Web 表单,我想将它保存到 XML 文件中并将信息作为电子邮件发送。但是代码在某种程度上感觉是重复的。有没有更有效的方法?

webform.php

<!DOCTYPE html>
<html>
<head></head>
<body>   
<div class="content">
    <form action="formprocessor.php" method="POST">
        <label>Name: </label>
        <input name="name" type="text" size="25" />

        <label>Course: </label>
        <input name="course" type="text" size="25" />

        <label>Book: </label>
        <input name="book" type="text" size="255" />

        <label>Price: </label>
        <input name="price" type="text" size="7" />

        <label>Email: </label>
        <input name="email" type="text" size="255" />

        <label>Phone #: </label>
        <input name="phone" type="text" size="12" />

        <input name="mySubmit" type="submit" value="Submit!" />
    </form>
</div>
</body>
</html>

表单处理器.php

<?php
$name = $_POST["name"];
$course = $_POST["course"];
$book = $_POST["book"];
$price = $_POST["price"];
$email = $_POST["email"];
$phone = $_POST["phone"];

echo $name;
?>

首先,我需要在输入中定义名称。

然后在postformprocessor.php中同名

将其分配给变量

使用变量发送邮件和 XML

我必须使用复制粘贴代码但名称不同来执行此操作 30 次(30 个字段)。

标签: phpformspost

解决方案


这是您可以执行的操作的示例。我强烈建议构建一个数组并使用它来构建您的 xml,而不是选项 1:(参见即如何将数组转换为 SimpleXML

// option 1
$_POST = [
    'foo' => 'bar',
    'bar' => 'foo'
    ];

foreach($_POST as $key => $value) {
    $$key = $value; // http://php.net/manual/en/language.variables.variable.php
}

var_dump($foo, $bar);

// option 2
$toXMLArray = [];   
foreach($_POST as $key => $value) {
    $toXMLArray[$key] = $value;
}

var_dump($toXMLArray);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($toXMLArray, array ($xml, 'addChild'));
print $xml->asXML();

推荐阅读