所以我正在尝试构建一个非常简单的(半)电子邮件系统,仅用于练习和学习。
所以我的导航栏上有用户个人信息加载到正文(右侧)。导航栏内有可点击的链接,允许用户撰写,阅读消息等。
链接附有PHP参数,如下所示。
<a href="body.php?action=compose">
在下面的图片中它只是一个页面加载,所以出于调试目的,我使用get not set,因为没有采取任何操作(链接点击)
现在,当用户想要撰写电子邮件并点击撰写时,会发生以下情况:
我的逻辑
在这种情况下,我得到了用户想要通过附加到url 的参数获取的操作,因此最后会出现一个允许用户撰写/发送消息给另一个用户的表单,如下所示:
我通过以下代码实现此目的:
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()
方法创建一个测试页面,该方法可以工作并将数据插入到数据库中。但是当我将它实现到我的主页面时,当点击提交页面时,只需重新加载而不进行任何操作(如上所述)。
我已经尝试将form方法设置为$ _GET而不是$ _POST但仍然是相同的结果
任何帮助表示赞赏!
其他INFO
我发送消息的方法如下所示:
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;
}
}
答案 0 :(得分:2)
提交表单会将您带到您的页面,而无需任何GET请求。
<form name="composeMsg" method="post" id="composeMsg" action="">
由于您使用以下内容包装POST数据提交:
if($_SERVER['REQUEST_METHOD'] == 'GET'){
它永远不会到达那里。
答案 1 :(得分:2)
问题是当您点击表单POST
上的提交时,将生成方法,因此您的条件if($_SERVER['REQUEST_METHOD'] == 'GET'){
未执行。在代码中进行以下更改
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