【问题标题】:Is this way of doing this the 'better way'?这种方式是“更好的方式”吗?
【发布时间】:2009-11-30 12:42:38
【问题描述】:

我有一个广告网站,其中有很多记录存储在 mysql 数据库中。

在我的主页上,我有一个表单,用户可以在其中指定他们的搜索条件。 操作设置为 myPhp.php 文件。

myPhp.php 不包含 HTML,只有 php 代码,基本上是这样的:

1- get values from FORM and build a SQL query
2- query MYSQL db. 
3-display all results in a table using
`while($row=mysql_fetch_array($res))`
4- echo the table.

在这个用 PHP 创建的表中,我也有几个链接,每当单击它们时,都会调用父页面上的一个 javascript 函数,它将隐藏的输入值设置为某物,然后再次提交表单选择的变量。

例如:每当用户想要转到搜索结果中的下一页时,他们必须单击在 PHP 中创建的“下一个”链接,然后调用 javascript,将隐藏的输入值设置为“下一个” ,然后再次提交表单,PHP文件从隐藏输入中获取变量并检测到其值设置为'NEXT',然后显示下一个结果。

真的没有其他方法可以做到这一切吗? (也就是说,在性能和可靠性方面更好的方法)

我还在学习,非常感谢您的帮助! 每当您需要更多输入时,我都会更新此问题。

谢谢

【问题讨论】:

  • 我在您的问题中将“querystring”更改为“SQL query”,因为 querystring 在网络上下文中具有另一个特定含义。
  • 要记住的一个问题是,并非所有用户都启用了 javascript!您还应该确保可以在没有 javascript 的情况下使用您的链接

标签: php javascript mysql html


【解决方案1】:

将下一个 javascript 调用替换为指向的链接

http://yourdomain/myPhp.php?page=2

然后查看myPhp.php中的get参数:

if(isset($_GET['page']) AND is_numeric($_GET['page'])){
    $limit = (int) $_GET['page'] * MAX_RECORDS . ', ' . MAX_RECORDS;
} else {
    $limit = MAX_RECORDS;
}

//...
$query .= 'LIMIT '. $limit;

当然,您必须根据常量的变化等进行更改。
这种方法称为分页。查看Zend FrameworkPaginator 模块以更好地理解。

【讨论】:

  • 好的,但是如果我将上面提到的变量再次发送到 PHP 文件,表单提交的其他变量不会消失吗? (如查询字符串、价格和其他用户输入)
  • Foa:不发送查询字符串。 2:如果您不发布您的数据,您将无法从 POST 超全局获取它们。
【解决方案2】:

创建链接时,您可以使用查询字符串来指定要发送到服务器而不是提交表单的参数。因此,如果您在名为 next 的表单中有一个隐藏的输入,那么您可以像这样完成同样的事情:

<a href="myPhp.php?next=NEXT">Next</a>

在 myPhp.php 页面上,您可以像发送表单时一样获取 next 的值。

【讨论】:

  • 好的,但是如果我将上面提到的变量再次发送到 PHP 文件,表单提交的其他变量不会消失吗? (如查询字符串、价格和其他用户输入)
  • 哦。我没有得到表格中有其他数据。我以为你想知道用户点击了哪个链接。如果表单中的所有字段都被隐藏,那么您使用此方法,如果用户可以编辑表单,则按照您已经在执行的方式进行操作。您可以像这样添加多个查询字符串:url?var=val&var2=val2&var3=val3
【解决方案3】:

如果这些链接至少有一个相同的类(带有标题属性),您可以附加到它们,以将所有这些链接附加到单击事件并测试以查看单击的元素上的标题。

您可以使用开关触发正确的功能来执行任务(我想使用 JQuery/Ajax)。

这应该可以。至少没有隐藏字段。

例子:

<a href="myPhp.php?whatever you querystring is" title="NEXT">Next</a>

<a href="myPhp.php?whatever you querystring is" title="AdDetails">Ad Details</a>

【讨论】:

    猜你喜欢
    • 2014-11-21
    • 2023-03-14
    • 2013-02-08
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多