2016-12-01 59 views
1

我無法理解單擊表單提交按鈕時通過頁面傳遞的處理變量。基本上我有一個用戶寫一個SQL查詢的文本區域。然後點擊提交。然後在同一頁面(x.php),我必須在表格中顯示結果。我想,當用戶點擊按鈕時,我調用連接到數據庫的函數,然後運行查詢,並將結果輸出到表中。我下面的代碼是一個模擬,並沒有很好的工作。但以上基本上是我想要做的。單擊表單提交時執行PHP函數

在我的代碼中,我打電話給該頁面,並檢查是否正確提交按鈕已被點擊,是我該如何做?

此外,我想在下面的代碼中發佈元數據,但表如何替換頁面上已有的內容?

<html> 
<head> 
<title>CNT 4714 - Project Five Database Client</title> 
</head> 
<body style="background-color:white"> 
<center> 
<h1 style="color:red">CNT 4714 - Project Five Database Client</h1> 
<hr> 
<div style="float:left; text-align:left;padding-right:80px; padding-left:80px; "> 
<font color="yellow"> 
<?php 

?> 
Welcome Back!<br> 
<?php echo $_POST["user"];?> 
    </font> 
</div> 
<font color="yellow"> 
<div style="float:left; text-align:left"> 
<center> 
<h2 style="color:green">Enter Query</h2><br><br> 
Please enter a valid SQL Query or update statement. You may also just press<br> 
"Submit Query" to run a defualt query against the database! 
<form action="" id="sql" method="post"> 
<br> 
    <textarea rows="10" cols="50" name="query" form="sql">Enter text here...</textarea><br><br> 
    <input type="submit" name="submit" color="red"> 
    <input type="submit" name="" color="red" value="Submit Update"> 
</form> 
<?php 

if(isset($_POST['submit'])){ 
    echo "hello"; 
    query(); //here goes the function call 
} 
function query() 
{ 
    echo "hello"; 
    $conn = mysqli_connect("localhost:3306", "root", "*******", "project4"); 
    $query = $_POST["query"]; 
    $result = mysqli_query($conn, $query); 
    $metadata = mysqli_fetch_fields($result); 
    print("<tr>"); 
    for($i=0; $i<count($metadata);$i++){ 
     print("<tr"); 
     printf("%s",$metadata[$i]->name); 
     print("</tr>"); 
    } 
} 


?> 
</center> 
</div> 
</font> 
</center> 

</body> 
</html> 
+0

提供一個名稱的提交按鈕提交併在form標籤附加'方法= 「POST」'。 –

回答

2

您正在嘗試獲取全局變量$_POST的值,同時將它提供給$_GET。解決這個問題的方法是將method分配給您的表單元素。

例子:

<form id="sql" action="" method="POST"> 

有檢查或提交表單時,這個方法(我一直在使用一個)一個被檢查或$_SERVER['REQUEST_METHOD']許多方面等於「POST」 。這樣你可以區分GET,POST或PUT請求。

實施例:

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    if(isset($_POST['sql'])) 
    { 
     .... 
    } 
} 
+0

好的,謝謝,我已經更新了我現在所擁有的代碼,而且我似乎無法獲取要打印的數據。我得到了SQL查詢運行沒有錯誤,我可能做錯了什麼? –

+0

爲什麼不只是'if(isset($ _ POST ['sql']))'?如果它不是郵寄請求,它將不會被設置。 –

+0

我用它,它的工作原理。但我使用了按鈕的名稱,因爲我有多個按鈕。 DevNiels說有很多方法可以做到這一點。我猜他的方式是這樣做的一種方式。 –

0

如果您使用$_POST,您的形式請求方法應該是POST

<form action="" id="sql" method="post">

否則,它將與默認情況下GET要求提交。

在這種情況下,您將不得不使用$_GET來訪問變量。

+0

謝謝你的收穫! –