我需要你的帮助!我试图使用Php在sql表中保存变量,但我有问题。 php中有两个问题,第一个涉及大陆,第二个问题来自非洲大陆。我想使用循环来检查在第一个问题中选择了哪个大陆,然后保存第二个问题的值。我使用一些javascript代码隐藏了未经检查的大陆的选项(我没有问题)。
HTML代码:
<form method="post" action="">
<fieldset><legend>Continents</legend>
<select id="q1" name="q1">
<option value="1">Africa</option>
<option value="2">Asia</option>
<option value="3">Australia</option>
<option value="4">America</option>
<option value="5">Europe</option>
</select>
<select id="q2" name="Africa">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Asia">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Australia">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="America">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Europe">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
</fieldset>
Php代码
$q1 = $_POST['q1'];
$continents = array("Africa","Asia", "Australia","America","Europe");
for ($i = 1; $i <= 5; $i++) {
if($q1 == $i) {
$q2 = $_POST[$continents[$i-1]]
}
}
答案 0 :(得分:1)
您的数组应该来自1 to 5
而不是0 to 4
,因为1 to 5
中的值为q1
。
或者,我建议您更改HTML结构,以便在不使用循环的情况下将continent值放在一行中。您需要更改大陆的值,如
<select id="q1" name="q1">
<option value="Africa">Africa</option>
<option value="Asia">Asia</option>
<option value="Australia">Australia</option>
<option value="America">America</option>
<option value="Europe">Europe</option>
</select>
要获得所选大陆的价值,请使用$_POST[$_POST['q1']]
。对于egs $_POST['q1']=Asia
,那么$_POST['Asia']
将返回亚洲的选择,
$q2= $_POST[$_POST['q1']];
答案 1 :(得分:0)
更改
$continents =
array(1 => "Africa",
2 => "Asia",
3 => "Australia",
4 => "America",
5 => "Europe");
或
if(($q1-1) == $i) {
$q2 = $_POST[$continents[$i]]
}
答案 2 :(得分:0)
首先,您可以更改select
大陆HTML:
<select id="q1" name="q1">
<option value="Africa">Africa</option>
<option value="Asia">Asia</option>
<option value="Australia">Australia</option>
<option value="America">America</option>
<option value="Europe">Europe</option>
</select>
然后你可以遍布你的大陆并得到答案:
$q1 = $_POST['q1'];
$continents = array("Africa","Asia", "Australia","America","Europe");
foreach($continents as $continent) {
if ($_POST['q1'] == $continent) {
$q2 = $_POST[$continent];
}
}
现在,您可以在$q2
中找到第二个问题的答案。
答案 3 :(得分:0)
这个怎么样?
// Always try to seperate logic from your view
// Intialize data
$continents = array("Africa", "Asia", "Australia", "America", "Europe");
// Check for $_POST
if(isset($_POST["q1"])) {
foreach($continents as $id => $continent) {
if($_POST["q1"] == $id) {
// Do something special here
}
}
}
// Render HTML
<form method="post" action="">
<fieldset>
<legend>Continents</legend>
<select id="q1" name="q1">
<!-- Notice that I echo only variables not all of the html -->
<?php foreach($continents as $id => $continent) { ?>
<option value="<?php echo $id; ?>"><?php echo $continent; ?></option>
<?php } ?>
</select>
<select id="q2" name="Africa">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Asia">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Australia">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="America">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
<select id="q2" name="Europe">
<option value="1">Choice 1</option>
<option value="2">Choice 2</option>
</select>
</fieldset>
关于我的解决方案的好处是,现在你可以创建你想要的任何数组,你的代码将始终有效。
例如,您可以从数据库中选择数据并将它们存储在$ continents变量中。
$query = "SELECT id, name FROM continents";
$result = mysql_query($query);
$continents = array();
while($row = mysql_fetch_assoc($result)) {
$continents[$row["id"]] = $row["name"];
}
酷吧? :)
答案 4 :(得分:0)
我终于找到了解决方案!!!
替换
$q2 = $_POST[$continents[$i-1]]
带
$q2 = $_POST["{$continents[$i-1]}"];
我想要的解决方案!!