【问题标题】:More elegant way of dealing with query string variables处理查询字符串变量的更优雅的方式
【发布时间】:2013-09-25 19:02:46
【问题描述】:

我正在构建的网站是一个配置器,可让您选择某些项目的颜色。它将具有共享您的颜色配置的功能。它将生成一个带有查询字符串的 URL,例如 ?plate=red&cup=blue&napkin=white 我的代码读取查询字符串并更改 <img> src 值。比如……

<?php
//This stuff is just grabbing the query string values...
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$querystring = parse_url($url);
parse_str($querystring['query'], $color);

$availableColors = array("red","blue","white");
?>

这是我使用 PHP 输入查询字符串颜色值的 HTML。此代码还在检查以确保颜色位于可用颜色的数组中。

<div data-color="<?php if( in_array($color['plate'],$availableColors) ) {echo $color['plate'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['dinnerPlate'],$availableColors) ) {echo $color['plate']."_plate.png";} else {echo "dummy.gif";} ?>">
</div>

<div data-color="<?php if( in_array($color['napkin'],$availableColors) ) {echo $color['napkin'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['napkin'],$availableColors) ) {echo $color['napkin']."_napkin.png";} else {echo "dummy.gif";} ?>">
</div>

<div data-color="<?php if( in_array($color['cup'],$availableColors) ) {echo $color['cup'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['cup'],$availableColors) ) {echo $color['cup']."_cup.png";} else {echo "dummy.gif";} ?>">
</div>

我想做的是避免每次我想检查颜色值是否在我的数组availableColors 中时都有一个条件语句。我想我正在寻找一种更简洁/优雅的方式。

【问题讨论】:

  • 如果你创建一个函数来做呢?
  • 由于数据来自查询字符串,因此您需要确保对其进行验证以避免任何形式的注入。因此,我认为 fedorqui 是正确的,您应该只创建一个接受颜色参数的函数,然后返回该颜色(如果有效),或者不返回默认选项。然后,无论何时绘制 HTML,都可以使用该函数。
  • 另外,我建议你改掉使用不带引号的字符串的习惯。 $_SERVER[HTTP_HOST] 只是出于巧合才为您正常工作,因为没有人定义 HTTP_HOST 常量,但如果他们定义了,它会破坏您的代码。使用字符串时,请始终在其周围使用单引号或双引号。如果您在启用所有 error_reporting 的情况下进行编码,您会看到 PHP 发出的警告警告您。
  • 是的,我想这就是我正在寻求有关如何完成的帮助。如何创建一个检查所有查询字符串值的函数?

标签: php arrays query-string


【解决方案1】:
function getColorData($color, $type) {
    $result = array('color_name' => '', 'color_img' = 'dummy.gif');
    $available_colors = array('red', 'blue', 'green');
    if (in_array($color, $available_colors))
        $result = array('color_name' => $color, 'color_img' = $color . '_' . $type . '.png');

    return $result
}

使用示例:

$plate_color_data = getColorData($color['plate'], 'plate');
echo '<pre>',print_r($plate_color_data),'/<pre>';    // just for test)


<div data-color="<?=$plate_color_data['color_name']?>">
    <img src="img/tablesetting/<?=$plate_color_data['color_img']?>">
</div>

【讨论】:

  • 好的,我想这很接近了.. 只是想知道您在哪里/如何在函数中获得 $color$type
【解决方案2】:

首先,您使用 parse_url 是否有原因......不能只是通过 $_GET 或 $_REQUEST 获取变量?

其次,如果你想验证你的数据 in_array 是一个好方法。一个简单的清理方法是将其全部移动到您的 php 区域,然后简单地将验证后的数据输出到 html。

如果我正在构建它,我会从数据库中运行所有这些东西,这样你就可以查询数据库中的颜色是否有效。

我也会考虑通过 imagick 或 gd 生成图形服务器端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2011-08-07
    • 2017-11-27
    • 1970-01-01
    • 2022-11-13
    • 2011-05-08
    相关资源
    最近更新 更多