[英]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.