【问题标题】:Why do I get "undefined index"?为什么我会得到“未定义的索引”?
【发布时间】:2011-01-07 12:31:19
【问题描述】:

目前我正在开发与我们联系,当我在本地主机上运行该脚本时,我的问题是什么,错误中的名称字段和电子邮件字段出现如下:

(<br /><b>Notice</b>:  Undefined index: name in <b>E:\wamp\www\rrr\btech\index.php</b> on line <b>49</b><br />)
(<br /><b>Notice</b>:  Undefined index: email in <b>E:\wamp\www\rrr\btech\index.php</b> on line <b>49</b><br />)

点击提交后会出现未定义的语法错误。

<tr>
<td valign="bottom"><span class="contactus-txt">
  <input name="textfield222" type="text" class="contact-field" style="width:125px;"   value="<?php echo $_GET['name'];?>" />
</span></td>
<td valign="bottom"><span class="contactus-txt">
  <input name="textfield2222" type="text" class="contact-field" style="width:125px;"  value="<?php echo $_GET['Email-Id'];?>"/>
</span></td>
</tr>

我使用了那个 html 代码。

谁能告诉我我犯了什么错误?

【问题讨论】:

    标签: php javascript html css forms


    【解决方案1】:

    这是正确的方法:

    <?php
    $FORM['name'] = "";
    $FORM['Email-Id'] = "";
    if (isset($_GET['name'])) $FORM['name'] = htmlspecialchars($_GET['name']);
    if (isset($_GET['Email-Id'])) $FORM['Email-Id'] = htmlspecialchars($_GET['Email-Id']);
    ?>
    <tr>
    <td valign="bottom"><span class="contactus-txt">
      <input name="textfield222" type="text" class="contact-field" style="width:125px;"   value="<?php echo $FORM['name'];?>" />
    </span></td>
    <td valign="bottom"><span class="contactus-txt">
      <input name="textfield2222" type="text" class="contact-field" style="width:125px;"  value="<?php echo $FORM['Email-Id'];?>"/>
    </span></td>
    

    所有变量在使用前都应该初始化。

    【讨论】:

    • 虽然我完全赞成“遵守规则”,但我从不理会这些通知,但我认为在这种情况下关闭 E_NOTICE 非常好。我在没有 E_NOTICE 的情况下进行开发,如果我检查每个变量的 isset,那将非常耗时!随意不同意!
    • @kieran 第一次尝试调试不是鸡大小的应用程序会让你放心。
    • @kieran 通知可能包含有关拼写错误和未初始化变量的有价值信息,因此关闭通知不是一件好事。我agree it sucks 必须为请求变量执行此操作,但它就是这样
    • 所以你说的不是通过以下方式检查变量: if($s) { echo 'test'; } 你做 if(isset($s) && $s){ echo 'test'; } 每次可能没有定义 $s?
    • @kieran:像这样的蹩脚函数使它更短的桶负载符合 E_STRICT:function ifnull(&amp;$var, $default) { if (isset($var) &amp;&amp; $var !== null) return $var; return $default; } $foo = ifnull($_GET['foo'], 1);
    【解决方案2】:

    你的问题不是很清楚。我假设您对此表单有一个操作以及一个 post 或 get 方法?

    从我可以看到的两个输入中,您的值应该出现在 $_POST 变量中,作为 post 方法的 $_POST['textfield222'] 和 $_POST['textfield2222'] 以及 $_GET['textfield222'] 和 $ _GET['textfield2222'] 如果表单使用 get 方法。

    作为一般规则,永远不要相信用户输入 - 在使用之前验证表单数据。

    希望对你有用。

    【讨论】:

    • “从不相信用户输入”的大+1。其余的答案也很好,但是,天哪,当我看到 $_GET 或 $_POST 直接回显(或更糟)时我不寒而栗,甚至没有逃脱,更不用说验证了。
    • @Spudley 事实上,这句话在这种情况下几乎没有什么关系。
    猜你喜欢
    • 2015-03-23
    • 2012-02-05
    • 2021-12-30
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2015-10-01
    • 2023-03-03
    相关资源
    最近更新 更多