2016-05-10 16 views
0

生徒が生徒のIDを入力し、存在する場合はメールを取得し、生徒のIDを入力するスクリプトを作成しようとしています。トークンを挿入し、データベースにトークンを挿入し、トークンとIDを持つ登録URLリンクを学生の電子メールに送信します。これは、私がPHPとMySQLの初心者ですから、それを得るでしょう。 ここで私は間違っていますか?トークンを生成して電子メールに送信するURLを作成する方法

<?php 
    error_reporting(1); 
    session_start(); 
    include 'includes/connect.php'; 
    include 'includes/tokengenerator.php'; 
    if ($_POST["Submit"] == "Submit") { 
     $stu_id = $_POST['stu_id']; 
     $sql = "SELECT email FROM people WHERE stu_id = :stu_id"; 
     $stmt = $pdo->prepare($sql); 
     $stmt->bindValue(':stu_id', $stu_id); 
     $stmt->execute(); 
     $result = $stmt->fetch(PDO::FETCH_ASSOC); 
     if (!empty($result)) { 
      $email = $result['email']; 
      //echo $email; 
      //exit(); 
      for ($i = 1; $i <= 2; $i++) { 
       $token = generateToken(); 
       //echo $token; 
       $email = $result['email']; 
       $sql = "INSERT INTO students (token) VALUES ($token) WHERE email = :email"; 
       $stmt = $pdo->prepare($sql); 
       $stmt->execute(array(
        ':token' => $token, 
       )); 
       $result1 = $stmt->fetch(PDO::FETCH_ASSOC); 
      } 
     } else { 
      echo 'Please Contact principal for student ID'; 
     } 
    } 
?> 
+0

'insert 'の代わりに' update query'を使用してください。 – Saty

+0

私はあなたが提案したようにしましたが、WHERE email =?という構文エラーが発生しました。 – andy

+0

トークンとIDを持つURLを作成し、phpmailerを使用してメールを送信する方法 – andy

答えて

2

クエリで誤った値を結合している::email:token

実際には2つのプレースホルダがあり、両方の値をバインドする必要があります。

$sql = "INSERT INTO students (token) VALUES (:token) WHERE email = :email"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array(
    ':token' => $token, 
    ':email' => $email 
)); 

そして@Satyによって正しく述べたように、あなたはINSERTステートメントのWHERE句持つことはできません。

$sql = "INSERT INTO students (token, email) VALUES (:token, :email)"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array(
    ':token' => $token, 
    ':email' => $email 
)); 

をそれとも、UPDATE書が必要な場合がありますINSERTの代わりに:

$sql = "UPDATE students SET token = :token WHERE email = :email"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array(
    ':token' => $token, 
    ':email' => $email 
)); 
+1

'' INSERT query'で 'where clause'を許可できますか? – Saty

+0

@Saty確かに、私はもっとコーヒーが必要です... – jeroen

+0

トークンを更新することができました。ありがとうございました。しかし、トークンとIDを使用してURLを作成し、そのメールへのURLリンクを送信するにはどうすればいいですか? – andy

関連する問題