PHP:根据用户选择填充输入

时间:2014-01-09 23:55:04

标签: php html

我在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>

如果这不是最好的方法,我愿意接受有关获得我想要的结果的其他建议。我感谢您提供的任何帮助。

4 个答案:

答案 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>

一些评论:

  • 将“下拉”重命名为更有意义的内容。坏名称会造成错误的代码。
  • 添加了提交按钮,没有这个按钮你永远不能发送表单(除了一些JavaScript的帮助,但这是另一个故事)
  • 删除了隐藏的输入,我认为这显示初始页面(选择定义目的地)和最终页面(POST数据通过选择值检索目标的位置)之间有点混淆。
  • 用数组替换了交换机。关联数组是PHP的优点(其中包括:))。最好尽快习惯它们,你很可能不会后悔。

请注意,执行输入的页面和处理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>