1

MYSQL 属性の値が変更されると、他の属性の他の値も変化するようにしようとしています。

例えば:

値が「RED」の color_scheme 属性があります。color_scheme の値が「BLUE」に変更された場合、次の値:

menu_color changes to #30618F
font_color changes to #FFFFFF
footer_color changes to #1A92CA

出来ますか?

また、ユーザーは特定の属性 (menu_color、font_color、footer_color など) を個別に変更できる必要があるため、値を一度だけ更新する必要があります。

ちょうどこのような:

その他に応じて値を更新する

ここに画像の説明を入力

4

4 に答える 4

2

これを試して:

CREATE TABLE color_scheme (
  id_color_sheme INT AUTO_INCREMENT PRIMARY KEY,
  color_esquema VARCHAR(30),
  color_front_banners VARCHAR(7),
  color_front_banners_bottom VARCHAR(7),
  color_front_botoes VARCHAR(7),
  color_front_links VARCHAR(7),
  color_front_menu VARCHAR(7),
  color_front_rodape VARCHAR(7),
  index(color_esquema) 
  );



CREATE TABLE user_interface (
  id INT AUTO_INCREMENT PRIMARY KEY,
  color_front_banners VARCHAR(7),
  color_front_banners_bottom VARCHAR(7),
  color_front_botoes VARCHAR(7),
  color_front_links VARCHAR(7),
  color_front_menu VARCHAR(7),
  color_front_rodape VARCHAR(7)


  );

-- SAMPLE DATA
INSERT INTO user_interface (
                          color_front_banners,
                          color_front_banners_bottom,
                         color_front_botoes,
                         color_front_links,
                         color_front_menu,
                         color_front_rodape)
VALUES ('#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ; 



INSERT INTO color_scheme (color_esquema,
                          color_front_banners,
                          color_front_banners_bottom,
                         color_front_botoes,
                         color_front_links,
                         color_front_menu,
                         color_front_rodape)
VALUES ('black','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('grey','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;

-- UPDATE based on color_esquema
SET @color_name := 'black'; 
UPDATE user_interface 
SET 
  color_front_banners = (
SELECT color_front_banners FROM color_scheme
WHERE color_esquema = @color_name ),


  color_front_banners_bottom = (
SELECT color_front_banners_bottom FROM color_scheme
WHERE color_esquema = @color_name ),

  color_front_botoes = (
SELECT color_front_botoes FROM color_scheme
WHERE color_esquema = @color_name ),

  color_front_links = (
SELECT color_front_links FROM color_scheme
WHERE color_esquema = @color_name ),

  color_front_menu = (
SELECT color_front_menu FROM color_scheme
WHERE color_esquema = @color_name ),

  color_front_rodape = (
SELECT color_front_rodape FROM color_scheme
WHERE color_esquema = @color_name )

WHERE id = 2;

-- If you want to change just one color, you can use this query.
UPDATE user_interface 
SET 
  color_front_botoes = '#DDDDDD'
WHERE id = 1;

これはどのように作動しますか?まず、色のテーブルを作成します (例: 'color_scheme')。次に、「user_interface」テーブルに挿入されたこのテーブルから値 (「blue」、「#....」、...) を取得します。ところで、これをユーザー インターフェイスに使用すると仮定しました。とにかく、あなたのニーズに合わせて採用することができます。データベースに最初に挿入されたデータのみを更新できることに注意してください。したがって、ユーザーを追加するときは、デフォルトの色から始める必要があります。ユーザーテーブルとは別に、色を含む別のテーブルを作成することをお勧めします。

次に、選択した配色に基づいてデフォルトの色を更新します。「青」を使いたいとしましょう。次に、更新クエリを使用して、user_interface テーブル (または色テーブル) の値を更新する必要があります。最も基本的な方法は、私が行ったようにサブクエリを実行し、WHERE color_esquema = 'blue' と言う方法です。エントリを簡単にするために set color_name 変数を追加しました。このステートメントで、color_name という名前の変数の宣言を開始し、クエリ全体で一度宣言するだけで済みます。元に戻したい場合は、color_esquema 名を挿入できます。

SQL フィドルのデモ

まず、user_interface の最後の行に灰色を追加します。次に、更新クエリを使用して、値を黒の新しいカラー スキーマに変更します。それをステップに分解します。

CREATE TABLE color_scheme (
  id_color_sheme INT AUTO_INCREMENT PRIMARY KEY,
  color_esquema VARCHAR(30),
  color_front_banners VARCHAR(7),
  color_front_banners_bottom VARCHAR(7),
  color_front_botoes VARCHAR(7),
  color_front_links VARCHAR(7),
  color_front_menu VARCHAR(7),
  color_front_rodape VARCHAR(7),
  index(color_esquema) 
  );



CREATE TABLE user_interface (
  id INT AUTO_INCREMENT PRIMARY KEY,
  color_front_banners VARCHAR(7),
  color_front_banners_bottom VARCHAR(7),
  color_front_botoes VARCHAR(7),
  color_front_links VARCHAR(7),
  color_front_menu VARCHAR(7),
  color_front_rodape VARCHAR(7)


  );

-- SAMPLE DATA
INSERT INTO user_interface (
                          color_front_banners,
                          color_front_banners_bottom,
                         color_front_botoes,
                         color_front_links,
                         color_front_menu,
                         color_front_rodape)
VALUES ('#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ; 



INSERT INTO color_scheme (color_esquema,
                          color_front_banners,
                          color_front_banners_bottom,
                         color_front_botoes,
                         color_front_links,
                         color_front_menu,
                         color_front_rodape)
VALUES ('black','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('grey','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;

最初の一歩

その後、更新と同じデータ。ところで、フィドルでは、右側のパネルでこれを行うことはできません。上部の決勝を参照してください。

第二段階

PHP

配色を変更する PHP スクリプト。

    <?php

    $color_name = 'black';

    $host = 'host';
    $user = 'user';
    $password = 'password';
    $database = 'database';

    $link = mysqli_connect($host, $user, $password, $database);
    IF (!$link) {
        echo ('Unable to connect to database');
    }
    ELSE{
        $query = "
            SET @color_name := '".$color_name."'; 
    UPDATE user_interface 
    SET 
      color_front_banners = (
    SELECT color_front_banners FROM color_scheme
    WHERE color_esquema = @color_name ),


      color_front_banners_bottom = (
    SELECT color_front_banners_bottom FROM color_scheme
    WHERE color_esquema = @color_name ),

      color_front_botoes = (
    SELECT color_front_botoes FROM color_scheme
    WHERE color_esquema = @color_name ),

      color_front_links = (
    SELECT color_front_links FROM color_scheme
    WHERE color_esquema = @color_name ),

      color_front_menu = (
    SELECT color_front_menu FROM color_scheme
    WHERE color_esquema = @color_name ),

      color_front_rodape = (
    SELECT color_front_rodape FROM color_scheme
    WHERE color_esquema = @color_name )

    WHERE id = 2;
            ";
        mysqli_query($link, $query);
    }
    mysqli_close($link);
    ?>

**Edit Wordpress udpate **

これは、配色名のみをロードします。

   <?php
// insert database connection to get the colors from the color scheme 
   function retrieve_color_scheme() {
       $host = 'host';
       $user = 'user';
       $password = 'password';
       $database = 'database';

       $link = mysqli_connect($host, $user, $password, $database);
       IF (!$link) {
           echo ('Unable to connect to database');
       } ELSE {
           $query = "SELECT color_esquema FROM color_scheme";
           $result = mysqli_query($link, $query);
           $choices = mysql_fetch_array($result);
           return $choices;
       }
       mysqli_close($link);
   }


                    $this->add_control( 'color_esquema', array(
                            'label'   => 'Esquema de cores:',
                            'section' => 'custom_colors',
                            'type'    => 'select',
                            'priority'=> 9,
                            'choices'    => retrieve_color_scheme()
                    ) );                

                    $this->add_setting( 'color_menu', array(
                            'default'        => '#65696E',
                            'type'           => 'option',
                            'capability'     => 'edit_theme_options',
                            'transport'      => 'postMessage',
                            'priority'       => 10
                    ) );

                    $this->add_control( new WP_Customize_Color_Control( $this, 'color_menu', array(
                            'label'   => __( 'Fundo do Menu'),
                            'section' => 'custom_colors',
                            'settings'   => 'color_menu',
                            'priority'       => 10
                    ) ) );

                    $this->add_setting( 'color_titulo_menu', array(
                            'default'        => '#FFFFFF',
                            'type'           => 'option',
                            'capability'     => 'edit_theme_options',
                            'transport'      => 'postMessage',
                            'priority'       => 15
                    ) );

                    $this->add_control( new WP_Customize_Color_Control( $this, 'color_titulo_menu', array(
                            'label'   => __( 'T&iacute;tulo'),
                            'section' => 'custom_colors',
                            'settings'   => 'color_titulo_menu',
                            'priority'       => 15
                    ) ) );                
?>                   
    <!-- Page -->
    <?php $color_menu = get_option('color_menu');  ?>
    <?php $color_titulo_menu = get_option('color_titulo_menu');?>

        #container{border-top:82px solid <?php if(empty($color_menu)){echo "#65696E";} else { echo "$color_menu";}; ?>}
        #logo a span{color:<?php if(empty($color_titulo_menu)){echo "#FFFFFF";} else { echo "$color_titulo_menu";}; ?>}

    <!-- My try - In Page -->
于 2013-03-08T22:59:51.950 に答える
0

ラジカル、

私はArturの友達です。昨日、この同じ問題に対して別のアプローチを試しましたが、それが簡単なのか、それとも何なのかわかりません...他の質問を見てください。

私たちはWordpressを使用しており、PHPのコーディングはあまり得意ではなく、スクリプトなどを適応させることはできますが、独自の作成はあまり得意ではありません。

あなたの努力に感謝します、私たちはほとんどそこにいます!

于 2013-03-09T13:17:50.097 に答える
0

テーブルを作成し、color_schemesそこに各配色の詳細を保存する必要があります。

于 2013-03-08T22:17:40.930 に答える
0

これにはCASEステートメントを使用できます。これはかなり単純化されたバージョンですが、これで正しい方向に進むはずです。

UPDATE mytable
SET menu_color = CASE WHEN color_scheme = 'Red' THEN '#30618F' WHEN color_scheme = 'Blue' THEN  '#FFFFFF' ELSE '' END
于 2013-03-08T22:17:33.257 に答える