2014-10-09 142 views
-1

以下是我的代碼。在我的代碼的前半部分,你會看到變量$ question和$ row。當我回顯$ question和/或$ row [0]時,返回值。但是,在代碼的底部,我嘗試將這些變量用作add_textbox函數中的實際參數。但是,add_textbox函數的作用就像那些變量爲空。有人能告訴我我做錯了什麼嗎?php使用變量作爲php函數中的實際參數

<?php 


$dbhost = 'localhost'; 

$uname = $_POST["uname"]; 

//***create connection object 
$connection = mysql_connect($dbhost, "bc572482", "dfdfdfs") 
    or die (mysql_error()); 

$dbname = "bc57"; 
mysql_select_db($dbname) 
    or die (mysql_error()); 

// ***隨機選擇一個安全問題

//*** need this to import session variables 
session_start(); 

// echo ($_SESSION["ValidUser"] . '<br>'); 
$uname =$_SESSION["ValidUser"]; 
    //echo ($uname . '<br>'); 

$rq = array('q1','q2','q3'); 
    $rand_key = array_rand($rq,1); 
// echo $rq[$rand_key]; 

$question = $rq[$rand_key]; 

$qtoanswer = mysql_query("select $question from users where uname = '$uname'"); 
if(!$qtoanswer) 
{ 
    echo "Could not run query:" . mysql_error(); 
    exit; 
    } 

//echo ($qtoanswer . '<br>'); 
$row = mysql_fetch_row($qtoanswer); 

//echo ($row[0] . abc); 

display_security(); 


//functions to create security page 
function myprint($text) 
{ 
    print("$text \n"); 
} 

//*** a bit of style 
function add_style() 
{ 
    myprint("<link rel=\"stylesheet\" type=\"text/css\" href= \"main.css\" />"); 
//myprint("<style type=text/css> * {font-family:arial;} h3 {color:orange} </style>"); 
} 

//*** add a text box 
function add_textbox($label, $name) 
{ 
    myprint("$label <br><input type=text name=$name><br>"); 
} 

    function add_submit($label) 
{ 
    myprint("<input type=submit name=submit value=$label>"); 
    myprint("<input type=reset value=Reset><br>"); 

} 

//create the dynamic security page 
function display_security() 
{ 
    myprint("<html><head>"); 
    add_style(); 
    myprint("</head><body>"); 
    myprint("<h3> Feeding our Brothers and Sisters <br> Security Check</h3>"); 
    // get the security form created 
    myprint("<form name=securityForm method=post action=login.php>"); 

    add_textbox($row[0],$question); 
    add_submit("Login"); 


myprint("</form>"); 

    myprint("</body></html>"); 

} 

?>

+0

這些變量不是函數中定義'display_security()'在其中您呼叫'add_textbox()' – Cheery 2014-10-09 03:19:31

+0

我沒有看到你逝去的那些變量作爲你的任何函數的參數。 – EternalHour 2014-10-09 03:22:29

回答

1

$row[0]$question作爲函數參數調用函數display_security()這樣

display_security($row[0], $question); 

display_security()使用t他參數變量$p & $question

function display_security($p, $question) 
{ 
    myprint("<html><head>"); 
    add_style(); 
    myprint("</head><body>"); 
    myprint("<h3> Feeding our Brothers and Sisters <br> Security Check</h3>"); 
    // get the security form created 
    myprint("<form name=securityForm method=post action=login.php>"); 
    add_textbox($p,$question); 
       ^^^ ^^^^^^^^ 
    add_submit("Login"); 
    myprint("</form>"); 
    myprint("</body></html>"); 

} 
+0

和'$ question' – Cheery 2014-10-09 03:23:39

0

$question$row是全局變量。進入函數$question$row是局部變量而不是全局變量。你可以打電話$GLOBALSglobal關鍵字:

$question = 'this is a global variable'; 
$row = 'this is a global variable too'; 

function foo() { 
    global $row; 
    global $question; 
    add_textbox($row[0], $question); 
} 
+1

使用'global'是非常不鼓勵的;將變量明確地傳遞到函數的範圍是更好的做法。 – 2014-10-09 03:48:36

+0

是的,這是真的。這是一個不好的做法...就像使用mysql而不是mysqli並將HTML代碼嵌入到PHP文件中一樣......就像在函數中使用多個參數一樣(請參閱Martin Fowler的重構註釋)。這兩種解決方案都是不好的做法,但確實如同使用全局變量一樣傳遞參數等變量並不算太差。 – 2014-10-09 04:59:46