Подготовленные заявления PHP;Weired Результат - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь реализовать функцию рассылки в PHP.Когда пользователь подписывается на нашем веб-сайте, ему отправляется письмо с подтверждением.Если они уже подписались, они получают сообщение, отображаемое следующим образом: «Вы уже подписаны» или «Электронная почта уже зарегистрирована, но не подтверждена. Электронная почта была повторно отправлена.

<code>function new_member($email,$list_id)
{
  global $db;
  $san_email = filter_var($email, FILTER_SANITIZE_EMAIL);
  if (filter_var($san_email, FILTER_VALIDATE_EMAIL))
  {
    $hash = openssl_random_pseudo_bytes(10, $cstrong);
    $qry = "SELECT COUNT(*),active,access_hash FROM ".MYSQL_PREFIX."mailing_list_member WHERE address = '?' AND list_id = ?";
    var_dump($qry);
    if ($stmt = $db->prepare($qry)) {
      $stmt->bind_param("si", $san_email, $list_id);
      $stmt->bind_result($count,$active,$db_hash);
      $stmt->fetch();
      $stmt->close();
    } else {
      echo "sendet query: <pre>".$qry."
\ n». «Antwort: ". $ db-> error;} if ($ count == 1) {if ($ active == 1) {return "E-Mail-Addresse bereits angemeldet.";} else {send_verification_mail ($ san_email, $ list_id, $ db_hash);возвращение "E-Mail-Addresse bereits angemeldet, аллергены noch nicht bestätigt. Bestätigungsmail wurde erneut gesendet.";}} else {$ qry = "INSERT INTO" .MYSQL_PREFIX. "mailing_list_member (address, list_id, access_hash) VALUES ('?',?, '?')";if ($ stmt = $ db-> prepare ($ qry)) {var_dump ($ san_email);$ stmt-> bind_param ("sis", $ san_email, $ list_id, $ hash);$ Stmt-> выборки ();$ Stmt-> близко ();send_verification_mail ($ san_email, $ list_id, $ хэш);return "Bestätigungsemail wurde erfolgreich an". $ san_email. "gesendet.";} else {echo "запрос отправителя:
".$qry."
\ n". "Antwort:". $ db-> error;}}} else {return "Keine gültige E-Mail-Addresse angegeben!";}}

В целях тестирования эту функцию вызывали так (с пересылкой по почте):

echo new_member('mail@example.com',1);

Если я это сделаю, письмо будет отправлено вправоадрес электронной почты, но не вставлен в базу данных.Даже если пользователь уже находится в базе данных, электронное письмо отправляется.

1 Ответ

0 голосов
/ 03 июня 2018

? -Placeholder не должен быть в кавычках, и оба подготовленных оператора пропускают команду execute.Первый должен быть:

$qry = "SELECT COUNT(*),active,access_hash FROM ".MYSQL_PREFIX."mailing_list_member WHERE address = ? AND list_id = ?";
 if ($stmt = $db->prepare($qry)) {
  $stmt->bind_param("si", $san_email,$list_id);
  $stmt->execute();
  $stmt->bind_result($count,$active,$db_hash);
  $stmt->fetch();
  $stmt->close();
}

, а второй:

$qry = "INSERT INTO ".MYSQL_PREFIX."mailing_list_member (address,list_id,access_hash) VALUES (?,?,?)";
 if ($stmt = $db->prepare($qry)) {
    $stmt->bind_param("sis", $san_email, $list_id, $hash);
    $stmt->execute();       
    send_verification_mail($san_email,$list_id,$hash);
    $stmt->close();
    return "Bestätigungsemail wurde erfolgreich an ".$san_email." gesendet.";
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...