0

ナビゲーション項目を再配置するシステムがあります。

新しい注文を配列に格納し、for ループを使用して配列を調べてデータベースを更新します。

<?php
$apageid = array();
$apagename = array();
$apageorder = array();

$q = "SELECT g.id, g.title, n.order FROM tbl_general g INNER JOIN tbl_navigation n ON n.pageid = g.id WHERE n.type = '$_SESSION[parent]' ORDER BY n.order";
$return = $database->query($q);
while($row=mysql_fetch_assoc($return)){
    $apageid[] = $row['id'];
    $apagename[] = $row['title'];
    $apageorder[] = $row['order'];
}

$count = count($apageid);
$bpageid = array();
$bpageorder = array();
?>
<div class="form-holder">
<?php

//run through each page one at a time and update the order of the menu
mysql_data_seek( $return, 0 ); //reset the pointer to do the same query
$i = 0; //the count for saving the new configuration
while($row=mysql_fetch_assoc($return)){

    $id = $row['id'];
    $title = $row['title'];
    $order = $row['order'];
    ?>
    <div class="form-row">
        <div class="form-label">
            Page Name
        </div>
        <div class="form-field">
            <select class="select-small" name="<?php echo $bpageid[$i]; ?>">
                <?php
                for($j=0; $j<$count; $j++){
                    if($apageid[$j] == $id) {
                        $selected = true;
                    } else {
                        $selected = false;
                    }
                    ?>
                    <option value="<?php echo $apageid[$j]; ?>" <? echo ($selected == true) ? 'selected="selected"' : ''; ?>><?php echo $apagename[$j]; ?></option>
                    <?php
                }
                ?>
            </select>
            <select class="select-small" name="<?php echo $bpageorder[$i]; ?>">
                <?php
                for($k=0; $k<$count; $k++){
                    if($apageorder[$k] == $order) {
                        $selected = true;
                    } else {
                        $selected = false;
                    }
                    ?>
                    <option value="<?php echo $apageorder[$k]; ?>" <? echo ($selected == true) ? 'selected="selected"' : ''; ?>><?php echo $apageorder[$k]; ?></option>
                    <?php
                }
                ?>
            </select>
        </div>
    </div>
    <?php
    $i++;
}
?>

コードのこの最初のチャンクは、項目を並べ替えることができるメニューです。

最初に、現在の選択をロードし、順序を変更できるようにします。

function reorderChildren($pageid, $pageorder){
    global $database;

    $count = count($pageid);
    //run through each page one at a time and update the order of the menu
    for($i=0; $i<$count; $i++){
        //set a few variables
        $pid = $pageid[$i];
        $porder = $pageorder[$i];
        echo "pid = $pid porder = $porder";
        $q = "UPDATE tbl_navigation SET order = '$porder' WHERE pageid = '$pid' AND type = '$_SESSION[parent]'";
        $database->query($q);
    }
    return 0;
}

その後、情報がここに渡されてしまい、問題は for ループが実行されないように見えます。

これがなぜなのか誰にもわかりますか?

使用されたネーミングではありません。確認しました。

配列に情報を正しく格納していますか?

それが情報を転送する配列であること$bpageidを明確にすることはできますか。$bpageorder

ありがとう!

4

3 に答える 3

1

簡単な修正でした!問題は、選択した名前が、上にリストしたものではなく、単に name="bpageid[]" である必要があることでした。馬鹿な!

于 2012-04-17T14:26:20.840 に答える
0

$bpageid = array();最初のwhileループの後、上部で初期化されました。値は割り当てられていません。

その後、あなたは使用します

<select class="select-small" name="<?php echo $bpageid[$i]; ?>">

ただし、値が含まれていない$bpageid[$i]ため、この選択ボックスの名前は空白です。

問題があるかもしれません。これを確認し、必要に応じて実行してください。

于 2012-04-17T09:42:05.300 に答える
0

select要素のオプションからjsonを構築して隠しフィールドに保存するか、ajaxリクエストをphpスクリプトに送信して処理することができます。注文は「重み」値1、2、3などから行うことができます.... phpでソートしてループして表示

于 2012-04-17T10:06:42.867 に答える