35612


Sendgridのサンプルを使って送信環境を作っています。

<https://sendgrid.kke.co.jp/blog/?p=1066>

以下のように、３つのファイルがあり、index.htmlからconfirm.phpへのデータの受け渡しはうまく行き、画面にはHTMLで表示されています。

index.html

[code]

    <!doctype html>
    <html>
    <head>
     省略
    </head>
    <body>
     〜
    <div class="field">
     <label>お名前</label>
     <input id="fullname" type="text" name="fullname" placeholder="例：山田 太郎">
    </div>
    </body>
    </html>
    
[/code]

confirm.html

[code]

    <? php
    if(!$_POST) {
    header('Location: ./index.html');
    session_start();
    $_SESSION["fullname"] = $_POST["fullname"];
    };
    ?>
    <!doctype html>
    <html>
    <head>
     省略
    </head>
    <body>
     〜
     <form id="form" action="sendmail.php" method="post">
        <p>お名前：<?php echo htmlspecialchars($_POST["fullname"]); ?></p>
        <button type="submit">
        <img src="images/submit.png" class="submit-btn">
        </button>
    </form>
    </body>
    </html>
    
[/code]

ところが、

sendmail.php

[code]

    <?php
     session_start();
     if(!$_SESSION=["fullname"]) {
     header('Location: ./index.html');
     };
    
     var_dump($_SESSION);
    
     require 'vendor/autoload.php';
     $dotenv = new Dotenv\Dotenv(__DIR__);
     $dotenv->load();
    
     $api_key           = $_ENV['API_KEY']; <--独自の環境変数から読み込み
     $from              = $_ENV['FROM']; <--独自の環境変数から読み込み
     $tos               = explode(',', $_ENV['TOS']); <--独自の環境変数から読み込み
    
     $fullname = $_SESSION["fullname"]; <-- 20行目
    
     省略
    
     $sendgrid = new SendGrid($api_key, array("turn_off_ssl_verification" => true));
     $email = new SendGrid\Email();
     $email->setSmtpapiTos($tos)->
       setFrom($from)->
       setFromName("送信者名")->
       setSubject("[申し込みが来ました] %fullname%さんから申し込みが来ました")->
       setText("%fullname%さん \r\n ")->
       setSubstitution('%fullname%', '$fullname')-> <--43行目
    
     省略
     ?>
    
[/code]

と書きました。そしたら、

array(1) { [0]=> string(8) "fullname" }  
Notice: Undefined index: fullname in /var/www/html/lp/sendmail.php on line 20

Fatal error: Uncaught Error: Call to undefined method
SendGrid\Email::setSubstitution() in /var/www/html/lp/sendmail.php:43 Stack
trace: #0 {main} thrown in /var/www/html/lp/sendmail.php on line 43

Notice: Unknown: Skipping numeric key 0 in Unknown on line 0**

とエラーを吐きました。画面上はデータが表示されていましたが内部的にデータを保持できておらず、fullnameに上書きされてしましました。これをデータをきちんと渡せれば解決するとおもうので、どうしたらデータを引き継げるのか教えてください。


CC BY-SA 3.0
2017-06-15T06:50:53.267
35599
2017-06-15T13:03:08.223
question
php html
【MTAはSendgrid】$_SESSIONでファイル間のデータが引き継がれない。

[code]

    if(!$_SESSION=["fullname"]) {
      header('Location: ./index.html');
    };
    
[/code]

値の比較は `==` や `===` で行います。`=` は常に代入を行います。

で、そこを直して `!$_SESSION == ["fullname"]` とすると、セッション変数が `["fullname"]`
という配列に等しいかという比較になるのですが、そういうことをしたいのではないですよね？

もし、連想配列 `$_SESSION` に `"fullname"`
というキーが存在するか（そのキーで値が保存されているか）を調べたいのでしたら、`isset()` や `array_key_exists()`
といった関数を使います。例えば次のようになります。

[code]

    // $_SESSION["fullname"] が設定されていなければリダイレクトする
    if(!isset($_SESSION["fullname"])) {
      header('Location: ./index.html');
    };
    
[/code]


CC BY-SA 3.0
2017-06-15T13:03:08.223
35612
2017-06-15T13:03:08.223
8000
35599
answer