2012-01-14 9 views
1

私たちは会社がインストールされたときにいくつかの電子メールを自動化しようとしていますが、以下は変数に値を設定するコードですが、使用するときには、私は間違って何をしています。MySQLの変数が範囲外になる

$panelNumber = ""; 
    $physicalAddress = ""; 
    $city = ""; 
    $state = ""; 
    $releaseNumber = ""; 
    $matrix = ""; 
    $dateOfInstall = ""; 
    $serverIP = ""; 
    $webcamIP = ""; 
    $webcamPort = ""; 
    $useLan = 0; 
    $WANIP = ""; 
    $from= '[email protected]'; 
    $from_name=' Yesco Electronics Network Operations Center'; 
    $market_id =""; 
    $Cname=""; 
    $Cemail= ""; 

    $existingQueryResult = mysql_query("SELECT * 
            FROM assets_new 
            WHERE asset='" . $assetName . "'"); 

    $num_results = mysql_num_rows($existingQueryResult); 

    if ($num_results > 0) 
    { 
     while($row = mysql_fetch_array($existingQueryResult)) 
     { 
      $panelNumber = $row['panel']; 
      $physicalAddress = $row['location']; 
      $city = $row['city']; 
      $state = $row['state']; 
      $releaseNumber = $row['release_num']; 
      $matrix = $row['matrix']; 
      $dateOfInstall = $row['install_dt']; 
      $serverIP = $row['lansideip']; 
      $webcamIP = $row['webcamip']; 
      $webcamPort = $row['webcamport']; 
      $useLan = $row['uselan']; 
      $WANIP = $row['ipaddress']; 
      $market_id= $row['market_id']; 
     } 
    } 

    $CnameQueryResult = mysql_query("SELECT c.name, m.email 
    FROM markets m, customers c 
    WHERE m.customer_id = c.id 
    AND m.id ='".$market_id."'"); 

    $num_results = mysql_num_rows($CnameQueryResult); 
    if ($num_results > 0) 
    { 
     while ($row = mysql_fetch_array($CnameQueryResult)) 
     { 
      $Cname= $row['name']; 
      $Cemail= $row['email']; 
     } 
    } 
+0

ようこそスタックオーバーフロー!あなたは、あなたの質問でエラーチェックをしていません。必ずしもあなたの問題には関係しませんが、そうする必要があります。そうしないと、クエリが失敗した場合にスクリプトが壊れます。どのようにするかは、[mysql_query() '](http://php.net/mysql_query)またはこの[参照質問](http://stackoverflow.com/questions/6198104/reference)に記載されています。 -what-is-a-perfect-code-sample-using-mysql-extension) –

+0

$ assetNameが表示される唯一の場所は、変数の値を取得しようとしているときです。どこで初期化/設定していますか? – JustinDanielson

+0

コード内でそれをさらに初期化します。私は、動作していない変数を持つコードを投稿しただけです。$ assetNameは動作します。 – CodeMonkey

答えて

0

私の頭を壁に打つ数ヶ月後、私はそれを理解しました。インストールと呼ばれるものを完成させるために、以下の関数が呼び出されていました。あなたが見ることができるように 1. write_to_pdf() 2. delete_info() 3. send_email()

、私は電子メールを送信する前に、テーブルから情報を削除されました。そのため、電子メール機能は正常に動作していました。彼らは私が彼らに尋ねたものを正確に送っていました。誰もが助けてくれてありがとう。

1

トラブルシューティングPHPがコードをステップ実行することなく苦労する可能性があります。私の提案は、テスト中に物事をエコーアウトし、あなたがその進歩に従うことができるようにすることです。それが失敗しなかった場合は

$existingQueryResult = mysql_query("<query>") or die('Error: ' . mysql_error()); 

、それがどんな結果を持っていた:あなたが失敗を見ることができるように

たとえば、クエリにdieを追加しますか?

$num_results = mysql_num_rows($existingQueryResult); 
echo 'Results: ' . $num_results; 

もしそうであれば、ループは期待したデータを取得しましたか? (Different55がに逃れ@として一つだけの結果を期待するなら、あなたはループを必要としません。)私はmysql_fetch_assocはあなたを取得一方だけの数値インデックス付き配列を返すmysql_fetch_arrayを信じているから

$row = mysql_fetch_array($existingQueryResult); 
$panelNumber = $row['panel']; 
... 
echo 'Panel: ' . $panelNumber; 

またmysql_fetch_assocをチェックしてください名前付きインデックスを持つ配列私は、代わりに連想配列を使用しない限り、$row['panel']にはデータが含まれないと思っています。

最後に、デバッグ後に簡単に見つけて削除できるデバッガ機能を作成すると便利です。変数をエコーすることは便利ですが、問題を解決して誤って1つを残すと、ユーザーには「奇妙な」ものが表示されます。

私はprという名前のデバッガ関数を持っています。これは固定幅スタイルで変数を単にエコーして、配列の内容を見やすくします。デバッグ後の削除は、pr(を検索するのと同じくらい簡単です。

function pr($ar, $vn='undefined') 
{ 
    echo '<span style="font-family: Lucida Console; font-size: 8pt; white-space: pre; display: block; color: #66F;">'; 
    echo strtoupper($vn) . ':'; 
    if(gettype($ar) != 'array') echo ucfirst(gettype($ar)) . ' '; 
    print_r($ar); 
    echo '</span>'; 
} 

あなたはこのようにそれを使用します。

pr($panelNumber, 'panelnumber'); 

// PANELNUMBER:String asdf 

幸運を!

+0

明白な欠陥はmysql_fetch_array呼び出しです。 – dar7yl

+0

'mysql_fetch_array'を読み上げれば、それはおそらく間違っていないことが分かります。 [マニュアルページ](http://php.net/manual/en/function.mysql-fetch-array.php)から:*返される配列の型は、 'result_type'の定義方法に依存します。 'MYSQL_BOTH'(デフォルト)を使うと、連想配列と数値添字の両方の配列が得られます。* – JYelton

+0

私の悪いです。私はそれをmysql_fetch_row()と混同していました。 – dar7yl