2017-08-18 10 views
-4

私は、Webサイトのバックエンドにあるフォームからデータを取り出し、それをSQLデータベースに挿入して動作するPHPフォームを使用しています。PHPからSQLおよび電子メールフォームの提出

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 
$link = mysqli_connect("#", "#", "#", "#"); 

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

// Escape user inputs for security 
$name = mysqli_real_escape_string($link, $_POST['name']); 
$initials = mysqli_real_escape_string($link, $_POST['initials']); 
$item = mysqli_real_escape_string($link, $_POST['item']); 
$issue = mysqli_real_escape_string($link, $_POST['issue']); 
$tel = mysqli_real_escape_string($link, $_POST['tel']); 
$email = mysqli_real_escape_string($link, $_POST['email']); 
$cost = mysqli_real_escape_string($link, $_POST['cost']); 
$loggedby = mysqli_real_escape_string($link, $_POST['loggedby']); 
$bag = mysqli_real_escape_string($link, $_POST['bag']); 
$charger = mysqli_real_escape_string($link, $_POST['charger']); 


// attempt insert query execution 
$sql = "INSERT INTO `repairs` (`name`,`initials`,`item`, `issue`,  `telephone`,`email`, `cost`, `loggedby`, `bag`, `charger`) VALUES ('$name', '$initials', '$item', '$issue', '$tel', '$email', '$cost', '$loggedby', '$bag', '$charger')"; 
if(mysqli_query($link, $sql)){ 
header('location:repairs.php'); 
} else{ 
echo "ERROR: Could not execute $sql. " . mysqli_error($link); 
} 

$to = "[email protected],$email" 
$subject= "Thankyou $name - Your repair has been logged" 
$body= "<h2>Thankyou $name</h2> /n 
This is a confirmation email regarding your $item /n 
Your repair log is below: /n 
$item /n 
$issue /n/n 
<h3>Accessories</h3> /n 
bag - $bag /n 
charger - $charger /n/n 
Your repair was logged by $loggedby on echo date("d-m-Y"); /n/n 
We will contact you on $tel &amp; $email when your $item is ready to 
collect. 
/n/n 
Loud Crowd IT - 01302 965482 /n 
[email protected] /n 
www.loudcrowd.agency /n" 

$mail ($to,$subject,$body); 
// close connection 
mysqli_close($link); 
?> 
:私がしようとすると、それはまた、(定義された形&メールで撮影した電子メール)のメールアドレスにデータを送信するように設定したときに私の問題は、私はエラー500

コードは以下の通りです受け取る、あります

誰もがエラーを受け取る理由を知っていますか? 500内部サーバーエラーを修正する方法

+0

SQLインジェクションを防止するためのprepared statementについて学ぶ – Jens

+1

500は内部サーバーエラーです。あなたのログファイルを調べて – Jens

+0

構文エラーが起きた場合、セミコロンで文を閉じることはできませんでした。 –

答えて

0

内部サーバーエラーがサーバー側のスクリプトでエラーが、この場合には、がありますを意味します。

$subject= "Thankyou $name - Your repair has been logged"

これはあなたが使用する必要があるコードです:

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 
$link = mysqli_connect("#", "#", "#", "#"); 

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

// Escape user inputs for security 
$name  = $_POST['name']; 
$initials = $_POST['initials']; 
$item  = $_POST['item']; 
$issue = $_POST['issue']; 
$tel  = $_POST['tel']; 
$email = $_POST['email']; 
$cost  = $_POST['cost']; 
$loggedby = $_POST['loggedby']; 
$bag  = $_POST['bag']; 
$charger = $_POST['charger']; 


// attempt insert query execution 
$sql = "INSERT INTO `repairs` (`name`,`initials`,`item`, `issue`, `telephone`,`email`, `cost`, `loggedby`, `bag`, `charger`) VALUES (?,?,?,?,?,?,?,?,?,?)"; 

$stmt = mysqli_prepare($link, $sql); 
mysqli_stmt_bind_param($stmt, 'ssssssssss', $name, $initials, $item, $issue, $tel, $email, $cost, $loggedby, $bag, $charger); 

if (mysqli_stmt_execute($stmt)) { 

    $to  = "[email protected],$email"; 
    $subject = "Thankyou $name - Your repair has been logged"; 
    $body = "<h2>Thankyou $name</h2> /n 
       This is a confirmation email regarding your $item /n 
       Your repair log is below: /n 
       $item /n 
       $issue /n/n 
       <h3>Accessories</h3> /n 
       bag - $bag /n 
       charger - $charger /n/n 
       Your repair was logged by $loggedby on " . date("d-m-Y") . "/n/n 
       We will contact you on $tel &amp; $email when your $item is ready to 
       collect. 
       /n/n 
       Loud Crowd IT - 01302 965482 /n 
       [email protected] /n 
       www.loudcrowd.agency /n"; 

    if (mail($to, $subject, $body)) { 
     header('location:repairs.php'); 
    } 
} else { 
    printf("Error: %s.\n", mysqli_stmt_error($stmt)); 
} 

mysqli_close($stmt); 
// close connection 
mysqli_close($link); 
?> 
+0

大きな助けをいただきありがとうございます。私が得る唯一の問題は、顧客の電子メールアドレスがToフィールドにも入るように$電子メールを追加するところです。答えがあなたの問題のplz投票に役立ち、回答を受け入れるなら、それは指定されたメールと同様に – V5Nathan

+0

に送信されません@ V5Nathan –

0

500内部サーバーエラーは、問題がおそらくあなたのコンピュータやインターネット接続ではなく、ウェブサイトのサーバーではなく、意味、サーバー側のエラーです。

可能性はありませんが、我々はあなたが試すことができますいくつかのものを見てみましょう。その場合には、あなたの端に間違った何かが、そこだということも可能である:

  1. は、ウェブページを再読み込み。リフレッシュ/リロードボタンをクリックするか、F5キーまたはCtrl + Rキーを押すか、アドレスバーからURLをもう一度試してください。

  2. Webサーバーで500 Internal Server Errorが問題であっても、問題は一時的なものかもしれません。ページをもう一度試してみると、しばしば成功します。

注:500内部サーバーエラーメッセージがオンライン商人でチェックアウトプロセスの間に表示された場合は、チェックアウトに重複試みが複数の注文作成終わる可能性があることに注意してください - と、複数の電荷を!ほとんどの加盟店では、この種の行為から自動的に保護されていますが、それはまだ留意しておくべきことです。

  1. ブラウザのキャッシュをクリアします。表示しているページのキャッシュされたバージョンに問題がある場合、HTTP 500の問題が発生している可能性があります。

注:内部サーバーエラーはキャッシュの問題によって引き起こされることはよくありませんが、キャッシュをクリアした後でエラーが発生することがあります。試してみるのはとても簡単で無害なことなので、スキップしないでください。

  1. ブラウザのCookieを削除します。約500の内部サーバーエラーの問題は、エラーが発生しているサイトに関連付けられているCookieを削除することで修正できます。 クッキーを削除したら、ブラウザを再起動してもう一度やり直してください。 代わりに、504 Gateway Timeoutエラーとしてトラブルシューティングしてください。 これはあまり一般的ではありませんが、実際には問題の原因に基づいてより適切なメッセージが504ゲートウェイタイムアウトである場合は、500内部サーバーエラーが発生します。ここにも

    $to = "[email protected],$email" // missing a semicolon 
    

    以上不足しているセミコロンが予期しない「$の件名」(T_VARIABLE)をトリガ

関連する問題