2016-03-13 3 views
0

У меня есть сценарий Ajax, jQuery, который делает AutoCheck, если данные были изменены и загружают эти данные, не обновляя страницу.Текущие данные Mysql в отдельных таблицах зависят от значения

Теперь я хотел бы представить эти данные в отдельных таблицах в зависимости от значения ячейки on в строке mysql.

function get_news(){ 

    if($result = $this->db->query('SELECT t1.* FROM fandb t1 JOIN (SELECT tableno, MAX(add_date) add_date FROM fandb GROUP BY tableno ASC) t2 ON t1.tableno = t2.tableno AND t1.add_date = t2.add_date WHERE AND id<>1;')){ 

     $return = ''; 

     while($r = $result->fetch_object()){ 
     if (''.htmlspecialchars($r->title).''=='1') { $area_new='STARTER'; } elseif (''.htmlspecialchars($r->title).''=='2') { $area_new='MAIN COURSE'; } elseif (''.htmlspecialchars($r->title).''=='3') { $area_new='DESSERT'; } 
     if (''.htmlspecialchars($r->title).''=='1') { $class_new='id="kitchen_tab_starter"'; } elseif (''.htmlspecialchars($r->title).''=='2') { $class_new='id="kitchen_tab_main"'; } elseif (''.htmlspecialchars($r->title).''=='3') { $class_new='id="kitchen_tab_dessert"'; } elseif (''.htmlspecialchars($r->title).''=='0') { $class_new='id="kitchen_tab_done"'; } 
      $return .= '<button '.$class_new.'><div class="fontbig">'.htmlspecialchars($r->tableno).'</div><div class="fontsmall">'.$area_new.'</font></div></button>'; 
     } 
     return $return; 
    } 
} 

Теперь я хотел бы представить данные в зависимости от значения столбца заголовка в базе данных. Итак, если title равно 1, то он представлен в верхнем div, если title равен 2, чем во втором div, и если 3, чем в третьем div.

Я пытался поиграть с foreach петлей в петле while(), однако это не делает трюк.

У вас есть идеи, чтобы я мог решить эту проблему?

Спасибо,

ответ

0

Ok, я сомневаюсь, что кто-то может ответить на этот вопрос, не зная всех подробностей о том, как обрабатывать эти данные позже. Но так как уже на StackOverflow я пытаюсь ответить на него, чтобы другие могли получить что-то от этого тоже.

Если вы действительно используете мой сценарий от http://blog.codebusters.pl/en/ajax-auto-refresh-volume-ii/, тогда вы должны заметить, что есть JSON. Вы должны использовать это в своих интересах, потому что в PHP вы не контролируете, где код будет помещен в ваш HTML, когда вы сделаете запрос AJAX. В любом случае, это не так.

Вы контролируете это в этой части JS. Таким образом, вы можете сделать это, сделав, например, 3 разных запроса, которые по «успеху» добавят ответ в соответствующем div или передают переменную, которая укажет, где разместить этот ответ.

Предполагая, что вы хотите обновить несколько мест одновременно с одним запросом, самым простым способом было бы вернуть массив в get_news(), как это:

$return = array(); 
while($r = $result->fetch_object()){ 

    /* I don't know what exactly is in title but if there 
    are only numbers (integers), then just use a number 
    and not string and htmlspecialchars, note that strings 
    like "lorem ipsum" will be changed to 0, and "123 ABC" to 123. 
    You currently compare this to numbers so that's why I brought this up. 
    Use with caution. */ 

    switch((int)$r->title){ 
     case 1: 
      $arr= array(

       /* the id of a div that you want to update */ 
       'destination'=>'#kitchen_tab_starter', 

       /* the html that will replace current html 
       in div#kitchen_tab_starter */ 
       'html'=>'<some html you want to embed if its 1>' 

      ); 
      $return[] = $arr; 
     break; 
     case 2: 
      $arr= array(
       'destination'=>'#kitchen_tab_main', 
       'html'=>'<some html you want to embed if its 2>' 
      ); 
      $return[] = $arr; 
     break; 
     /* ... and so on */ 
    } 
} 
return $return; 

Это изменяется на объект JSON в файл checker.php и что JSON отправляется обратно в ответ. Так что теперь у вас есть ответ, который является объектом, как это:

response = { 
    update:true, 
    news:{ 
    0:{ 
     destination:'div-id', 
     html:'<some html>' 
    }, 
    1:{ 
     destination:'div-id', 
     html:'<some html>' 
    } 
    } 
} 

И теперь вы должны изменить эту простую строку:

$('#message-list').html(response.news); 

что меняет текущую HTML-то похожее на этот

//check if we have something inside news 
if(response.news.length>0){ 
    $.each(response.news, function(i, item) { 
    $(item.destination).html(item.html); 
    }); 
} 

Это концепция, которую вы сможете реализовать для обновления более чем одного div.

+0

Таким образом, я сделал так, как указано выше, в коде db.php сверху до функции 'get_news();', чем я добавил eddited файл checker для добавления правила. и это не сработает. Я уверен, что я делаю что-то неправильно, но не могу понять, что. –

+0

В конце я дублировал функции и менял их имена. Я уверен, что это не лучшее решение, но работает для меня :) –

Смежные вопросы