发送无线电选择以及文本框

时间:2017-02-28 12:18:59

标签: php arrays

我有一些代码工作,从我的输入框中获取文本并将其移动到一个函数。我现在正在尝试更改它,所以我添加了另一个表单元素,一个单选按钮,我想访问我的functions.php文件中的选项。

这是我目前的代码,适用于帖子名称,但如果我也想抓住所选的颜色框呢?

main.php

<?php 

if (isset($_POST['submit'])) {
   $data = $_POST['name']; // the data from the form input.
}

?>

 ...
    <form action="/" method="post">
    <input type="text" name="name" placeholder="Acme Corp"/>
    <input name="colour" type="radio" value="red">Red<br>
    <input name="colour" type="radio" value="blue">Blue<br>
    <input name="colour" type="radio" value="green">Green<br>
    <input type="submit" name="submit" value="Submit">
    </form>
    <img src="pngfile.php?data=<?php print urlencode($data);?>"
          alt="png php file">

我想我很困惑,因为目前它正在调用它:

pngfile.php

<?php
    require_once 'functions.php';  
     $inputData = urldecode($_GET['data']);
   process($inputData);
   exit;
?>

调用functions.php

<?php
function process($inputdata)
{
...
编辑:我尝试过:

main.php [更改]

 $data = $_POST['name'] && $_POST['colour']

但我不确定如何进步。

3 个答案:

答案 0 :(得分:1)

绝不信任用户输入 。在使用之前清理并验证您的输入。 这可以更好地安排,但基本仍然是正确的。

PHP手册:filter_input_array()

PHP手册:filter_var_array()

小型函数库

function sanitizeArray($filterRules)
{
   return filter_input_array(INPUT_POST, $filterRules, true)
}

function validateArray($filteredData, $validationRules)
{
   return filter_var_array($filteredData, $validationRules, true);
}

function checkFilterResults(array $testArray, array &$errors)
{
   if (!in_array(false, $testArray, true) || !in_array(null, $testArray, true)) {
       foreach($testArray as $key => $value)
       {
           $errors[$key] = '';
       }

       return true;
   }

   if ($testArray['name'] !== true) { //You can make a function and do various test.
       $errors['name'] = 'That is not a valid name.'; 
   }

   if ($testArray['clour'] !== true) { //You can make a function and do many test.
       $errors['colour'] = 'That is not a valid colour.'; 
   }

   return false;
}

function processUserInput(array &$filteredData, array $filterRulesArray, array $validationRulesArray, array &$cleanData, array &$errors)
{
    $filteredInput = null;
    $tempData = sanitizeArray($filterRulesArray);

    if (!$checkFilterResults($tempData, $errors)){
        throw new UnexpectedValueException("An input value was unable to be sanitized.");
        //Consider forcing the page to redraw.
    }

    $filteredData = $tempData;
    $validatedData = validateArray($filteredData, $validationRulesArray);

    if (!$checkFilterResults($validatedData, $errors)){
        return false;
    }

    $errors['form'] = ''; 
    $cleanData = $validatedData;
    return true;
}

function htmlEscapeArray(array &$filteredData)
{
    foreach($filteredData as $key => &$value)
    {
        $value = htmlspecialchars($value, ENT_QUOTES | ENT_HTML5, 'UTF-8', false);
    }

    return; 
}

基本主线

try {
        $filterRulesArray = [];      //You define this.
        $filteredData     = [];    //A temporary array.

        $validationRulesArray = [];   //You define this.
        $validatedData        = null; //Another temporary array.

        $results   = null;     //Input processing results: true or false.
        $cleanData = null;     //Filtered and validated input array.
        $errors    = [];       //Any errors that have accumulated.

        if (isset($_POST, $_POST['submit'], $_POST['colour']) && !empty($_POST)) {
            $results = processUserInput($filteredData, $filterRulesArray, $validationRulesArray, $cleanData, $errors);
        } else {
            $errors['form'] = "You must fill out the form."
        }

        if ($results === true) {
            $name   = $cleanData['name'];   //You can do what you want.
            $colour = $cleanData['colour']; //You can do what you want.
            //header("Location: http://url.com/registration/thankYou/")
            //exit;
        }

        //Prepare user input for re-display in browser
        htmlEscapeArray($filteredData);
} catch (Exception $e) {
    header("Location: http://url.com/samePage/"); //Force a page reload.
}

如果输入处理失败,请重新绘制表单。 使用$errors数组显示错误消息。 使用$filteredData数组使表单变得粘滞。

<html>
    <head>
        <title>Your Webpage</title>
    </head>
    <body>
        <h1>My Form</h1>
        <form action="/" method="post">

            <!-- Make spots for error messages -->

            <input type="text" name="name" placeholder="Acme Corp" value="PUT PHP HERE"/>

            <!-- No time to display sticky radios! :-) -->
            <input name="colour" type="radio" checked="checked" value="red">Red<br>
            <input name="colour" type="radio" value="blue">Blue<br>
            <input name="colour" type="radio" value="green">Green<br>
            <input type="submit" name="submit" value="Submit">
        </form>
    </body>
</html>

提示:

为无线电提交数字可能更好,而不是像(红色,绿色,蓝色)更长的字符串值。数字更容易清理验证。当然,您必须将输入数字转换为相应的字符串。您将在验证 完成后执行 ,但在使用 值之前 。祝你好运!

答案 1 :(得分:0)

你可以使用这样的数组来访问它。

$data[] = $_POST['name'];
  $data[] =$_POST['colour'];

或组合两个变量

$data = $_POST['name'].'&'.$_POST['colour'];

答案 2 :(得分:0)

在php中使用Array进行此过程如下:

@Html.ValidationMessageFor(model => model.StartDate, "Your custom message.", new { @class = "text-danger" })