0

我正在尝试使用通过 URL 传递的变量预先填充我的表单值。我尝试了许多不同的解决方案,有时我没有收到错误,变量只是没有显示。任何帮助表示赞赏,谢谢!

URL 示例:website.com/?firstname=john

代码:

    <html>

<script type="text/javascript">
    function writeform(){
        selobj = document.getElementById('selform');
        newobj = document.getElementById('newform');
        p = document.getElementById('menu').selectedIndex + 1;
        a = document.getElementById('menu2').selectedIndex + 1;
        if((p < 14 && (a == 1 || a == 2 || a == 3 ||a == 4)) { // write the 1st form
        txt = 'Person 1: '+'<input type="text"/><br/>';
        txt += 'Person 2: '+'<input type="text"/>';
        } else {
            document.getElementById('div1').style.display='block';
        }
        // if(p==2 && a==1){ // write the 2nd form
        //  txt ='Name: '+'<input type="text"/><br/>';
        //  txt+='Addr: '+'<input type="text"/>';}
        newobj.innerHTML=txt;selobj.style.display='block';
    }
</script>

<div style="width: 400px; float:left;"> <?php echo $_GET["firstname"]; ?></div>
<div style="width: 400px; float: left;"> <!-- Primary Div-->

    <p style="font-size: 16px; font-weight: bold;">Select Something</p>
    <div class="fancy3">
        <table style="width:350px; height=350px">
        <tr>
            <td>
                <select id="menu" size="14">
                    <option selected="selected"><b>--- Common Options ---</b></option>
                    <option></option> //NY
                </select>
                <br/>
                <p style="font-size: 16px; font-weight: bold;">Range</p>
                <div class="fancy3">
                    <table style="width:350px; height=350px">
                        <tr>
                            <td>
                                <select id="menu2" size="4">
                                    <option selected="selected">1</option>
                                    <option>2</option>
                                    <option>3</option>
                                    <option>4</option>
                                </select>
                                <br/>
                            </td>
                            <td>
                                <div id="selform" style="display:none">
                                    <fieldset>
                                        <div id="newform"></div>
                                    </fieldset>
                                </div>
                            </td>
                        </tr>
                    </table>
                </div>
                <br/>
                <button onclick="writeform();">Search</button></td>
                <td>
                    <div id="selform" style="display:none">
                        <fieldset>
                            <div id="newform"></div>
                        </fieldset>
                    </div>
                </td>
            </tr>
        </table>
    </div>

</div> <!-- Primary Div closing tag-->


<!-- of Field-Specific Forms-->
<div id="div1" style="display:none;">

    <form action="http://site1.com/upload" method="get"> 
        First Name: <input name="fname" type="text" value="" />
        Last Name: <input name="lname" type="text" />
        Address: <input name="address" type="text" /> 
        Zip Code: <input name="zip" type="text" /> 
        State: <input name="state" type="text" /> 
        <input type="submit" />
    </form>
</div>

<div id="div1" style="display:none;">

    <?php
        $firstname = $_GET["firstname"];
    ?>  

    <form action="http://site1.com/upload" method="get"> 
        First Name: <input name="fname" type="text" value="<?php $firstname = $_GET["firstname"]; echo "$firstname"; ?>" />
        Last Name: <input name="lname" type="text" />
        Address: <input name="address" type="text" /> 
        Zip Code: <input name="zip" type="text" /> 
        State: <input name="state" type="text" /> 
        <input type="submit" />
    </form>
</div>

<?php $firstname = $_GET["firstname"]; echo "$firstname"; ?>

</html>
4

4 回答 4

1

使用测试您在$_GET变量中获得的内容var_dump($_GET),然后使用:

echo isset($_GET["firstname"]) ? $_GET["firstname"] : "";
于 2013-05-23T04:40:00.253 回答
1

首先print_r($_GET)在文件开头使用以检查您是否传递了参数。

然后你可能想清理那个烂摊子,因为用相同的值定义 $firstname 3 次只是为了回显它是没有意义的。

其次,您真的很想更改这些操作网址,因为我很确定这是错误的:

 <form action="http://site1.com/upload" method="get">

第三,您的输入名称是 name="fname" 同时在 $_GET 中使用名字。不太确定你是否会将这两者联系起来,但无论如何。

一些建议:

  • 学习编写比这更具可读性的代码。

  • jQuery.com做一些研究,因为它真的可以帮助你少写,多做。

  • CSS不使用等号(=)作为值设置器,在你的情况下height=350px应该是height: 350px;
  • 给元素一些 ID 或类并使用一些 .css 文件,它会比你想象的更干净你的代码。
于 2013-05-23T04:59:11.673 回答
0

你开始错了,这就是为什么 URL 没有出现

<script type="text/javascript">



 function writeform(){
    selobj=document.getElementById('selform');
    newobj=document.getElementById('newform');
    p=document.getElementById('menu').selectedIndex+1;
    a=document.getElementById('menu2').selectedIndex+1;
    if((p<14 && (a==1 || a==2 || a==3 ||a==4)){ // write the 1st form
      txt ='Person 1: '+'<input type="text"/><br/>';
      txt+='Person 2: '+'<input type="text"/>';} else {
      document.getElementById('div1').style.display='block';
      }
    // if(p==2 && a==1){ // write the 2nd form
    //  txt ='Name: '+'<input type="text"/><br/>';
    //  txt+='Addr: '+'<input type="text"/>';}
    newobj.innerHTML=txt;selobj.style.display='block';}

    </script>

    <body>
        <form action="http://site1.com/upload" method="get">
        <?php echo $_GET["firstname"]; ?>

    <p style="font-size: 16px; font-weight: bold;">Select Something</p>
    <div class="fancy3"><table style="width:350px; height=350px">
      <tr><td><select id="menu" size="14">
      <option selected="selected"><b>--- Common Options ---</b></option>
      <option></option> //NY
      </select><br/>

      <p style="font-size: 16px; font-weight: bold;">Range</p>
      <div class="fancy3"><table style="width:350px; height=350px">
      <tr><td><select id="menu2" size="4">
      <option selected="selected">1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option></select><br/>
      </td>
      <td><div id="selform" style="display:none">
      <fieldset><div id="newform"></div></fieldset></div>
      </td></tr></table></div>
      <br/>
        <button onclick="writeform();">Search</button></td>
      <td><div id="selform" style="display:none">
      <fieldset><div id="newform"></div></fieldset></div>
      </td></tr></table></div>

      </div> <!-- Primary Div closing tag-->


      <!-- of Field-Specific Forms-->
      <div id="div1" style="display:none;">

      <form action="http://site1.com/upload" method="get"> 
    First Name: <input name="fname" type="text" value="" />
    Last Name: <input name="lname" type="text" />
    Address: <input name="address" type="text" /> 
    Zip Code: <input name="zip" type="text" /> 
    State: <input name="state" type="text" /> 
    <input type="submit" />
    </form>
      </div>

    <div id="div1" style="display:none;">

    <?php
    $firstname = $_GET["firstname"];
    ?>  


    First Name: <input name="fname" type="text" value="<?php $firstname = $_GET["firstname"]; echo "$firstname"; ?>" />
    Last Name: <input name="lname" type="text" />
    Address: <input name="address" type="text" /> 
    Zip Code: <input name="zip" type="text" /> 
    State: <input name="state" type="text" /> 
    <input type="submit" />
    </form>
      </div>

    <?php $firstname = $_GET["firstname"]; echo "$firstname"; ?>
</body>    
</html>
于 2013-05-23T04:49:12.687 回答
0

我在这里看到的几个问题……对于一个问题,您有多个具有相同 id 的元素(请参阅 参考资料id="selform")。

要将 get 变量加载到文本输入中,模式如下:

<input type='text' name='fieldname' value='<?= isset($_GET['field'])?$_GET['field']:"") ?>'/>

对于复选框或无线电控件,它是这样的

<input type='checkbox' name='fieldname' value='myval' <?= isset($_GET['field']) && $_GET['field'] == 'myval'?"checked=\"checked\"":"") />

对于选择框,您可以这样做:

<select name='fieldname'>
     <option value='myval' <?= isset($_GET['field']) && $_GET['field'] == 'myval'?"selected=\"selected\":"" ?>>My Val Label</option>
     <option value='myval2' <?= isset($_GET['field']) && $_GET['field'] == 'myval2'?"selected=\"selected\":"" ?>>My Val2 Label</option>
</select>

这是一个漂亮的选择框功能,可以让您在代码中更简洁地输出选择(我发现每个元素的检查有点乏味)

function showSelect($name, $options, $selected, $attr = array()){
    $str = "<select name='".$name.'"';
    foreach($attr as $name=>$val){
        $str.= " ".$name."='".$val."'";
    }
    $str.=">";
    foreach($options as $k=>$val){
        $str.= "<option value='".$val."'".($val==$selected?" selected='selected'":"").">".$k.'</option>';
    }
    $str.="</select>";
}

你可以像这样使用它......

$days = array();
for($d = 1; $x<=31; $x++){
     $days[(string)$d] = (string)$d;
}

echo showSelect("formDays", $days, $_POST["formDays"], array("id"=>"formDays"))
于 2013-05-23T05:28:26.700 回答