繁体   English   中英

PHP函数在循环内的功能:S

[英]PHP Function within a function within a loop :S

首先,Thaks看了我的问题。

我有一个非常适合我的函数,我想从该函数中调用另一个函数,但是遇到了各种各样的问题。

这里是函数,然后我将解释我所需要的以及正在运行的内容。

他们可能非常凌乱,但是我正在学习并且认为我会尝试幻想然后清理它。

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号而不是name,所以我希望GetStation($ id)输出站名称

我遇到的问题是,似乎GetStation()在函数的第一次调用中输出了所有名称,因此表的第一行并没有将其分解为每一行,一次只能将其分解为一个:S

这就是我的想法(我可能错了),ListDelegates()并未为每一行调用一次GetStation(),即使它在循环中也只执行一次。 ??

我根本不知道这是否应该工作……我只是在学习研究然后尝试尝试。

请帮助我,以便我输出电台名称

GetStation的最后,您需要进行更改

echo $retnm;

return $retnm;

当您打算将名称存储在变量中时,将从功能GetStation内打印出该名称。 什么结束了发生的事情,是结果GetStation是有效的echo屏幕上的“编辑任何表行之外。 表内而不是表单元格内的内容被收集到浏览器中表的顶部。 如果您想了解我的意思,请在加载页面后从浏览器查看源代码。

您无需在每个功能中都连接到数据库。 通常,您在代码的顶部进行数据库连接,并在整个代码中使用句柄(在PHP中,句柄通常是可选的)。 我认为您的问题是因为每次调用该函数时,它都会建立新连接并丢失查询中的先前数据。

亲爱的首先,您应该在全局范围内放置与本地主机和数据库的连接代码。 它应该只定义一次。 您正在两个函数中定义它。

像这样,按照建议,您应该与其他地方建立的数据库建立连接

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>";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM