2011-11-18 61 views
0

我試圖實際上循環一個函數與不同的函數參數,每次由函數本身獲得;PHP調用自己的結果,如果isset

我使用變量$login_name作爲函數參數,它是由表單提交的。所以我想通過函數本身來改變這個參數。荒誕?有沒有其他的選擇?

這裏是我的功能

$login_name = "U00001"; 
while (!isset($end)) { 
    function getcount($login_name) { 
     $get_node = mysql_query("SELECT * FROM b_userbase WHERE login_name='$login_name'"); 
     while ($row_node = mysql_fetch_array($get_node)) { 
      $node = $row_node["user_node"]; 
      $placement = $row_node["user_placement"]; 
     } 
     $current_count = mysql_query("SELECT * FROM f_user_matching WHERE u_m_mem='$placement'"); 
     while ($get_count = mysql_fetch_array($current_count)) { 
      $get_left_current = $get_count["u_m_left_current"]; 
      $get_left_total = $get_count["u_m_left_total"]; 
      $get_right_current = $get_count["u_m_right_current"]; 
      $get_right_total = $get_count["u_m_right_total"]; 
      $update_left_current = $get_left_current + 1; 
      $update_right_current = $get_right_current + 1; 
      $update_left_total = $get_left_total + 1; 
      $update_right_total = $get_right_total + 1; 
     } 
     if ($node == "L") { 
      $increase_qry = mysql_query("UPDATE f_user_matching 
              SET u_m_left_current= '{$update_left_current}', 
               u_m_left_total ='{$update_left_total}' 
              WHERE u_m_mem ='{$placement}' "); 
     } 
     if ($node == "R") { 
      $increase_qry = mysql_query("UPDATE f_user_matching 
              SET u_m_right_current= '{$update_right_current}', 
               u_m_right_total ='{$update_right_total}' 
              WHERE u_m_mem ='{$placement}' "); 
     } 
     $login_name = $placement; 
     if ($login_name == "IM000001") { 
      $end = 1; 
     } else { 
      $login_name = $placement; 
     } 
     global $login_name; 
    } 
    $count = getcount($login_name); 
} 

問題出在哪裏?

+0

[示例代碼](http://sscce.org/)應該是完整和簡潔的 - 僅僅足以說明問題並獨立存在,但不能更多。無關的代碼是一個分心。舊的mysql擴展已過時,正在棄用。新代碼應該使用PDO或mysqli擴展,它們都支持預處理語句。準備好的語句參數不容易被注入。準備好的語句本身對重複查詢更具性能,因爲語句只需要解析一次。 – outis

回答

0

我不明白你AR做什麼,所以你可能會嘗試做不同的事情,我不知道,但如果你需要的是一個遞歸函數那麼這是沒有辦法的辦法。你不要在while循環中定義函數,函數應該被定義爲一個正常的函數,但是可以調用它自己的結果。

這就是你的函數如何遞歸。末*; 這不是測試代碼

<?php 

$login_name = "U00001"; 
$count = getcount($login_name); 

function getcount($login_name) { 
        $get_node = mysql_query("SELECT * FROM b_userbase WHERE login_name='$login_name'"); 
        while ($row_node = mysql_fetch_array($get_node)) { 
            $node = $row_node["user_node"]; 
            $placement = $row_node["user_placement"]; 
        } 
        $current_count = mysql_query("SELECT * FROM f_user_matching WHERE u_m_mem='$placement'"); 
        while ($get_count = mysql_fetch_array($current_count)) { 
            $get_left_current = $get_count["u_m_left_current"]; 
            $get_left_total = $get_count["u_m_left_total"]; 
            $get_right_current = $get_count["u_m_right_current"]; 
            $get_right_total = $get_count["u_m_right_total"]; 
            $update_left_current = $get_left_current + 1; 
            $update_right_current = $get_right_current + 1; 
            $update_left_total = $get_left_total + 1; 
            $update_right_total = $get_right_total + 1; 
        } 
        if ($node == "L") { 
            $increase_qry = mysql_query("UPDATE f_user_matching 
                                            SET u_m_left_current= '{$update_left_current}', 
                                                u_m_left_total ='{$update_left_total}' 
                                            WHERE u_m_mem ='{$placement}' "); 
        } 
        if ($node == "R") { 
            $increase_qry = mysql_query("UPDATE f_user_matching 
                                            SET u_m_right_current= '{$update_right_current}', 
                                                u_m_right_total ='{$update_right_total}' 
                                            WHERE u_m_mem ='{$placement}' "); 
        } 
        $login_name = $placement; 
        if ($login_name != "IM000001") { 
            $login_name = $placement; 
      $count = getcount($login_name); 
        } 
        global $login_name; // Dont know why you want this one? 

    } 

    ?> 

不知道爲什麼你有*全球$ LOGIN_NAME。你想讓函數返回一些東西,或者只是在數據庫中執行UPDATE

+0

我不使用(!isset($ end)),我只是不再調用函數。因此我不需要這行:$ end = 1; –

+0

感謝洛特的幫助!我錯過了一些基礎知識:)這工作和一個完美的答案。你救了我的一天。順便說一句,找不到一個方法來投票你(需要15聲望)。 – tintinboss

+0

雅我再也不需要全球旗幟了。這只是嘗試全局更新$ login_name變量。 - 完全錯誤的做法。 – tintinboss