1

このスクリプトを使用して、テーブルの列を更新します。

最初の列「close_account」は列挙値「0」または「1」であり、これらはデータベースにラジオボックスとして表示されます。

2 番目の列「account_status」は列挙値「Active」または「Deactivated」であり、これはデータベースのドロップダウン ボックス リストとして表示されます。

この場合、それらがドロップダウンボックスまたはラジオボックスであるという事実が重要かどうかはわかりません。

ただし、私の問題は、次の mysql クエリを実行して close_account と account_status の両方を更新しようとしていることです。現在、何らかの理由で「close_account」のみが更新され、account_status は更新されていません。理由を教えてください。

ありがとう。

<? ob_start(); ?>
<?php

require_once('includes/session.php');
require_once('includes/functions.php');
require('includes/_config/connection.php');

session_start();

    confirm_logged_in();

    if (isset ($_GET['to'])) {
    $user_to_id = $_GET['to'];


}


if (!isset($_GET['to']))
    exit('No user specified.');

$user_id = $_GET['to'];


$result = mysql_query("SELECT * FROM ptb_users WHERE user_id ='".$_SESSION['user_id']."' ");

if($result) 
{ 
mysql_query("UPDATE ptb_users SET close_account='1' WHERE user_id=".$_SESSION['user_id']."") 
or die(mysql_error());

mysql_query("UPDATE ptb_users SET account_status='Deactivated' WHERE user_id=".$_SESSION['user_id']."") 
or die(mysql_error());

header("Location: dashboard.php");

}
?>
<? ob_flush(); ?>
4

2 に答える 2

3

列挙型データに数値を使用すると、常に混乱します。特に、列挙データが列挙インデックス値と重複している場合。

あなたの場合、どうやら1enum-data は enum-index(numeric) として解釈されました。読みやすさと使用法を向上させるために、代わりに enum-data に文字列を使用します。

例を考えてみましょう:

DROP TABLE enum_tb;

CREATE TABLE enum_tb (size ENUM('x-small', 'small', 'medium', 'large', 'x-large') NOT NULL);

INSERT INTO enum_tb
VALUES ('x-small'), (2), ('5');

SELECT * FROM enum_tb;

出力:

mysql> select * from enum_tb;
+---------+
| size    |
+---------+
| x-small |
| small   |
| x-large |
+---------+
3 rows in set (0.00 sec)

意外?

インデックスが渡されると、MySQL は実際の列挙値を格納します。列挙型インデックスは から始まり1、上記の場合、インデックス2smallです。'5'への指標としても考えられたx-large

于 2013-03-09T14:58:34.050 に答える
1

このような問題にアプローチする体系的な方法は、まず問題を PHP またはデータベースに切り分けることです。これを行う最も簡単な方法は、PHP を使用せずにデータベースに直接アクセスすることです。MySQL コマンドライン ユーティリティ ( mysql) を使用するか、phpmyadmin などのグラフィカル ツールを使用します。

これらのツールのいずれかを使用して、テスト データベースに接続します。(本番データベースではありません。常に安全なテストを実行してください。) SQL プロンプトからこのクエリを実行します。

UPDATE ptb_users 
SET close_account='1', 
    account_status = 'Deactivated'
WHERE user_id = somenumber

somenumber実際の既存のユーザー ID 番号に置き換えます。

そうは言っても、列挙型が数値であることは珍しいことです。このように列挙型を宣言してもあまり意味がありません。

create table foo (
  user_id integer not null,
  bar enum('0', '1')
);

このようなものは、はるかに一般的です。

create table foo (
  user_id integer not null,
  bar enum('open', 'closed')
);

このような列挙を更新するには、文字列値を使用します。

update foo
set bar = 'closed'
where user_id = somenumber and bar = 'open';

ここでも、 somenumber を実際のユーザー ID 番号に置き換えます。

于 2013-03-09T14:59:17.063 に答える