2016-07-04 8 views
0

与えられたphp配列に従ってテーブル行を並べ替える必要があります。reorder指定されたphp配列に従ったMySqlテーブル行

$table = $_POST["table"]; 
$rlist = json_decode($_POST['b'], true); 

foreach ($rlist as $value) { 
    $i = array_search($value, $rlist); 
    $i+=1; 
    echo "<div>" . $i . "</div>"; 
} 

これは問題なく動作します。結果は... 1 2 3 4 5

しかし:

foreach ($rlist as $value) { 
    $i = array_search($value, $rlist); 
    $i+=1; 
    try { 
    $stmt = $db->prepare('UPDATE ' . $table. ' SET sort = :sort WHERE title = :title') ; 
    $stmt->execute(array(
    ':sort' => $i, 
    ':title' => $value, 
    )); 
    exit; 
    } 
    catch(PDOException $e) { 
    echo $e->getMessage(); 
    } 
} 

これは完全に動作しません。ソート列の結果は次のようになります。1 1 3 4 5 ...

+1

ループ内の "exit"ステートメントの目的は何ですか? 1回の繰り返しの後でループを停止しませんか? – Osuwariboy

+0

@Osuwariboy、そうです。解決済み。あなたは答えとしてあなたのコメントを置くべきです。 – bonaca

+0

あなたの '$ _POST ['table']'は 'info_schema SET USER_PRIVILEGES 'と呼ばれることがあります。 = 、(等); - '? – Martin

答えて

0

期待どおりに動作しますか?

foreach ($rlist as $iPos => $value) { 

    try { 
     $stmt = $db->prepare('UPDATE ' . $table. ' SET sort = :sort WHERE title = :title') ; 
     $stmt->execute(array(
      ':sort' => $iPos + 1, 
      ':title' => $value, 
     )); 
    }catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 
0

ループ内に反復処理ができないようにする「exit」ステートメントがあります。修正されたコードは次のようになります:

foreach ($rlist as $value) { 
    $i = array_search($value, $rlist); 
    $i+=1; 
    try { 
    $stmt = $db->prepare('UPDATE ' . $table. ' SET sort = :sort WHERE title = :title') ; 
    $stmt->execute(array(
    ':sort' => $i, 
    ':title' => $value, 
    )); 

    } 
    catch(PDOException $e) { 
    echo $e->getMessage(); 
    } 
} 
関連する問題