我正在尝试实现一个有点复杂的功能,并希望避免回收代码,因为我只需要将其分成适当的语句。
我有一个用于添加和编辑内容的表单。如果用户希望添加新内容,则表单为空,在他提供所有必需的输入后,将输入插入到数据库中(表单调用save函数并将new
作为参数)。其中一个输入是图像。仅在用户添加新内容时才需要图像。在这种情况下,我的功能如下:
function save($method)
if $method == "new"{
1. collect input
2. check if image was provided: if($_FILES['userfile']['tmp_name'] != '')
2.1 upload original image
2.2 create and upload thumb to thumb folder
2.3 create and upload resized image to cover folder
3.3 insert input into DB
3. else reload page with error
}
我现在尝试使用相同的方法实现编辑功能,现在只有提交按钮提供内容的ID作为函数的参数。我在这里被困住了。我无法弄清楚我应该添加哪些附加条件以及我应该放在哪里。我需要该功能如下工作:
当$method
为"new"
并且选择了图片时,请执行完整步骤1
& 2
当$method
为"new"
并且未提供图片时,请执行步骤1
和2
,其中2
会出错并运行3
当$method
为"X"
且提供图片时,请执行完整步骤1
& 2
但不是插入,而是对内容标识X
当$method
为"X"
并且未提供图片时,请忽略图片上传&操纵和更新除图像之外的所有字段
我希望这对你有意义。我不是要求实际的PHP代码,我想知道的是我应该检查什么以及在哪里。我只是不想使用上传代码三次总是做同样的事情,等等。感谢您的阅读并提前回复。我会继续自己研究这个问题,如果我想出来的话,我会更新问题。
答案 0 :(得分:0)
将您的函数重构为多个函数,其中一些函数可能需要额外的参数或两个函数。然后从你编写的函数中调用这些函数来实现各种“方法”。
答案 1 :(得分:0)
好的,所以我将声明分组如下:
if method == NEW && no image
reload page with error
else
if file exists
upload image
if upload failed
reload page with error
else
create thumb
create cover
data array (name, ..., image paths)
if method == NEW
db insert, data array
else //we are updating
db update, where id = $method, data array
redirect manager
else
data array (name, ..., NO IMG DETAILS)
db update, where id = $method, data array
redirect content
}
}
绝对不是最好的做法,但它确实有效。我真的不想创建额外的功能并调用它们,因为额外的代码量大致相同。我现在回收的唯一内容是data array
和redirect content
。