【问题标题】:Smarty - How to add values from my form to mysql query?Smarty - 如何将值从我的表单添加到 mysql 查询?
【发布时间】:2014-11-18 14:39:02
【问题描述】:

我不知道如何使用 smarty 将值从表单传递到 mysql 查询。

代码正文.tpl:

<form action="" name="training" id="training">
  <select name="city">
    <option value="ostrava">Ostrava</option>
  </select>
  <input type="text" name="date_start" id="date_start" value="" />
  <input type="submit" />
</form>

Mysql查询:

SELECT * FROM table WHERE city="<value from city>" AND date_start="<value from date_start>"; 

【问题讨论】:

  • 是的,但我应该在哪里使用

标签: php html mysql smarty


【解决方案1】:

您可以通过以下方式使用 smarty 访问 POST 数据:$smarty.post.[name]

所以"&lt;value from city&gt;"的地方放在:..'".$smarty.post.city."'..

并代替"&lt;value from date_start&gt;" 放置在:..'".$smarty.post.date_start."'..

请注意,您要序列化您的输入。这是假设您的查询包含在"..." 双引号中。例如,整个查询如下所示:

"SELECT * FROM table WHERE city='".$smarty.post.city."' AND date_start='".$smarty.post.date_start."'"

您需要告诉您表单以查找 POST 值。只需添加method='post':

<form ... method="post">
    ...
</form>

请注意,您也可以使用 GET,但 POST 更安全,因为用户无法在 URL 中更改它。

【讨论】:

  • 这是一个简单的错误,因为 是在发送到 mysql 服务器而不是 smarty 引擎的字符串中!
  • @ITroubs $smarty 可以在 PHP 中使用。我已经明确表示您需要在其周围添加字符串。请注意,smarty 中的{ ... } 仅表示您正在使用模板引擎编写 PHP。
【解决方案2】:

$smarty.get.city。如果你使用的是post方式,那么$smarty.post.city

和smarty无关。

$sql = "SELECT * FROM table"
. " WHERE city='" . $smarty.get.city . "'"
. " AND date_start='" . $smarty.get.start_date . "'";

注意:通过转义变量来避免 sql 注入。

看到这个:http://www.smarty.net/forums/viewtopic.php?p=75542

但我建议你在 PHP 端进行,而不是在模板中。

【讨论】:

  • 他也可以使用 $_REQUEST。这将包括这两种方法。
  • 我真的不喜欢用$_REQUEST
  • 有什么原因吗?我总是对有充分理由的意见感兴趣
  • 因为如果我无法控制php.ini (variables_order) 文件,我无法控制$_POST/$_GET 的顺序。 $_REQUEST 还包括 $_COOKIE。所以,当我编程时,我做我该做的,所以我直接使用$_POST$_GET。当然,您可以使用$_SERVER['REQUEST_METHOD'] 处理它,但这需要更多的工作。
  • 我可以在 .tpl 之外的 mysql 查询中使用 $smarty.post.name_of_my_input_or_selectbox,例如在 functions.php 中包含它时使用它吗?
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多