我完成了一个网站,当我试图移动网站时,重写规则没有按计划工作。现在网站工作,但我的联系方式是唯一不工作的东西。我得到的错误是未识别的索引:保存在contact.php的第87行。它与这行代码有关:
if (isset($_GET['save']) || $_GET['save'] == 'contact') {
include('contact-form-submit.php');
在迁移之前,整个站点运行良好。
这是联系人表单:
<?php
// check for a successful form post
if (isset($_GET['s'])) echo "<div class='"alert alert-success'">".$_GET['s']."</div>";
// check for a form error
elseif (isset($_GET['e'])) echo "<div class='"alert alert-error'">".$_GET['e']."</div>";
?>
<form method="POST action="contact.php">
<input class="input-xlarge" name="contact_name" type="text" placeholder="Naam" <?php if(isset($_GET['contact_name']) && !isset($_GET['s'])) print 'value="'.$_GET['contact_name']. '"'; ?>> <br/>
<input class="input-xlarge" name="contact_tel" type="text" placeholder="Telefoonnummer" <?php if(isset($_GET['contact_tel']) && !isset($_GET['s'])) print 'value="'.$_GET['contact_tel']. '"'; ?>><br/>
<input class="input-xlarge" name="contact_email" type="text" placeholder="E-mail" <?php if(isset($_GET['contact_email']) && !isset($_GET['s'])) print 'value="'.$_GET['contact_email']. '"'; ?>><br/>
<input class="input-xlarge" name="contact_onderwerp" type="text" placeholder="Onderwerp" <?php if(isset($_GET['contact_onderwerp']) && !isset($_GET['s'])) print 'value="'.$_GET['contact_onderwerp']. '"'; ?>><br/>
<textarea rows="6" name="contact_message" placeholder="Typ uw vraag" <?php if(isset($_GET['contact_message']) && !isset($_GET['s'])) print 'value="'.$_GET['contact_message']. '"'; ?>></textarea><br/>
<input type="hidden" name="save" value="contact">
<button type="submit" class="btn">Verstuur</button>
</form>
三个问题:
1
if (isset($_GET['save']) || $_GET['save'] == 'contact') {
isset
部分是为了避免PHP通知通过利用短路(所以$_GET['save'] == 'contact'
是只有评估,如果$_GET['save']
确实存在),但是你应该写&&
,而不是||
。
这一定是被你以前的平台上较弱的错误报告设置掩盖了;看起来你已经迁移了网站内容,但没有迁移服务器设置……哦!
2另一个问题是,你的表单的动作是"POST动作=",因为你忘记了一个"
在你的HTML:
<form method="POST action="contact.php">
你应该在你的文本编辑器中打开语法高亮,这样你就可以自己发现这些愚蠢的拼写错误。
3
最后,当您将表单方法固定为POST
时,$_GET
仍然不会填充您的表单值,因为使用 $_POST
代替。
以前没有办法这样做,除非您在其他地方有代码自动将$_POST
移动到$_GET
以在两个表单方法之间进行标准化(我有时这样做)。但是,您还没有向我们展示这个
这是因为您正在使用表单方法作为POST,并试图使用_GET使用$_POST['save']来获取它。因此将if条件改为
if (isset($_POST['save']) && $_POST['save'] == 'contact') {