我在PHP切换功能方面遇到了麻烦。
根据用户选择,我想用切换功能中的选择对应值填充输入“目的地”。不幸的是,当我尝试在我的dev上运行代码时。服务器我一直在'变量未定义'。
修改
我只想补充说,重要的是我的选择和选项值与我依赖它们的脚本保持一致。
第二次修改
目标是让我的“dropdown”元素填充我的对象,并将“destination”输入作为该对象的唯一描述(由我的switch示例中给出的值填充)。
<?php
if(isset($_POST['dropdown']))
switch ($_POST['dropdown']) {
case "Data1": $input = "Data1Value"; break;
case "Data2": $input = "Data2Value"; break;
case "Data3": $input = "Data3Value"; break;
}
?>
<form method="POST">
<select name="dropdown" id="dropdown">
<option value="Data1">Data1</option>
<option value="Data2">Data2</option>
<option value="Data3">Data3</option>
</select>
<input id="destination" name="destination" value="<?php echo $input ?>">
</form>
如果这不是最好的方法,我愿意接受有关获得我想要的结果的其他建议。我感谢您提供的任何帮助。
答案 0 :(得分:2)
如前所述,未定义的变量是由于您的页面获得空的$ _POST结果,只要尚未提交第一个表单。为了让你的交换机工作,你必须点击一个提交按钮(当然不存在,不幸:)),以便页面重新加载正确的POST数据。
我想你可能想要这样的东西:
<?php
if(isset($_POST['destination']))
{
$destinations = array (
"Data1" => "Data1Value",
"Data2" => "Data2Value",
"Data3" => "Data3Value");
$dest = $destinations[$_POST['destination']];
echo "<p>destination set from POST vars: <b>$dest</b></p><br />";
// do whatever you want with your destination
// (presumably redirect to another page)
// travel_to ($dest);
die(); // redirecting should make you leave the page
}
?>
<form method="POST">
<select name="destination">
<option value="Data1">Data1</option>
<option value="Data2">Data2</option>
<option value="Data3">Data3</option>
</select>
<input type='submit' value='Travel!'>
</form>
一些评论:
请注意,执行输入的页面和处理POST数据的页面通常是两个单独的HTML / PHP文件。从同一个文件中执行这两个操作更容易测试,但可能有点令人困惑。
编辑:
摆弄数据库是一个完全不同的问题,我可能因为偏离主题而受到责骂,但为了完整起见,这里是你可以做的粗略草图。
请注意,您必须创建数据库和保存记录的表。
另请注意,此代码不会开箱即用 您必须使用PHP手册自行填写空白 特别是,我将错误处理留给了简洁。
<?php
if(isset($_POST['value_selector']))
{
$data_values = array (
"Data1" => "Data1Value",
"Data2" => "Data2Value",
"Data3" => "Data3Value");
$value = $data_values[$_POST['value_selector']];
// now that you've got your value, let's cram it into a DB!
// see PHP manual for details
// --------------------------
// you'll need to create a base named "database"
// with a table named "data_table"
// containing a field named "data"
// and provide a host, user name & password for the MySQL connection
//
$DBH = new PDO("mysql:host=$host;dbname=database", $user, $pass);
$DBH->exec("INSERT INTO data_table ( data ) values ( '$value' )");
// done!
echo "<p>value of <b>data</b> set from POST vars to <b>$value</b></p><br />";
die();
}
?>
<form method="POST">
<select name="value_selector">
<option value="Data1">Data1</option>
<option value="Data2">Data2</option>
<option value="Data3">Data3</option>
</select>
<input type='submit' value='Store that data!'>
</form>
答案 1 :(得分:1)
你的脚本运行正常。你好像对这个消息感到困扰。只需禁用php错误通知。
error_reporting( E_ALL ^E_NOTICE );
在脚本的开头有一个变量$_POST ['dropdown']
。如果您需要在代码开头的默认值,请将该条件放在脚本中。
if(isset($_POST['dropdown'])){
switch ($_POST['dropdown']) {
case "Data1": $input = "Data1Value"; break;
case "Data2": $input = "Data2Value"; break;
case "Data3": $input = "Data3Value"; break;
}
}else{
$input = "Some default value";
}
如果这种情况可以让你感到困惑,也可以考虑你的三元组。所以我把钥匙放在样品中。
答案 2 :(得分:0)
当您第一次运行脚本且没有$_POST['dropdown']
时,$input
变量永远不会被设置,然后当您回显它时,它将抛出未定义的变量错误。
尝试检查$input
是否先设置为isset($input)
。
答案 3 :(得分:0)
这适用于我,没有任何错误或警告:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_POST['dropdown']))
switch ($_POST['dropdown']) {
case "Data1": $input = "Data1Value"; break;
case "Data2": $input = "Data2Value"; break;
case "Data3": $input = "Data3Value"; break;
}else{
$input = "Type something...";
}
?>
<form method="POST">
<select name="dropdown" id="dropdown">
<option value="Data1">Data1</option>
<option value="Data2">Data2</option>
<option value="Data3">Data3</option>
</select>
<input id="destination" name="destination" value="<?php echo $input ?>">
</form>