【问题标题】:Running PHP Contact Form on EC2 for S3-Hosted Website在 EC2 上为 S3 托管的网站运行 PHP 联系表单
【发布时间】:2015-10-17 06:44:16
【问题描述】:

我是一个相当新手级别的程序员,所以请原谅以下任何(非常)平庸的错误。

我目前正在创建一个个人品牌网站,其中包含一些托管在 Amazon S3 上的 HTML5/CSS3 页面,包括一个联系页面。我的联系表单当前指向(Amazon Linux)EC2 实例上的 PHP 页面,我通过遵循AWS's guide 和一些(某种有趣的)反复试验将其设置为 LAMP 服务器。我的目的是让这个 PHP 表单将联系人输入的任何信息拼接到作为单独(基于 AWS)RDS 实例托管的 MySQL 数据库中。

虽然我知道还有很多更简单的方法(mailto 操作等),但我一直在尽最大努力让它发挥作用,但似乎无法弄清楚我做错了什么.我的表单将完美地重定向到 PHP 页面,但不会发生返回,也不会将数据放入数据库。本质上,我只是得到一个纯白的页面。

我必须在与 PHP 重定向相同的 LAMP 服务器上设置数据库,还是我的代码中存在一些完全不可靠的地方?

我在下面发布了我的 PHP 代码以及联系页面的 HTML 表单。任何帮助将不胜感激!提前非常感谢您!

PHP 代码(contact.php):

<?php

$link = mysql_connect("[Instance Public IP]:[Port #]", "[Username]", "[Password]", "[Database Name]")

if($link === false) {
    die("ERROR: Could not connect." . mysqli_connect_error());
}

$contact_name = mysqli_real_escape_string($link, $_POST['Name']);
$contact_email = mysqli_real_escape_string($link, $_POST['E-Mail']);
$subject = mysqli_real_escape_string($link, $_POST['Subject']);
$message = mysqli_real_escape_string($link, $_POST['Message']);

$sql = "INSERT INTO contacts (contact_name, contact_email, subject, message) VALUES ('$contact_name','$contact_email', '$subject', '$message')";
if(mysqli_query($link, $sql)){
    echo "Thank you! Your message has been sent successfully.";
} else{
    echo "ERROR: Unable to send successfully." .
    mysqli_error($link);
}

mysqli_close($link);
?>

HTML 代码 (contact.html):

            <form action="[contact.php URL]" method="post">
            <div>
                <label for="Name"><b>Name:</b></label>
                <input type="text" id="Name" autofocus required />
            </div>
            <div>
                <label for="E-Mail"><b>E-Mail:</b></label>
                <input type="email" id="E-Mail" required />
            </div>
            <div>
                <label for="Subject"><b>Subject:</b></label>
                <input type="text" id="Subject" required />
            </div>
            <div>
                <label for="Message"><b>Message:</b></label>
                <textarea id="Message" required>Please write your inquiry here.</textarea>
            </div>
            <div>
                <button type="submit">Submit</button>
            </div>
            <div>
                <button type="reset">Reset</button>
            </div>
        </form>

我已将生产代码中的所有 [通用标签] 替换为必要的用户名、密码等。

【问题讨论】:

  • 您必须在 html 输入中添加 name 属性。例如,你应该写 &lt;input type="email" id="E-Mail" name="E-Mail" required /&gt; 而不是 &lt;input type="email" id="E-Mail" required /&gt; 阅读更多关于它的信息 here
  • 嗨@Maz;感谢您的快速回复以及链接!我已经继续编辑我的 HTML 以使用您的建议,但不幸的是我仍然遇到同样的问题。我可以调出 AMI 测试页面,所以我知道我的 EC2 实例是可公开访问的,但我的 PHP 甚至没有返回错误代码……嗯,我会尝试更多地研究这些文档,谢谢又是你!
  • 在您的contact.php 页面中执行此操作:var_dump($_POST)。结果如何?
  • 另外刚刚注意到代码中有语法错误 echo "ERROR: Unable to send successfully." . 使用 ; 而不是 .$link = mysql_connect("[Instance Public IP]:[Port #]", "[Username]", "[Password]", "[Database Name]") 分号 ; 在行尾
  • @Maz,对于迟到的回复,我深表歉意。非常感谢你的帮助!我愚蠢的语法错误是这里问题的根源,所以现在我至少手头有一个可以工作的 PHP 页面。但是,看起来我的数据库连接有点不稳定,所以我还有一些工作要做。至少我现在得到了错误返回! (“错误:无法连接。”)我将深入研究 RDS 设置,但现在这节省了我的培根。再次感谢!

标签: php mysql amazon-web-services amazon-ec2 amazon-s3


【解决方案1】:

所以错误是:

  • 语法错误
  • 在 php 中发布表单需要 HTML 输入名称属性

一些建议:

  • 使用可以自动检测语法错误的 IDE。
  • 开始学习简单的调试技巧,例如var_dump
  • 深入了解 xdebug

编码愉快:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多