【发布时间】:2017-12-29 01:34:37
【问题描述】:
所以我正在尝试构建一个非常简单的(半)电子邮件系统,仅用于练习和学习。
所以我的导航栏在正文(右侧)上加载了用户个人信息。导航栏内有可点击的链接,允许用户撰写、阅读消息等。
链接附加了一个PHP参数,如下所示。
<a href="body.php?action=compose">
在下图中这只是一个页面加载,所以出于调试目的,我使用 get not set,因为没有采取任何操作(点击链接)
现在当用户想要撰写电子邮件并点击撰写时,会发生以下情况:
我的逻辑
在这种情况下,我通过附加到 url 的参数得到用户想要采取的操作 compose,因此出现了一个允许用户撰写/发送消息给另一个用户的表单,如下所示:
我通过以下代码实现了这一点:
if($_SERVER['REQUEST_METHOD'] == 'GET'){
if(isset($_GET['action'])){
//get which action user wants to take in this example compose email
$action = $_GET['action'];
if($action == 'compose'){
?>
<form name="composeMsg" method="post" id="composeMsg" action="">
<input type="text" name="receipnt" placeholder="Receipnt" id="from">
<div class="break"></div>
<input type="text" name="subject" placeholder="Subject" id="subject">
<div class="break"></div>
<textarea placeholder="Message" name="msgBody" style="width: 350px; height: 200px">
</textarea>
<div class="break"></div>
<button type="submit" name="sendMsg" class="btn btn-danger">SEND</button>
</form>
<?php
}
//submit button has been clicked
if(isset($_POST['sendMsg'])){
//execute script to send msg
$check = $msgClass->composeMsg('14', $_POST['receipnt'], $_POST['subject'], $_POST['msgBody'], date('Y-m-d') );
if($check == true){
echo '<h1>MSG SENT!</h1>';
}
elseif($check == false){
echo '<h1>OOPS...SOMETHING WENT WRONG!</h1>';
}
}//isset msgSent
我的问题
发送消息时我得到的只是一个重新加载的屏幕。没有错误,没有警告,也没有脚本执行,所以我真的不知道从哪里开始调试。
我尝试只使用电子邮件表单和我的composeMsg() 方法创建一个测试页面,该方法有效并将数据插入到数据库中。但是当我在我的主页中实现它时,当点击提交时页面只是重新加载而没有任何操作(如前所述)。
我尝试将表单方法设置为 $_GET 而不是 $_POST 但结果仍然相同
任何帮助表示赞赏!
附加信息
我发送消息的方法如下所示,这是正确的:
public function composeMsg($userID, $toUser, $subject, $msg, $senton ){
$db = DB::getInstance();
$sql = "INSERT INTO messages (userID, fromID, subject, body, senton) values (:userID, :toUser, :subject, :msg, :senton )";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':userID', $userID);
$stmnt->bindValue(':toUser', $toUser);
$stmnt->bindValue(':subject', $subject);
$stmnt->bindValue(':msg', $msg);
$stmnt->bindValue(':senton', $senton);
$stmnt->execute();
if($stmnt->rowCount() > 0){
return true;
}
else{
return false;
}
}
【问题讨论】:
-
你是如何使用 composeMsg() 方法的?您还为此使用了一个类。轮回通常会因为停止执行而静默失败。代码不足。
-
现在看到新的 cmets,错误报告应该会向您抛出未定义的索引错误,因此您的系统可能未设置为默认捕获和显示。 php.net/manual/en/function.error-reporting.php 这样做,它现在使用您的原始代码向您展示了什么?
-
我在第一条评论中打错了:"Reurns",应该读作 "Returns"。那么,关于错误报告?再次;这应该会给你一个未定义的索引。