質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

php関数内でのSQL実行と外部ファイル呼び出し

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 4,919

score 30


お世話になっております。
前回こちらでPDOを使ってインサートのコードのレクチャーをいただいたのですが
今回は前回(下記)のものを使用して以下のことを行いたいと考えています。

>  - 1, "lib/function.php" に DBに登録をするfunctionを作成する
>  - 2, "/form/hoge.php" 内で、1で作成したfunctionを呼び出してDBに登録する。

上記のことを行いたいのですが、前回もPDOについて多くの指摘等いただきましたがまだ理解が乏しく

Fatal error: Call to a member function prepare() on a non-object in~~~~~~~~
というエラーになってしまいます。
ご教示お願い致します。




//function.php


<?php
function Insert(){    
    try {
            $pdo = new PDO('mysql:host=localhost;dbname=form_test;charset=utf8', 'user name', 'password');
        
    
    $sql = "INSERT INTO `form`(";
    $sql .= "`id`";
    $sql .= ", `company_name`";
    $sql .= ", `company_unit`";
    $sql .= ", `name`";
    $sql .= ", `name_furigana`";
    $sql .= ", `mail_address`";
    $sql .= ", `tel1`";
    $sql .= ", `tel2`";
    $sql .= ", `tel3`";
    $sql .= ", `fax1`";
    $sql .= ", `fax2`";
    $sql .= ", `fax3`";
    $sql .= ", `postal_code1`";
    $sql .= ", `postal_code2`";
    $sql .= ", `zip`";
    $sql .= ", `address`";
    $sql .= ", `contact_us`";
    $sql .= ") VALUES (";
    $sql .= "NULL";
    $sql .= ", :company_name";
    $sql .= ", :company_unit";
    $sql .= ", :name";
    $sql .= ", :name_furigana";
    $sql .= ", :mail_address";
    $sql .= ", :tel1";
    $sql .= ", :tel2";
    $sql .= ", :tel3";
    $sql .= ", :fax1";
    $sql .= ", :fax2";
    $sql .= ", :fax3";
    $sql .= ", :postal_code1";
    $sql .= ", :postal_code2";
    $sql .= ", :zip";
    $sql .= ", :address";
    $sql .= ", :contact_us";
    $sql .= ")";
    
    
    
    $arr = [];
    $arr[':company_name'] = $_SESSION['company'];
    $arr[':company_unit'] = $_SESSION['company'];
    $arr[':name'] = $_SESSION['name'];
    $arr[':name_furigana'] = $_SESSION['name2'];
    $arr[':mail_address'] = $_SESSION['email'];
    $arr[':tel1'] = $_SESSION['tel1'];
    $arr[':tel2'] = $_SESSION['tel2'];
    $arr[':tel3'] = $_SESSION['tel3'];
    $arr[':fax1'] = $_SESSION['fax1'];
    $arr[':fax2'] = $_SESSION['fax2'];
    $arr[':fax3'] = $_SESSION['fax3'];
    $arr[':postal_code1'] = $_SESSION['zip1'];
    $arr[':postal_code2'] = $_SESSION['zip2'];
    $arr[':zip'] = $_SESSION['prefecture'];
    $arr[':address'] = $_SESSION['address'];
    $arr[':contact_us'] = $_SESSION['message'];

   } catch (\PDOException $e) {
    var_dump($e);
}
    }

?>



//hoge.php

<?php

require_once('./lib/function.php'); 

$stmt = $pdo->prepare($sql);
$stmt->execute($arr);

?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

2点、修正する必要があります。

1. hoge.php内の以下2行は、function.phptry句の中に移動してやる必要がある。
    try {
        ...
        $arr[':contact_us'] = $_SESSION['message'];

        $stmt = $pdo->prepare($sql);
        $stmt->execute($arr);
   } catch (PDOException $e) {  // クラス名の頭の"/"は不要
        ...

2. function.phpの内容は関数化してあるので、require_onceした後に関数Insertを呼び出してやる必要がある。
require_once('./lib/function.php');

Insert();

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/11/06 11:19

    2行の部分はtryの中に元々あったのですが試行錯誤してる内になにを思ったのかhoge.phpに移動してました.....
    レクチャーありがとうございます。無事実装できました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る