2016-12-01 56 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

谢谢你的收获! –