Php 使用数组自动生成更新表单 $resultUpdate=Nemesis::select(“*”,$table,“id=”{$id}'); 如果(!$resultUpdate){ self::显示错误(查询错误); }elseif($resultUpdate->num\u rows>0){ $out.=''.$formDesc'; }否则{ self::显示错误(查询为空); } $array=数组值($array); 打印(数组); $out.=''; 而($row=$resultUpdate->fetch_assoc()){ foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateInputField($fieldname,$value); } } foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateTextarea($fieldname,$value,$cke); } } foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateImgField($fieldname,$value); } } } $arr=数组(“上次修改的”=>“输入”、“已发布”=>“输入”、“内容”=>“文本区域”); echo$automation->createArrayForm('projects','update','someformdesc','178514825','arr,true);
现在,所有字段都在每个Php 使用数组自动生成更新表单 $resultUpdate=Nemesis::select(“*”,$table,“id=”{$id}'); 如果(!$resultUpdate){ self::显示错误(查询错误); }elseif($resultUpdate->num\u rows>0){ $out.=''.$formDesc'; }否则{ self::显示错误(查询为空); } $array=数组值($array); 打印(数组); $out.=''; 而($row=$resultUpdate->fetch_assoc()){ foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateInputField($fieldname,$value); } } foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateTextarea($fieldname,$value,$cke); } } foreach($fieldname=>$value的行){ if(在数组中($fieldname,$array)){ $out.=generateImgField($fieldname,$value); } } } $arr=数组(“上次修改的”=>“输入”、“已发布”=>“输入”、“内容”=>“文本区域”); echo$automation->createArrayForm('projects','update','someformdesc','178514825','arr,true);,php,mysql,arrays,Php,Mysql,Arrays,现在,所有字段都在每个foreach中输出,例如,只有输入应该在生成输入字段部分输出。我知道这是因为我需要检查fieldtype(input,textarea)键是否与标记为input或textarea的$fieldname值之一匹配。但我不知道怎么做 我很确定我必须过滤数组,这样只有input的值才能进入一个单独的数组,比如arrayInput,如果我正确理解您和您的代码,我可以将它用作\u array中的第二个参数 此代码 $resultUpdate = Nemesis::select("*
foreach
中输出,例如,只有输入
应该在生成输入字段
部分输出。我知道这是因为我需要检查fieldtype(input,textarea)键是否与标记为input
或textarea
的$fieldname
值之一匹配。但我不知道怎么做
我很确定我必须过滤数组,这样只有
input
的值才能进入一个单独的数组,比如arrayInput
,如果我正确理解您和您的代码,我可以将它用作\u array中的第二个参数
此代码
$resultUpdate = Nemesis::select("*", $table, "id = '{$id}'");
if (!$resultUpdate) {
self::show_error(QUERY_ERROR);
} elseif ($resultUpdate->num_rows > 0) {
$out .= '<div class="form-desc">' . $formDesc . '</div>';
} else {
self::show_error(QUERY_EMPTY);
}
$array = array_values($array);
print_r($array);
$out .= '<form action="' . $_SERVER['PHP_SELF'] . '?id=' . $id . '&table=' . $table . '" method="post" class="form-horizontal" ' . $formAppend . '>';
while ($row = $resultUpdate->fetch_assoc()) {
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $array)) {
$out .= generateInputField($fieldname, $value);
}
}
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $array)) {
$out .= generateTextarea($fieldname, $value, $cke);
}
}
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $array)) {
$out .= generateImgField($fieldname, $value);
}
}
}
$arr = array("last_modified"=>"input", "published"=>"input", "content"=>"textarea");
echo $automate->createArrayForm('projects', 'update', 'Some form desc', '178514825', $arr, true);
对于所有行,将始终返回true,这就是您获取当前输出的原因
相反,您应该这样做:
while ($row = $resultUpdate->fetch_assoc()) {
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $array)) {
在堆垛机的大量帮助下
while ($row = $resultUpdate->fetch_assoc()) {
foreach ($row as $fieldname => $value) {
if ($fieldname == 'input') {
$out .= generateInputField($fieldname, $value);
} elseif($fieldname == 'textarea') {
$out .= generateTextarea($fieldname, $value, $cke);
} elseif ($fieldname == 'img') {
$out .= generateImgField($fieldname, $value);
}
else{ $out = $out;}
}
}
input
或textarea
是来自用户输入还是您正在生成它?它来自数组,如图所示$arr
您能尝试更好地解释它吗?这真的很难理解你想做什么,所以基本上我想用数组来生成表单字段,文本区域,输入等等。。。从那里,我想将数据库中的值与字段进行匹配。我已经做过了。但问题是,我不知道如何确保只有来自$arr
的输入的数组值与generateInput匹配。etcDidn您今天就可以问一下了吗?我肯定你接受了答案。
/**
* Create Form With Array
*
* Creates a form based on an array. If $do == update, we match fieldnames with values
*
* @param string $table name of database table
* @param string $do whether the form is an insert or update
* @param string $formDesc form description to be echoed
* @param array $array associative array of type (keys), and fieldnames (values)
* @param bool $markFields whether or not to add headers for inputs, textareas .etc during insert
* @param bool $formBrackets whether or not to prepend and append form brackets
* @return $out html form
*
*/
public function createArrayForm($table, $do, $formDesc = '', $id, $array, $markFields = false, $formBrackets = true) {
if (!isset($table) && !isset($do)) {
self::show_error('One or more parameters are missing in ' . __FUNCTION__);
} elseif ($table == 'update' && !isset($id)) {
self::show_error('For this form to be built, and ID must be set. Missing parameter `ID` in ' . __FUNCTION__);
}
if (!is_array($array)) {
self::show_error('For this form to be built, an array must be given. Missing parameter `array` in ' . __FUNCTION__);
}
$result = array();
// create two dimensional array to preserve keys that
// otherwise would be lost with array_flip
foreach($array as $k => $v) {
if (array_key_exists($v, $result)) {
$result[$v][] = $k;
} else {
$result[$v] = array($k);
}
}
// make sure we do not have any duplicates
$result = super_unique($result);
// we just need the array_values for matching with in_array
// however we do not want to run array_values on null
// so we check to see if the $result is a valid array first
// if not, we just output a blank array so in_array doesn't complain
$arrayInput = is_array($result['input']) ? array_values($result['input']) : array();
$arrayTextarea = is_array($result['textarea']) ? array_values($result['textarea']) : array();
$arrayImages = is_array($result['images']) ? array_values($result['images']) : array();
$out = $formBrackets == true ? '<form action="' . $_SERVER['PHP_SELF'] . '?id=' . $id . '&table=' . $table . '" method="post" class="form-horizontal" ' . $formAppend . '>' : NULL;
if($do == 'insert') {
$out .= isset($formDesc) ? '<div class="form-desc">' . $formDesc . '</div>' : NULL;
$out .= $markFields && in_array('input', $array) ? '<h3>Input Fields</h3>' : NULL;
foreach ($arrayInput as $fieldname) {
$out .= generateInputField($fieldname);
}
$out .= $markFields && in_array('textarea', $array) ? '<h3>Content Fields</h3>' : NULL;
foreach ($arrayTextarea as $fieldname) {
$out .= generateTextarea($fieldname, $cke);
}
$out .= $markFields && in_array('image', $array) ? '<h3>Images Fields</h3>' : NULL;
foreach ($arrayImages as $fieldname) {
$out .= generateImgField($fieldname);
}
} elseif ($do == 'update') {
$resultUpdate = Nemesis::select("*", $table, "id = '{$id}'");
if (!$resultUpdate) {
self::show_error(QUERY_ERROR);
} elseif ($resultUpdate->num_rows > 0) {
$out .= isset($formDesc) ? '<div class="form-desc">' . $formDesc . '</div>' : NULL;
} else {
self::show_error(QUERY_EMPTY);
}
while ($row = $resultUpdate->fetch_assoc()) {
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $arrayInput)) {
$out .= generateInputField($fieldname, $value);
}
}
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $arrayTextarea)) {
$out .= generateTextarea($fieldname, $value, $cke);
}
}
foreach ($row as $fieldname => $value) {
if (in_array($fieldname, $arrayImages)) {
$out .= generateImgField($fieldname, $value);
}
}
}
} else {
self::show_error('Missing array or `do` argument in function ' . __FUNCTION__);
}
$out .= form_hidden('user_data', '1');
$out .= form_hidden('id', $do == 'update' ? $id : self::generateID());
$out .= $formBrackets == true ? form_close() : NULL;
return $out;
}
$arr = array("last_modified"=>"input", "published"=>"input", "project_content"=>"textarea", "project_content"=>"textarea");
echo $automate->createArrayForm('projects', 'insert', 'Some form desc', '123', $arr, true);
echo $automate->createArrayForm('projects', 'update', 'Some form desc', '178514825', $arr, true);