2017-05-13 21 views
0

プロジェクトで作業中に私は自己教えていますので、私のコードは最もエレガントではないかもしれません。私はまだ学んでいます。私は本当に私のコードを少しきれいにして、多量のスパゲッティコードを置き換えるための分かりやすい機能を作りたいと思っています。私はうまく動作するテスト関数を得ましたが、私は問題を抱えていてエラーを発生させない関数を使ってテーブルを生成したいので、デバッグするのが面倒です。テーブル生成のための外部PHPインクルード

<html> 
<?php 
require 'header.php' 
?> 
<head> 
    <title> 
     Asset Manager 
    </title> 
</head> 
<body> 
<?php 
include_once('navBar.php'); 
?> 
<?php 
include_once('tblDesc.php'); 
?> 
    </body> 

のfunctions.php:

<?php 
function initTable($query, $tblID){ 
    // Begin Table generation 

    print "<table id='".$tblID."'> "; 
    $result = $dbAssetManTest->query($query); 
    $row = $result->fetch(PDO::FETCH_ASSOC); 
    print "<thead>"; 
    print " <tr> "; 
    // pulls field data for table generation 
    foreach ($row as $field => $value){ 
     print " <th>$field</th> "; 
    } 
    print " </tr> "; 
    print "</thead>"; 
    // end foreach 
    //body of Table 
    print "<tbody>"; 
    // pulls live data from DB 
    $data = $dbAssetManTest->query($query); 
    $data->setFetchMode(PDO::FETCH_ASSOC); 
    foreach($data as $row){ 
     print " <tr> "; 
     foreach ($row as $name=>$value){ 
      print " <td>$value</td> "; 
     } // end field loop 
     print " </tr> "; 
    } // end record loop 
    print "</tbody>"; 
    print "</table>"; 
} 
?> 
私は

index.phpを以下のように "のfunctions.php"、 "tblDesc.php"、および "index.phpの" 3つのファイルを持っています

tblDesc.php

<?php 
require "functions.php"; 

// Begin Table generation 
$queryBR="select foo from bar;"; 
$tblIDBR='tblFooBar'; 

initTable($queryBR, $tblIDBR); 
?> 

私は機能initTableの内容を取り、ラインを交換する場合functions.phpからの内容で10が動作しますが、私がしようとすると、それを渡す関数を分離するvauluesクエリとtableID私のページは、<table id='tblBROnHand'>で停止を停止します。

なこれは動作しますが、ひどい見えたよう:

<?php 
// Begin Table generation 
$queryBR="select foo from bar;"; 
$tblID='tblFooBar'; 
// Begin Table generation 
print "<table id='".$tblID."'> "; 
$result = $dbAssetManTest->query($queryBR); 
$row = $result->fetch(PDO::FETCH_ASSOC); 
print "<thead>"; 
print " <tr> "; 
// pulls field data for table generation 
foreach ($row as $field => $value){ 
    print " <th>$field</th> "; 
} 
print " </tr> "; 
print "</thead>"; 
// end foreach 
//body of Table 
print "<tbody>"; 
// pulls live data from DB 
$data = $dbAssetManTest->query($queryBR); 
$data->setFetchMode(PDO::FETCH_ASSOC); 
foreach($data as $row){ 
    print " <tr> "; 
    foreach ($row as $name=>$value){ 
     print " <td>$value</td> "; 
    } // end field loop 
    print " </tr> "; 
} // end record loop 
print "</tbody>"; 
print "</table>"; 
?> 

すべてのヘルプは大幅にappreaciatedされるだろう!

+0

はini_set入れ機能にパラメータを追加呼び出すとき'display_errors'、1);ファイルの始めに、またはPHP/Apacheエラーログを参照してください。 – user2182349

+0

カスタム関数なしでコードを実行してください。それが動作すれば、何かを追加する必要があることがわかります。これは可変スコープです。 –

+0

私はあなたがスコープの問題であると思うでしょう。通常、コードを関数に移動するときです。 – RiggsFolly

答えて

0

をあなたの関数の最初の行に以下のコードを追加します。

すなわちメインラインコードの変数は、関数内もはやコードに表示され、すなわち$dbAssetManTest可変

だから関数へのパラメータとしてその変数を渡し、それは次に、可視及び使用可能であろう関数内

<?php 
function initTable($dbAssetManTest, $query, $tblID){ 
    // Begin Table generation 

    print "<table id='".$tblID."'> "; 
    $result = $dbAssetManTest->query($query); 
    $row = $result->fetch(PDO::FETCH_ASSOC); 
    print "<thead>"; 
    print " <tr> "; 
    // pulls field data for table generation 
    foreach ($row as $field => $value){ 
     print " <th>$field</th> "; 
    } 
    print " </tr> "; 
    print "</thead>"; 
    // end foreach 
    //body of Table 
    print "<tbody>"; 
    // pulls live data from DB 
    $data = $dbAssetManTest->query($query); 
    $data->setFetchMode(PDO::FETCH_ASSOC); 
    foreach($data as $row){ 
     print " <tr> "; 
     foreach ($row as $name=>$value){ 
      print " <td>$value</td> "; 
     } // end field loop 
     print " </tr> "; 
    } // end record loop 
    print "</tbody>"; 
    print "</table>"; 
} 
?> 

そして、あなたはそれが関数にパラメータを追加呼び出すとき、すべての

<?php 
require "functions.php"; 

// Begin Table generation 
$queryBR="select foo from bar;"; 
$tblIDBR='tblFooBar'; 

initTable($dbAssetManTest, $queryBR, $tblIDBR); 
?> 

それを関数やメソッドから直接出力するのではなく、代わりに出力したいものの文字列を作成して、関数から返す方がいいアイデアです。このようにして、呼び出しが行われた後に出力を実行することができます。この場合は簡単ですが、一般的なルールとして、少なくともそれは可能かもしれない

ので

<?php 
function initTable($dbAssetManTest, $query, $tblID){ 
    // Begin Table generation 

    $htm = "<table id='".$tblID."'> "; 
    $result = $dbAssetManTest->query($query); 
    $row = $result->fetch(PDO::FETCH_ASSOC); 
    $htm .= "<thead>"; 
    $htm ,= " <tr> "; 
    // pulls field data for table generation 
    foreach ($row as $field => $value){ 
     $htm .= " <th>$field</th> "; 
    } 
    $htm .= " </tr> "; 
    $htm .= "</thead>"; 
    // end foreach 
    //body of Table 
    $htm .= "<tbody>"; 
    // pulls live data from DB 
    $data = $dbAssetManTest->query($query); 
    $data->setFetchMode(PDO::FETCH_ASSOC); 
    foreach($data as $row){ 
     $htm .= " <tr> "; 
     foreach ($row as $name=>$value){ 
      $htm .= " <td>$value</td> "; 
     } // end field loop 
     $htm .= " </tr> "; 
    } // end record loop 
    $htm .= "</tbody>"; 
    $htm .= "</table>"; 

    return $htm; 
} 
?> 

そして、あなたは(それがすべて

<?php 
require "functions.php"; 

// Begin Table generation 
$queryBR="select foo from bar;"; 
$tblIDBR='tblFooBar'; 

$htm = initTable($dbAssetManTest, $queryBR, $tblIDBR); 
echo $htm; 
?> 
+0

ありがとう! – leech911

0

あなたは今、あなたはそれの内部で使用される変数のスコープを変更したそのコードの機能を作ったので、

global $dbAssetManTest; 
+0

' global' yuk私は咳をしています...咳 – RiggsFolly

+0

@ RiggsFolly、あなたはDB接続のためにグローバルを使用する際の問題を教えてくださいできますか?最近私はプロジェクトでこれを行いました。だから私はここで提案した。申し訳ありませんが私の答え – manian

+0

とOPを誤って指示している場合、それはちょうど恐ろしいアイデアを動作させます。その接続を関数のパラメータとして渡します。 – RiggsFolly

関連する問題