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

时间:2015-07-16 17:20:49

标签: php html mysql isset

我正在尝试使用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语句来处理这些唯一的输入名称?也许使用循环?感谢。

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

这是第二个答案,完全不同的方法,因为它是在对手头的问题有了更深入的了解之后。首先,无论如何,图像输入通过GET返回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
)

答案 2 :(得分:0)

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

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

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

请注意,如果更改视图中的图像名称,则无效。你必须尊重数字序列。

答案 3 :(得分:0)

一行(未经测试)

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