使用一个 'isset' 语句处理不同的 PHP 提交

Handle different PHP submits with one 'isset' statement

我正在尝试使用 PHP 从 MySQL 数据库加载数据并在 HTML 中提交图像。单击特定图像后,与图像关联的一些文本将通过 MySQL/PHP 加载到页面上。我想在不使用许多 isset 语句的情况下完成此操作。

HTML:

<input type="image" name="image1" src="img/image1.jpg"></input>
<input type="image" name="image2" src="img/image2.jpg"></input>
<input type="image" name="image3" src="img/image3.jpg"></input>
<input type="image" name="image4" src="img/image4.jpg"></input>
<input type="image" name="image5" src="img/image5.jpg"></input>

(我还有几个输入,如上所示,但为了简洁起见,已将其减少为五个输入)

PHP:

if(isset($_POST["image1"])){
    //load mysql data associated with image 1
}

if(isset($_POST["image2"])){
    //load mysql data associated with image 2
}

if(isset($_POST["image3"])){
    //load mysql data associated with image 3
}

if(isset($_POST["image4"])){
    //load mysql data associated with image 4
}

if(isset($_POST["image5"])){
    //load mysql data associated with image 5
}

我有大约 30 张这样的图片,所以我自然希望避免对每张图片都执行 "if(isset)" 声明,就像我在上面演示的那样。无论如何使用一个 isset 语句来处理这些唯一输入名称中的每一个?也许使用循环?谢谢

您正在寻找这样的东西吗?

从 1 循环到 31 并检查 post 是否动态设置...

   for($number = 1; $number < 31; ++$number) {
      $image = "image" . $number;  
      if(isset($_POST[$image])){
          //load mysql data associated with $image
      }
   }

请注意,如果您更改视图中的图像名称,它将不起作用。您必须遵守数字顺序。

你可以有一个字符串数组,其中每个字符串都是一个有效输入字段的名称,然后你可以对 $_POST 进行循环并查看是否每个字符串都设置在那里:

$validInputs = array('image1','image2','image3','image4','image5');

foreach( $_POST as $k=>$v ){
    if( in_array($k,$validInputs) ){
        // Do something
    }
}

这种类型的设置假定图像处理除了名称之外是相同的。这种使用输入白名单的方法在某些情况下也非常方便。提供了对 in_array 的参考。

这是第二个答案,完全不同的方法,因为它是在对手头的问题有更高的理解之后。首先,图像通过GET输入return x,y貌似不管怎样。如果您想在 POST 的某些计算中使用 x,y,这是有问题的。然而,我们可以做的是使用 JavaScript 获取 x,y 并使用该信息设置一个 AJAX 调用。

虽然我的另一个答案已被接受,但我认为这是更正确的答案。

HTML

<input type="image" name="image1" src="img/1.png"></input>
<input type="image" name="image2" src="img/2.png"></input>
<input type="image" name="image3" src="img/3.png"></input>
<input type="image" name="image4" src="img/4.png"></input>
<input type="image" name="image5" src="img/5.png"></input>

JavaScript

为了简单起见,我使用 jQuery。您可以在没有 jQuery.

的情况下执行此操作
$('input[type="image"]').on('click',function(e){
    //  Do not go to next page
    e.preventDefault();

    //  Prepare necessary structure
    var offset = $(this).offset();
    var postData = {
        'name': $(this).attr('name'),
        'x': e.pageX - offset.left,
        'y': e.pageY - offset.top
    };

    // AJAX Call
    $.ajax({
        url: 'ajax.php',
        method: 'POST',
        data: postData,
        dataType: 'html',
        success: function(data){
            // Do something
        }
    });
});

PHP

$whiteList = array('image1','image2','image3','image4','image5');
if( in_array($_POST['name'],$whiteList) ){
    // Process
}

如果我点击(267,60),$_POST的结构如下所示:

Array
(
    [name] => image1
    [x] => 267
    [y] => 60
)

一行(未测试)

$images = array_filter(array_map(range(1,31), function($i){return isset($_POST['image' . $i]) ? $_POST['image' . $i] : false;}));