2011-03-03 43 views
0

首先,Thaks爲了看看我的問題。循環內函數內的PHP函數:S

我有一個功能,完全適合我,我想從該功能中調用另一個功能,但我收到各種問題。

這裏是功能,然後我會解釋我需要什麼,我遇到了什麼。

他們可能非常混亂,但我正在學習,並認爲我會嘗試花哨然後清理它。

function GetStation($id){ 

$x_db_host1="localhost"; // Host name 
$x_db_username1="xxxx"; // Mysql username 
$x_db_password1="xxxx"; // Mysql password 
$x_db_name1="xxxx"; // Database name 

// Connect to server and select databse. 
mysql_connect("$x_db_host1", "$x_db_username1", "$x_db_password1"); 
mysql_select_db("$x_db_name1"); 

// SQL Query Setup for Station Name 
$sql="SELECT * FROM stations WHERE ID = $id LIMIT 1"; 
$result=mysql_query($sql); 

while($rows=mysql_fetch_array($result)){ 
$retnm = $rows['CallSign']; 
} 
mysql_close(); 
echo $retnm; 
} // Closes Function 



// List Delegates Function!!!!!!!!!!!!!!!!!!! 
function ListDelegates(){ 

    $x_db_host1="xxx"; // Host name 
    $x_db_username1="xxx"; // Mysql username 
    $x_db_password1="xxxx"; // Mysql password 
    $x_db_name1="xxxx"; // Database name 

// Connect to server and select databse. 
    mysql_connect("$x_db_host1", "$x_db_username1", "$x_db_password1"); 
    mysql_select_db("$x_db_name1"); 

    $q = "SELECT * FROM delegates"; 
    $result = mysql_query($q); 
/* Error occurred, return given name by default */ 
    $num_rows = mysql_numrows($result); 
    if(!$result || ($num_rows < 0)){ 
     echo "Error displaying info"; 
     return; 
    } 
    if($num_rows == 0){ 
     echo "There are no delegates to display"; 
     return; 
    } 
    /* Display table contents */ 

    echo "<table id=\"one-column-emphasis\" summary=\"Delegates\"><thead>"; 
    echo "<thead><tr><th>ID</th><th>Name</th><th>Station</th><th>Spec Req</th><th>BBQ</th><th>DIN</th><th>SAT</th><th>SUN</th></tr>"; 
    echo "</thead><tbody>"; 

    for($i=0; $i<$num_rows; $i++){ 
     $d_id = mysql_result($result,$i,"DID"); 
     $d_name1 = mysql_result($result,$i,"DFName"); 
     $d_name2 = mysql_result($result,$i,"DLName"); 
     $d_name = $d_name1 . " " . $d_name2; 
     $d_spec1 = mysql_result($result,$i,"DSpecRe"); 
     $StatNm = mysql_result($result,$i,"DStation"); 
     $d_st_name = GetStation($StatNm); 

    if ($d_spec1=="0"){ $d_spec = "-"; } 
    else {$d_spec = "<a href=\"javascript:void(window.open('http://xxxxxxx.xxx/xsreq.php?id=$d_id','','width=300,height=250,left=0,top=0,resizable=no,menubar=no,location=no,status=yes,scrollbars=no'))\">YES</a>"; } 

     $d_bbq1 = mysql_result($result,$i,"Dbbq"); // BBQ 
    if ($d_bbq1=="0"){ $d_bbq = "-"; } 
    else {$d_bbq = "NO"; } 

     $d_din1 = mysql_result($result,$i,"Dconfdinner"); // Dinner 
    if ($d_din1=="0"){ $d_din = "-"; } 
    else {$d_din = "NO"; } 

     $d_sat1 = mysql_result($result,$i,"DConfSat"); // Saturday 
    if ($d_sat1=="0"){ $d_sat = "-"; } 
    else {$d_sat = "NO"; } 

     $d_sun1 = mysql_result($result,$i,"DConfSat"); // Sunday 
    if ($d_sun1=="0"){ $d_sun = "-"; } 
    else {$d_sun = "NO"; } 

    echo "<tr><td>$d_id</td><td><strong>$d_name</strong></td><td>$d_st_name</td><td>$d_spec</td><td>$d_bbq</td><td>$d_din</td><td>$d_sat</td><td>$d_sun</td></tr>"; 

    } 
    echo "</tbody></table></br>"; 
} 

所以我輸出ListDelegates()在一個頁面,它會顯示一個漂亮的表格等

在ListDelegates()我使用GetStation()函數。

這是因爲表ListDelegates()使用包含站ID號碼沒有名字,所以我想GetStation($ id)的輸出站名

我遇到的問題是,似乎GetStation()是在函數的第一個調用中輸出所有名稱,以便表中的第一行不會分解爲每行,並且每次只有一行:S

以下是我的想法(我可能是錯的)ListDelegates ()不會爲每一行調用GetStation(),即使它在循環中。 ??

我不知道這應該甚至可以工作......我只是在學習研究然後嘗試一些東西。

請幫助我,讓我可以輸出站名

回答

0

你並不需要連接到數據庫中的每一個功能。通常在代碼頂部執行數據庫連接,並在整個代碼中使用句柄(在PHP中句柄通常是可選的)。我認爲你的問題是因爲當你每次調用函數創建一個新的連接並丟失查詢中的以前的數據時。

3

截至GetStation結束時,你需要改變

echo $retnm; 

return $retnm; 

您是從功能GetStation,裏面當您打算將其存儲在打印出了名變量。最終發生的是GetStation的結果實際上是echo'在任何表格行之外的屏幕上。位於表格內但不位於表格單元格內的內容將收集到瀏覽器中的表格頂部。如果你想看看我的意思,只需在加載頁面後從瀏覽器查看源代碼。

+0

感謝該工作......我傻......但我學習,多謝你! – Braddles 2011-03-03 04:45:54

0

我親愛的首先,你應該把你的連接代碼與本地主機和全局數據庫。它應該只定義一次。你在兩個函數中定義它。

+0

我已經將這兩個功能組合成一個頁面......他們已經分開,因此我有兩個連接等的原因等 – Braddles 2011-03-03 04:45:11

+0

我親愛的不管頁面不同。在單獨的文件中編寫連接總是一個好習慣。然後,只需將該文件包含在您想要執行數據庫相關操作的地方 – 2011-03-03 04:46:54

0

這樣的事情,並作爲建議,你應該已經連接到數據庫建立別處

function ListDelegates(){ 

    $x_db_host1="xxx"; // Host name 
    $x_db_username1="xxx"; // Mysql username 
    $x_db_password1="xxxx"; // Mysql password 
    $x_db_name1="xxxx"; // Database name 

    // Connect to server and select databse. 
    mysql_connect("$x_db_host1", "$x_db_username1", "$x_db_password1"); 
    mysql_select_db("$x_db_name1"); 

    $q = "SELECT * FROM delegates"; 
    $result = mysql_query($q); 
    /* Error occurred, return given name by default */ 
    $num_rows = mysql_numrows($result); 
    if(!$result || ($num_rows < 0)){ 
     echo "Error displaying info"; 
     return; 
    } 
    if($num_rows == 0){ 
     echo "There are no delegates to display"; 
     return; 
    } 
    /* Display table contents */ 

    echo "<table id=\"one-column-emphasis\" summary=\"Delegates\"><thead>"; 
    echo "<thead><tr><th>ID</th><th>Name</th><th>Station</th><th>Spec Req</th><th>BBQ</th><th>DIN</th><th>SAT</th><th>SUN</th></tr>"; 
    echo "</thead><tbody>"; 

    for($i=0; $i<$num_rows; $i++){ 
     $d_id = mysql_result($result,$i,"DID"); 
     $d_name1 = mysql_result($result,$i,"DFName"); 
     $d_name2 = mysql_result($result,$i,"DLName"); 
     $d_name = $d_name1 . " " . $d_name2; 
     $d_spec1 = mysql_result($result,$i,"DSpecRe"); 
     $StatNm = mysql_result($result,$i,"DStation"); 

     $d_bbq1 = mysql_result($result,$i,"Dbbq"); // BBQ 
     $d_din1 = mysql_result($result,$i,"Dconfdinner"); // Dinner 
     $d_sat1 = mysql_result($result,$i,"DConfSat"); // Saturday 
     $d_sun1 = mysql_result($result,$i,"DConfSat"); // Sunday 

     //$d_st_name = GetStation($StatNm); 

     $sql="SELECT * FROM stations WHERE ID = $StatNm LIMIT 1"; 
     while($rows=mysql_fetch_array($result)){ 
      $d_st_name = $rows['CallSign']; 
     } 


     if ($d_spec1=="0"){ $d_spec = "-"; } 
     else {$d_spec = "<a href=\"javascript:void(window.open('http://xxxxxxx.xxx/xsreq.php?id=$d_id','','width=300,height=250,left=0,top=0,resizable=no,menubar=no,location=no,status=yes,scrollbars=no'))\">YES</a>"; } 


     if ($d_bbq1=="0"){ $d_bbq = "-"; } 
     else {$d_bbq = "NO"; } 


     if ($d_din1=="0"){ $d_din = "-"; } 
     else {$d_din = "NO"; } 


     if ($d_sat1=="0"){ $d_sat = "-"; } 
     else {$d_sat = "NO"; } 


     if ($d_sun1=="0"){ $d_sun = "-"; } 
     else {$d_sun = "NO"; } 

     echo "<tr><td>$d_id</td><td><strong>$d_name</strong></td><td>$d_st_name</td><td>$d_spec</td><td>$d_bbq</td><td>$d_din</td><td>$d_sat</td><td>$d_sun</td></tr>"; 

    } 
    echo "</tbody></table></br>"; 
}