簡體   English   中英

使用一個'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語句來處理這些唯一的輸入名稱? 也許使用循環? 謝謝。

你可以有一個字符串數組,其中每個字符串都是一個有效輸入字段的名稱,然后你可以在$_POST循環,看看是否在那里設置了每個字符串:

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

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

這種類型的設置假定圖像處理相同,除了名稱。 在某些情況下,這種使用白名單輸入的方法非常方便。 提供了in_array參考。

這是第二個答案,完全不同的方法,因為它是在對手頭的問題有了更深入的了解之后。 首先,無論如何,圖像輸入通過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
)

你在找這樣的東西嗎?

從1到31循環並檢查帖子是否動態設置...

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

請注意,如果更改視圖中的圖像名稱,則無法使用。 你必須尊重數字序列。

一行(未經測試)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM