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