使用PHP从HTML表单中收集信息

This is what I got.

formulario.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

<html>
<head>
<title> Surveys </title>
</head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<body>
<form action="main2.php" method="post">

    Number of Surveys <input type="number" name="number">
    <input type="submit" value="Send"/>

</form>
</body>
</html>

main2.php

<html>
<body>

<?

function Survey($number){

    if($number > 0){ 
        $a = 1;
        while ($a <= $number){ ?>
<h2>Survey for person number <? echo $a;?></h2> 
<form action="resultados.php" method="post">
Age <input type="number" name="age"/> <br><br>
Genre <br><br>
<input type="radio" name="male" value="6"/> Male <br>
<input type="radio" name="female" value="7"/> Female <br><br>
Marital Status <br><br>
<input type="radio" name="single" value="1"/> Single <br>
<input type="radio" name="married" value="2"/> Married <br>
<input type="radio" name="divorced" value="3"/> Divorced <br>
<input type="radio" name="free" value="4"/> Free Union <br>
<input type="radio" name="widowed" value="5"/> Widowed <br><br>
<?          
            $a = $a + 1;
        }
    }
}
echo Survey($_POST['number']);


?>

<input type="submit" value="Send"/>
</form>
</body>
</html>

resultados.php

<?

function Calculate($age){
    $array_of_ages = array();
    $array_of_ages[] = $age;
    var_dump($array_of_ages);
}

echo Calcular($_POST['age']);
?>

I want to create a little survey, so in the "formulario.php" file I select an amount of people to go on "main2.php" and create the survey for each. For example, if I select 3 persons, what "main2.php" code should do is to create 3 surveys, one after another, in the same page with only a "submit" buttom. Then, when I "fill all the surveys and press the submit buttom what I'm trying to do with "resultados.php" is to get all the data gathered from those forms and do some stuff like, counting how many people is married or divorced, an average of age in women and men, etc... and show them, after I press "Send".

The problem is that I'm stuck and I don't have any clue on how to do it. I've searched about in ways to catch the info like, arrays, loops, but none of it works. As you can see, I created "resultados.php" where I would supposely show the info processed but no luck.

Depending on which number I select in the first .php file, the "while" in the "main2.php" creates the amount of surveys suggested, but I don't know if it's the right way to do it, according for what I want to reach.

I'll appreciate any help on this. I just started to learn PHP this week and I'm frustrated now because I can't figure out how to solve it by my own.

PD: Sorry for my english, not my native language.

dounabi6295
dounabi6295 我知道,但为了完成我想要做的事情,我只是在一页中“打印”所有调查来收集数据。
6 年多之前 回复
duanhan1392
duanhan1392 你为什么要给一个人同样的调查3次?不管每个访客都不应该得到1次调查吗?
6 年多之前 回复

1个回答



首要重要的是,您的&lt; form&gt; </ code>标记 </ em> while </ code>循环。 虽然您的表单只关闭一次,但它会多次打开,导致HTML无效。 所以把它放在 while </ code>循环之前:</ p>

  $ a = 1;  ?&gt; 
&lt; form action =“resultados.php”method =“post”&gt;
&lt;? while($ a&lt; = $ number){?&gt;
&lt; h2&gt;调查人数&lt;? echo $ a;?&gt;&lt; / h2&gt;
</ code> </ pre>

第二件事,因为您的 age </ em>在表单中重复多次, 你应该把它作为一个HTML输入数组,只有它可以保存多个值,所以你的 age </ em>输入的 name </ code>属性改为:</ p>

 &lt;! - []告诉HTML应该保留具有此名称的所有输入值。 如果你没有这个,只会传递你的最后一个值 - &gt; 
&lt; input type =“number”name =“age []”/&gt;
</ code> </ pre>
\ n

要考虑的另一件事是你的单选按钮,单选按钮作为组工作,现在逻辑上有人填写表单不能同时检查男性</ em>和女性</ em>对吗? 因此,您应该对它们进行分组以便只填充一个,您可以通过更改 name </ code>属性再次执行此操作:</ p>

 &lt;! - 再次 添加[]是因为你重复它.--&gt; 
&lt; input type =“radio”name =“gender []”value =“6”/&gt; 男&lt; br&gt;
&lt; input type =“radio”name =“gender []”value =“7”/&gt; 女性&lt; br&gt;&lt; br&gt;
</ code> </ pre>

最后,由于 age </ em>是一个数组,您需要循环遍历值 PHP方面:</ p>

  function Calculate($ age){
foreach($ age as $ ages)
{
echo $ ages;
}
} \ n </ code> </ pre>
</ div>

展开原文

原文

The first important thing is, your <form> tag is inside the while loop. Though your form is closing only once, it's opening several times which results in an invalid HTML. So place it before the while loop this way:

$a = 1; ?>
<form action="resultados.php" method="post">
<? while ($a <= $number){ ?>
<h2>Survey for person number <? echo $a;?></h2>

Second thing, since you have age repeating multiple times in your form, you should make it as an HTML input array, only then it can hold multiple values, so change this your age input's name attribute to:

<!-- `[]` tells the HTML that all values of input with this name should
be preserved. If you do not have this, only your last value will be passed -->
<input type="number" name="age[]"/>

Another thing to consider is your radio buttons, radio buttons work as group, now logically someone filling the form cannot be checking both male and female, right? So you should group them so that only one is filled, you do this again by changing the name attribute:

<!-- Again the `[]` is added because you have it repeating.-->
<input type="radio" name="gender[]" value="6"/> Male <br>
<input type="radio" name="gender[]" value="7"/> Female <br><br>

Lastly, since age is an array, you need to loop through the values at the PHP side:

function Calculate($age){
    foreach($age as $ages)
    {
      echo $ages;
    }
}

duangao8359
duangao8359 好吧,伙伴。 这是。 链接
6 年多之前 回复
doutou7286
doutou7286 你可以在上面提出一个新的问题而不是这个长时间的讨论^ - ^
6 年多之前 回复
duanfei1975
duanfei1975 我使用$ _POST来获取一个值,所以我将它存储在变量$ number = $ _POST ['number']中,它捕获我在第一个.php文件中提交的调查数量。 然后,我需要在第二个.php文件中定义的函数中使用该值来计算平均值,根据输入的调查数量($ _POST方法捕获的值),但这就是问题开始的地方。 我尝试了SESSIONS,但我不知道我做错了,因为它似乎使用定义的值,而我需要使用catched值并将其分配给SESSION方法。
6 年多之前 回复
douqi2571
douqi2571 为了在多个页面之间共享值,会话是一种完美的方法。 尝试一下,如果你遇到任何其他问题,请告诉我^ - ^
6 年多之前 回复
douchun9719
douchun9719 代码非常有用。 我意识到使用echo来分离代码比使用PHP混合HTML更容易理解,使用<? 每次我需要在代码之间切换。 我设法完成了我所达到的目标。 虽然,我再次陷入困境。 我试图从一个.php文件中的变量中获取一个值,并在其他.php文件中使用它,但我无法解决它。 我尝试过全局变量并包含方法,但没有运气。
6 年多之前 回复
dongxingdu9594
dongxingdu9594 我完全理解你的意思,在这种情况下我们的数组将会更长一些,我们将为我们的数组添加另一个索引,你需要2个foreach。 查看此代码并进行相应修改。
6 年多之前 回复
doutu6616
doutu6616 是的先生。 我为Genre命名了gender [],为婚姻状况命名了marital_state [],但是没有用。 例如。 当我在第一次调查和下面的选择中选择Single时,在另一次调查中选择Married,第一次调查的单选按钮取消选中。
6 年多之前 回复
doufeng9567
doufeng9567 您是否将单选按钮分成两组? 一个用于流派,另一个用于婚姻状况。
6 年多之前 回复
douaipi3965
douaipi3965 由于你的建议,我设法赶上每个调查的年龄,但现在看来单选按钮不能像我预期的那样工作。 将它们放在输入数组中,当我在formulario.php页面中创建多个调查时,它们的工作方式就像所有按钮都是整个组,而不是通过调查对它们进行分组。
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐