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);