【问题标题】:Dynamic form PHP / Javascript动态表单 PHP / Javascript
【发布时间】:2017-02-13 16:14:27
【问题描述】:

代码如下....我有下拉菜单 - 使用 PHP 查询 SQL,以填充下拉菜单选项,它工作正常。

您将在下面看到 - sql 查询是静态配置的,我想让它更加动态。

理想情况下,就像同一页面上的另一个下拉菜单一样,带有静态配置的国家/地区选项,然后当客户选择哪个国家/地区时,我的 PHP 脚本会使用 php 正在使用的 sql 查询中的国家/地区进行更新......

例如,在我下面的脚本中,它说;

WHERE 国家 ='SE'

我希望它填充用户在下拉菜单中选择的任何国家/地区,因此它可以是“FR”、“DE”或已选择的任何国家/地区代码。

我怀疑这可能是 javascript?或者也许 php 可以做到这一点...?

我是一个新手级别 - 所以如果你能提供尽可能多的细节或脚本,请提供帮助:)

<html>
<body>


<form name="search" action="\cgi-bin\eu.py" method="get">


<?php

require_once 'db.inc.php';

$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$sqlSelect="SELECT * FROM clnts WHERE country ='SE' ORDER BY clnt_name";
$result = $mysqli -> query ($sqlSelect);


if(mysqli_num_rows($result)){
$select= '<select name="select">';
while($rs=mysqli_fetch_array($result)){
      $select.='<option value="'.$rs['mgmt_ip'].'">'.$rs['clnt_name'].'</option>';
  }
}
$select.='</select>';

echo $select;

?>
 <input type="submit" name="submit" value="Submit">  
</form>
</body>
</html>

【问题讨论】:

标签: javascript php jquery forms


【解决方案1】:

您可以将选定的下拉值发布到同一页面。您可以使用下拉菜单上的“onChange()”事件自动执行此操作。

使用它来 POST 到同一页面,然后获取所选选项的值并在查询中使用它...

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

在 PHP 的顶部添加这个......

if(isset($_POST['select']))
{
    $selected_country_var = " country = '" . $_POST['select'] . "' ";
}else
{
    $selected_country_var = " ";
}

将您的查询编辑为 ...

$sqlSelect="SELECT * FROM clnts WHERE" .  $selected_country_var . " ORDER BY clnt_name";

现在编辑您的选项/下拉列表以进行 onChnange 事件...

<select name="select" onchange="this.form.submit()">';

让我知道我是否应该澄清或您是否需要其他功能。

【讨论】:

  • 请不要这样做,因为这会导致 SQL 注入漏洞。使用参数化查询。
  • 是的,您的最终实现肯定使用参数化查询,但为了回答问题,这将起作用。
  • 鉴于问题中展示的知识水平,即使显示“它有效但不要这样做”答案也不是一个好主意。此外,在选择更改事件上提交也不理想(可访问性和 UI 原因),但至少它不是一个巨大的安全漏洞。
【解决方案2】:

将服务器端和客户端代码放在同一页面上通常不是一个“干净”的解决方案。

实际上更好的做法是将服务器代码放在单独的文件中,例如“handler.php”或“api.php”,然后使用 XMLHttpRequest(通常称为 AJAX)调用它...

然后,在使用 ajax 时,您可以使用 POST 或 GET 变量将数据传递到服务器并让它处理数据。

这样你可以创建更流畅的客户端,服务器和客户端之间的通信会更“整洁”

在您的情况下,如果您在服务器上说“handler.php”并使用 jquery ajax,您可以执行以下操作:

client.html

$.ajax({
   url       : 'path_to_handler.php',
   method    : 'POST',
   data      : { countryCode : 'IL', otherVar : 1 },
   onSuccess : function(result){
      // do whatever with the data
   }
});

在服务器上

handler.php

if( isset($_POST['contryCode']) ){
   // query the db and have the result returned as json
   echo json_encode($result_query);
}

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2011-05-03
    • 1970-01-01
    • 2014-01-12
    • 2011-10-24
    • 1970-01-01
    • 2015-08-18
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多