0

androidからphpにarraylistを送信しています。古いメニュー名を新しいメニュー名に置き換えたい。私のテーブルには2つの列が含まれています1.menuimage2.menuname..新しいmenunamesだけを更新したい

私のテーブル構造

                  test(table name)
           menucode     menuimage   menuname
             1            image       p
             2              "         q
             3              "          r
             4              "          s
             5              "           t

menucodeに従ってmenunameのみを更新したい...menucode[1,2,3,4,5,6,7]を渡しています...

<?php

   $old_menu_code = explode(",", str_replace(array("[","]"), "", $_POST['menucode']));
   $new_menu_names = explode(",", str_replace(array("[","]"), "", $_POST['editmainmenu']));
  mysql_connect("localhost", "root", "root");
  mysql_select_db("test");
  foreach ($old_menu_names as $key => $old_name) {
  $new_name = mysql_real_escape_string($new_menu_names[$key]);
  $old_code = mysql_real_escape_string($old_menu_code[$key]);

  mysql_query("UPDATE `test` SET `menuname` = '$new_name' WHERE menucode= '$old_code'") or die('Error' . mysql_error());
echo "Updated";
   }
  ?>

上記のコードテストは、データベースにテストテーブルが含まれています。テストテーブルには、menuimageとmenunameの2つの列が含まれています。menuimageには7つの画像が含まれ、menunameには7つのmenunmaesが含まれます。menuinamesだけを更新したい。ただし、上記のコードでは、最初の行のmenunames列のみが更新されます。残りの行は更新されません..私が行った間違いを教えてください

4

1 に答える 1

0

str_replaceあなたはあなたが望むものを達成するために&を使うことができますexplode..

唾を吐くデータ

$old_menu_names = "[p,q,r,s,t,u]" ; // or $old_menu_names = $_POST['menuname'] ;
$new_menu_names = "[a,b,c,d,e,f]" ; // or $new_menu_names = $_POST['editmainmenu'] ;

$old_menu_names = explode(",", str_replace(array("[","]"), "", $old_menu_names));
$new_menu_names = explode(",", str_replace(array("[","]"), "", $new_menu_names));

SQLエラー

 mysql_query("UPDATE `test` SET `menuname` = '$new_name' WHERE menuname = '$old_name'") 

menunamewhere条件で使用しているファイルを更新しようとしているため、どのステートメントが機能しないかWHERE menuname =

memuidテーブルに存在する場合などに変更するか、ID最初に取得して更新することをお勧めします。

編集1

更新されたコード

$mysql = new mysqli("localhost","root","root","test");
$sql = "SELECT menucode FROM test where menuname = '%s' ";

foreach ($old_menu_names as $key => $old_name) {
    $new_name = mysql_real_escape_string($new_menu_names[$key]);
    $old_code = mysql_real_escape_string($old_menu_names[$key]);
    $result = $mysql->query(sprintf($sql,$old_code))->fetch_assoc();

    if(!empty($result['menucode']))
    {
        $mysql->query(sprintf("UPDATE `test` SET `menuname` = '%s' WHERE menucode= '%d'",$new_name,$result['menucode']));
        echo "Updated " , $mysql->affected_rows .  PHP_EOL;
    }
    else
    {
        echo "Missing menucode for $old_code " , PHP_EOL;
    }
 }

これがお役に立てば幸いです

于 2012-04-16T08:44:33.543 に答える