2017-12-20 12 views
0

私はちょうどHTMLとPHPに入っています。私は現在、ユーザーの入力を受け取り、与えられたデータベースにデータを配置する連絡先ページに取り組んでいます。フォームを提出すると、成功と失敗のメッセージの他に、私はすべてのことを機能させることができました。私はPHPの 'if'と 'else'ステートメントを使用して、同じページに成功または失敗のメッセージを表示しようとしています。私はヘッダーに成功または失敗のメッセージを表示することができたことに注意してください。フォームを送信すると成功または失敗するメッセージ

私は多くの研究を行い、同様の問題を抱えています。しかし、どれもうまくいかないようです。もし誰かが私のコードを見てくれれば幸いです。おそらく私を正しい方向に向けるでしょう。前もって感謝します。

HTMLコード:

<section class="main-container"> 
<div class="main-wrapper"> 
    <h2>Contact Us</h2> 
    <form class="signup-form" action="includes/contact.inc.php" method="POST">  
     <input type="text" name="user_fullname" required placeholder="Fullname"> 
     <input type="email" name="user_email" required placeholder="E-mail"> 
     <input type="text" name="subject" required placeholder="Subject"> 
     <input type="text" name="message" style="height:250px;" required placeholder="Message"> 
     <button type="submit" name="submit">Submit</button> 
    </form> 
</div> 
</section> 

<?php 
    if (isset($_POST['submit'])) { 
     echo "Contact Successful!"; 
    } else { 
     echo "Contact Fail!"; 
    }   
?> 

PHPコード:

<?php 

if (isset($_POST['submit'])) { 

    include_once 'dbh.inc.php'; 

    $fullname = mysqli_real_escape_string($conn, $_POST['user_fullname']); 
    $email  = mysqli_real_escape_string($conn, $_POST['user_email']); 
    $subject = mysqli_real_escape_string($conn, $_POST['subject']); 
    $message = mysqli_real_escape_string($conn, $_POST['message']); 


    if (!preg_match("/^[a-zA-Z]*$/", $fullname)) { 
     header("Location: ../contact.php?contact details=invalid"); 
     exit(); 
    } else { 
     $sql = "INSERT INTO contact (user_fullname, user_email, subject, message) VALUES ('$fullname', '$email', '$subject', '$message');"; 
     mysqli_query($conn, $sql); 
     header("Location: ../contact.php?contact=success");  
     exit(); 
    } 
} else { 
    header("Location: ../contact.php"); 
    exit(); 
} 
+1

べきではありません。この: '場合(ISSET($ _ POST [ここ

は、あなたの更新されたコードです'submit'))){'be(ifetet($ _ POST ['submit'])){'? –

+0

私はあなたのPHPがあなたのhtmlとは別のファイルにあると仮定しています。あなたのリダイレクトヘッダがあなたのPHPファイルからhtmlを呼び出すとき、クエリー文字列として 'contact details = invalid'または 'contact = success'のいずれかを渡しています。それがhtmlのPHPにhtmlに達すると、投稿の代わりにgetを実行したため、クエリー文字列に存在しない投稿パラメータとして 'Submit'という名前が存在するかどうかを確認します。だからあなたはあなたのhtmlでそれらのvarsの存在をチェックする必要があります。あなたの投稿からの最初の投稿ではありません。 – nocturns2

+0

迅速な返信をありがとうございます。私のhtmlファイルで 'if(isset($ _ POST [' Submit '])){'は元々 'if(isset($ _ POST [' submit '])){'でなければなりません。はい、PHPは別のファイルにあります。だから私はエラーが私のhtmlファイルのPHP文にあると仮定していますか?あなたがヴァルスの意味を疑問に思っていました。 –

答えて

0

あなたは$_GETクエリを返送している何をしたか行うことができます(contact.php?response=whateverのような)が、その後、あなたが代わりにそれをチェックする必要があります$_POST。その代わりに、セッションにメッセージを格納して元のページにそれらを呼び出すことができます。また、クエリではパラメータをバインドする必要があります。エスケープはパスであり、バインディングパラメータほど安全ではありません。あなたがまだそれをしていないなら、私は設定ファイルの使用を採用し、すべての最上位ページの上にそれを含めるでしょう。また、ここでは、1)フレームワークを使用する方法、2)OOP(オブジェクト指向プログラミング)の利点を得るために、クラス/メソッドのシナリオでこれらの関数を実行する方法を学ぶ方法、2)を提案します。最後に、私はこれをテストしていないので、それを覚えておいてください。しかし、構文エラーがなければ、うまくいくはずです。 /config.php

<?php 
# Create some defines for consistent file reference 
define('DS',DIRECTORY_SEPARATOR); 
define('ROOT_DIR',__DIR__); 
define('INCLUDES',ROOT_DIR.DS.'includes'); 
define('FUNCTIONS',INCLUDES.DS.'functions'); 
# Start session 
session_start(); 
# Add database 
include_once(INCLUDES.DS.'dbh.inc.php'); 

/includes/functions/myfunctions.php

<?php 
function insertMessage($conn,$fullname,$email,$subject,$message) 
{ 
    # You need to bind parameters here, forget about the escaping business 
    $sql = "INSERT INTO contact (user_fullname, user_email, subject, message) VALUES (?,?,?,?)"; 
    # Prepare 
    $stmt = mysqli_prepare($conn, $sql); 
    # Bind the parameters 
    mysqli_stmt_bind_param($stmt, 'ssss', $fullname,$email,$subject,$message); 
    # Execute the query 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
} 

function setMessage($msg,$type) 
{ 
    # Store the message to session 
    $_SESSION['messages'][$type] = $msg; 
} 

function getMessage($type=false) 
{ 
    # If there is no specific type to return, send all messages 
    if(empty($type)) { 
     if(isset($_SESSION['messages'])) { 
      $msgs = $_SESSION['messages']; 
      unset($_SESSION['messages']); 
      return $msgs; 
     } 
     # Return false by default 
     return false; 
    } 
    # To send a specific message, try retrieving $type 
    if(isset($_SESSION['messages'][$type])) { 
     $msg = $_SESSION['messages'][$type]; 
     unset($_SESSION['messages'][$type]); 
     return $msg; 
    } 
    # Return false by default 
    return false; 
} 

/includes/contact.inc.php

# Include our defines, session, database 
include_once('..'.DIRECTORY_SEPARATOR.'config.php'); 
# Add our functions 
include_once(FUNCTIONS.DS.'myfunctions.php'); 
# Check if the submission is set 
if(isset($_POST['submit'])) { 
    # Check if the name and email are valid 
    if(!preg_match("/^[a-zA-Z]*$/", $_POST['user_fullname']) || !filter_var($_POST['user_email'],FILTER_VALIDATE_EMAIL)) { 
     # If not valid, save message to session 
     setMessage('Invalid email or name.','error'); 
    } else { 
     # Insert the message into the database 
     insertMessage($conn,$_POST['user_fullname'],$_POST['user_email'],$_POST['subject'],$_POST['message']); 
     # Store the message for writing back 
     setMessage('Thank you, your message has been sent.','success'); 
    } 
} 
# Redirect 
header("Location: ../contact.php"); 
exit; 

/contact.php

<?php 
# Include our defines, session, database 
include_once('config.php'); 
# Add our functions 
include_once(FUNCTIONS.DS.'myfunctions.php'); 
?> 
<section class="main-container"> 
<div class="main-wrapper"> 
    <h2>Contact Us</h2> 
    <form class="signup-form" action="includes/contact.inc.php" method="POST">  
     <input type="text" name="user_fullname" required placeholder="Fullname"> 
     <input type="email" name="user_email" required placeholder="E-mail"> 
     <input type="text" name="subject" required placeholder="Subject"> 
     <input type="text" name="message" style="height:250px;" required placeholder="Message"> 
     <button type="submit" name="submit">Submit</button> 
    </form> 
</div> 
</section> 

<?php 
# Fetch all messages (could be error or could be success) 
$msg = getMessage(); 
# If there are messages 
if(!empty($msg)) 
    # Write them to the page 
    echo '<div class="alerts">'.implode('</div><div class="alerts">',$msg).'</div>'; 
+0

ソリューションに感謝します。しかし、getMessage関数を実行することができません。私のブラウザでは、次のエラーが表示されます。 '致命的なエラー:C:\ Apache24 \ htdocs \ FYP-Website-Copy \ contact.phpの30行目で未定義関数getMessage()を呼び出してください。 myfunctionファイルのディレクトリを変更しようとしました。しかし、同じエラーが発生します。 –

+0

機能を使用する予定のページに機能ページを一度含める必要があります – Rasclatt

+0

noobyの間違いをお詫び申し上げます。しかし、今私は3つのエラーに直面しています。 config.phpファイルのsession startにfunctuntionを追加することで、 'Notice:セッションが既に開始されました - session_startを無視しています'エラーを解決するように管理しました。 'warning:getMessage()の警告:Missing引数1を整理しようとしましたが、25行目のcontact.phpで呼び出され、21行目の\ functions \ myfunctions.phpにインクルードなしでインクルードされています。 Thankyu –

0

私はhtmlコードに変更を加えました。$_POST$_REQUESTに置き換えてください。

HTMLコード:

<section class="main-container"> 
<div class="main-wrapper"> 
    <h2>Contact Us</h2> 
    <form class="signup-form" action="includes/contact.inc.php" method="POST">  
     <input type="text" name="user_fullname" required placeholder="Fullname"> 
     <input type="email" name="user_email" required placeholder="E-mail"> 
     <input type="text" name="subject" required placeholder="Subject"> 
     <input type="text" name="message" style="height:250px;" required placeholder="Message"> 
     <button type="submit" name="submit">Submit</button> 
    </form> 
</div> 
</section> 

<?php 
    if (isset($_REQUEST['contact'] == "success")) { 
     echo "Contact Successful!"; 
    } else { 
     echo "Contact Fail!"; 
    }   
?> 

PHPコード:

<?php 

if (isset($_POST['submit'])) { 

    include_once 'dbh.inc.php'; 

    $fullname = mysqli_real_escape_string($conn, $_POST['user_fullname']); 
    $email  = mysqli_real_escape_string($conn, $_POST['user_email']); 
    $subject = mysqli_real_escape_string($conn, $_POST['subject']); 
    $message = mysqli_real_escape_string($conn, $_POST['message']); 


    if (!preg_match("/^[a-zA-Z]*$/", $fullname)) { 
     header("Location: ../contact.php?contact=invalid"); 
     exit(); 
    } else { 
     $sql = "INSERT INTO contact (user_fullname, user_email, subject, message) VALUES ('$fullname', '$email', '$subject', '$message');"; 
     mysqli_query($conn, $sql); 
     header("Location: ../contact.php?contact=success");  
     exit(); 
    } 
} else { 
    header("Location: ../contact.php"); 
    exit(); 
} 
関連する問題