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

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

ただいまの
回答率

90.48%

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHP smarty db

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 487
退会済みユーザー

退会済みユーザー

前提・実現したいこと

エラーが出るのですが原因がわかりません
現在もともとあったクラスを解体しています。

発生している問題・エラーメッセージ

Notice: Undefined variable: db_con in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php on line 101

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php on line 101

Notice: Undefined variable: assign in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php on line 44

Fatal error: Uncaught Error: Function name must be a string in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php:44 Stack trace: #0 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php on line 44

該当のソースコード

<?php
  2 require_once('/Applications/XAMPP/Smarty/libs/Smarty.class.php');
  3 //require_once('Database.class.php');
  4 require_once('config.php');
  5 
  6 //テンプレートディレクトリ指定
  7 $smartyr = '..¥templates/board';
  8 $smarty  = '..¥templates_c/board';
  9 
 10 $msg = '';
 11 $err_msg = '';
 12 if(isset($_POST['send']) === true){
 13 $name = $_POST['name'];
 14 $contents = $_POST['contents'];
 15 
 16 if($name !== '' && $contents !== ''){
 17 $query = "INSERT INTO board ("
 18 ."name,"
 19 ."contents"
 20 .")VALUES("
 21 .$db->str_quote($name).","
 22 .$db->str_quote($contents)
 23 .")";
 24 $res = $db->execute($query);
 25 if($res !== false){
 26 $msg = '書き込みに成功しました';
 27 }else{
 28 $err_msg = '書き込みに失敗しました';
 29 }
 30 }else{
 31 $err_msg = '名前とコメントを記入してください';
 32 }
 33 }
$query = "SELECT"
 36 ."id,"
 37 ."name,"
 38 ."contents"
 39 ."FROM"
 40 ."board";
 41 
 42 $data = ($query);
 43 $db = close();
 44 $assign('msg',$msg);
 45 $assign('err_msg',$err_msg);
 46 $assign('data',$data);
 47 
 48 $dispaly('board5.tpl');
 49 ?>
 50 <?php
 51 $this->db_con = $this->connectDB($db_host,$db_user,$db_pass,$db_name);
 52 $this->db_host = $db_host;
 53 $this->db_user = $db_user;
 54 $this->db_pass = $db_pass;
 55 $this->db_name = $db_name;
 56 
 57 
 58  function connectDB($db_host,$db_user,$db_pass,$db_name)
 59 {
 60 
 61 $tmp->db_con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
 62 
 63 if($tmp_con !== false){
 64 return $tmp_con;
 65 }else{
 66 printf("Connect failed: %s¥n", mysqli_connect_error());
exit;
 68 }
 69 }
 70 
 71 function execute ($sql)
 72 {
 73 return mysqli_query($sql);
 74 }
 75 function select($sql)
 76 {
 77 $res = execute($sql);
 78 $data = array();
 79 while ($row = mysqli_fetch_array($res)){
 80 array_push($data,$row);
 81 }
 82 //mysql_free_result($res);
 83 return $data;
 84 }
 85 function quote($int)
 86 {
 87 return mysqli_real_escape_string($db_con , $int);
 88 }
 89 function str_quote($str)
 90 {
 91 return "'".mysqli_real_escape_string($db_con,$str)."'";
 92 }
 93 
 94 function getLastld()
 95 {
 96 return mysqli_insert_insert_id($db_con);
 97 }
 98 
 99 function close()
100 {
101 mysqli_close($db_con);
102 }

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

XAMPP MAC OS

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

的違い&動くか試してないので、なんとも言えませんが気になるところが2点がありましたので、
そこを書き換えて試してみてはいかがですか?

まず1点めとしては、function connectDB の中で mysqli_connectの結果を入れている変数が「$tmp->db_con」になっていますが、
その次の行で判定している変数は「$tmp_con」になっていますので、「$tmp_con」にしたほうがよいかと思います。

次に2点めが、function quote,function str_quote,function getLastld,function close で使っている変数が「$db_con」になっていますが、
「$this->db_con」なのではないかと思います。

書き換えたコードは下記になります。

<?php
  $this->db_con = $this->connectDB($db_host,$db_user,$db_pass,$db_name);
  $this->db_host = $db_host;
  $this->db_user = $db_user;
  $this->db_pass = $db_pass;
  $this->db_name = $db_name;


   function connectDB($db_host,$db_user,$db_pass,$db_name)
   {
      $tmp_con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

      if($tmp_con !== false){
        return $tmp_con;
      }else{
        printf("Connect failed: %s¥n", mysqli_connect_error());
        exit;
      }
   }


   function quote($int)
   {
     return mysqli_real_escape_string($this->db_con, $int);
   }
   function str_quote($str)
   {
     return "'".mysqli_real_escape_string($this->db_con, $str)."'";
   }

   function getLastld()
   {
     return mysqli_insert_insert_id($this->db_con);
   }

   function close()
   {
     mysqli_close($this->db_con);
   }

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/04 09:34

    無事通りました、つたない説明ですいませんありがとうございます

    キャンセル

0

エラーが出ており、原因が書かれています。

Fatal error: Uncaught Error: Function name must be a string in /Applications/XAMPP/xamppfiles/htdocs/board/board5.php:44

44行目に書かれている関数名はString(つまり文字)でなければならない

44行目

$assign('msg',$msg);

$assignという関数が書かれていますが、関数名に「$」は使えません。
詳細は公式ドキュメントを御覧ください。
http://php.net/manual/ja/functions.user-defined.php

そもそも$assignなる関数がどこにも定義されてない気がするので、恐らく

$smarty->assign('msg',$msg);

のtypoじゃないかと思うのですがどうでしょうか。(45行目以降も同様)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

関連した質問

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

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。