Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как распределить по таблице информацию, получаемую с сервера?

Сообщения:  [1-8] 

 
 автор: confirm   (02.08.2013 в 00:21)   письмо автору
 
   для: Владимир55   (02.08.2013 в 00:09)
 

Как душе угодно, только сомнительно, что ваш код это и есть хорошее. )

  Ответить  
 
 автор: Владимир55   (02.08.2013 в 00:09)   письмо автору
 
   для: confirm   (01.08.2013 в 23:43)
 

Ну а если вам этого не надо

Лично мне в подавляющем большинстве случаев не надо.
Лучшее - оно враг хорошего. Идеала все равно достичь не удастся. А мой девиз - быстрее, ибо времени на программирование у меня очень мало и совершенствоваться в этом направлении нет ни возможности, ни потребности.

За советы спасибо!

  Ответить  
 
 автор: confirm   (01.08.2013 в 23:43)   письмо автору
 
   для: Владимир55   (01.08.2013 в 23:35)
 

Да никакого академизма. Нет проблем сказать (хотя иногда нужны уточнения от задающего вопрос) - тут чиркнуть так, а вот тут вот так, а дальше ваши проблемы.
Но хотелось бы понять, чего же вы решаете, ну не похоже это на корзину, в моем понимании. А ведь сделать можно компактно и универсально, и можно конкретную идею или мысль предложить, но для этого нужны действия с вашей стороны.
Ну а если вам этого не надо, то и нет претензий.

  Ответить  
 
 автор: Владимир55   (01.08.2013 в 23:35)   письмо автору
 
   для: confirm   (01.08.2013 в 01:10)
 

не понять чего вы в конечном итоге хотите.

Пришлось разместить тему на другом форуме и никаких вопросов не возникло - профи все прекрасно понял и просто дописал то, что я не умею.

В принципе, мне импонирует Ваш академизм, но время требует действий и конкретный результат ценнее всего. По крайней мере, для меня. А после Ваших консультаций, как правило, проблем становится больше, а до цели - дальше. Хотя вцелом Вы правы.

  Ответить  
 
 автор: confirm   (01.08.2013 в 01:10)   письмо автору
 
   для: Владимир55   (01.08.2013 в 00:22)
 

Потому у вас и нет корзины, так как изначально вы не решаете эту задачу, а пытаетесь решить разрозненные куски или даже локальные кусочки. А так задачи не решают.

Что такое в вашем примере таблица - это описание товаров на странице, которые и добавляются в базу? Почему таблица, ведь товары на странице, это далеко не табличные данные? Представление товаров табличными данными имеет место быть только в полном представлении корзины, при ее редактировании. Если это как раз полное представление корзины (ее редактирование), то какие могут быть в ней картинки с кнопками, по которым в эту ячейку этой таблицы что-то должно добавляться? Редактирование корзины, это форма, и при каждом ее изменении нужно пересчитывать все, отдавать клиенту измененные данные по всем товарам.

Что тогда у вас в параграфах - это краткая корзина? Если да, то почему возвращаемое сервером должно отображаться не в них, а ячейке таблицы?

Добавление товара, причем сразу должно учитываться способ его добавления - по одному или произвольное число товара, редактирование корзины - изменение количества товара, удаление товара или группы выбранных товаров, полное очищение корзины, все это корзина, и значит это один скрипт обработчик. То есть не может быть никаких сообщений пользователю "скрипт не найден", хотя бы уже потому, что рядовой покупатель возможно даже не в курсе такого понятия как "скрипт". Адрес обращения ajax-запроса (имя скрипта) прописывается в его параметре, а не передается ему аргументом.

А что на данный момент времени требуют от сервера - добавить товар в корзину, удалить его из корзины, корректировать его величину..., все это определяется параметрами запроса. И данный параметр должен быть определен изначально, им может служить и значение id кнопки (span или div), например, id=add-10, из которого простой операцией замены дефиса на знак равно легко получить параметр запроса, по которому сервер будет знать, что нужно добавить в корзину товар с id равный 10.

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

Я не вижу у вас корзины, это просто какой-то набор, даже для теста совсем непонятный, то есть бессмысленный. Но если вы считаете, что проблема отобразить в ячейке таблицы, то это как раз не проблема. Не знаю в какой вам надо, но если это предыдущая от той в которой кнопка, то, нужно просто обратиться к предыдущему братскому элементу, вот пример:
function fn(e) {
    alert(e.previousSibling.innerHTML)
}
<p>aaa</p><p onclick="fn(this)">bbb</p>
Думаю, что пример красноречиво говорит - картинка в ссылке, которая в ячейке, это уже перебор, так как можно с успехом щелкнуть и просто по ячейке, которую можно оформить как душа пожелает. А лучше всего это список, это более разумное и выгодное решение для отображения товаров на странице, нежели таблица. И событие не стоит прописывать каждой кнопке, лучше делегировать его обработку их общему родителю.

Вот если в таком ключе решать задачу, что-то можно советовать или предлагать, в противном случае не понять чего вы в конечном итоге хотите.

  Ответить  
 
 автор: Владимир55   (01.08.2013 в 00:22)   письмо автору
 
   для: confirm   (31.07.2013 в 21:00)
 

Это не корзина, это перечень чего-то, что помещено во что-то.

Согласен, это верное замечание.
Собственно, и с другими замечаниями тоже согласен.

Но сейчас стоит конкретная задача - вывести количество кликов по каждому товару в соответствующую строку таблицы.

Как я понимаю, для этого нужно создать группу свойств на сервере типа

$dataProducts = '';
foreach($m_kol as $key => $val)  // Обход массива 
    { 
      $dataProducts .= "<br />Номер товара $key Количество $val " ; 
      $countProducts = isset($countProducts) ? $countProducts + $val : 0; 
   }  

echo json_encode(array('data'=>$dataProducts, 'count'=>$countsProducts));


А на клиенте в функции приема ответа декодировать JSON и получить объект с двумя свойствами. Одно поставить в див с текстом, а другое в див с количеством. А может быть, и одного хватит. В общем, что-то в этом роде.

К сожалению, реализовать не получается.

  Ответить  
 
 автор: confirm   (31.07.2013 в 21:00)   письмо автору
 
   для: Владимир55   (31.07.2013 в 18:02)
 

Это не корзина, это перечень чего-то, что помещено во что-то. Корзина же, это механизм, причем реализующий различные операции над товарами в корзине, чего у вас нет. А если этого нет, то значит и суждение, что "на самом деле надо выводить только $val (количество)" ошибочно.
И зачем отправлять в обработчик в качестве аргумента имя скрипта, у вас что их куча?

<a href="#" onClick="startAjax('basket.php?id=5');"><img alt="" src="2.jpg" /></a>

А не выгоднее ли span или div со стилями, включая изображение кнопки в качестве фона, да и вообще не грузить такую мелочь, а "вшить" эти данные в файл стиля?

  Ответить  
 
 автор: Владимир55   (31.07.2013 в 18:02)   письмо автору
 
 

Попытался самостоятельно сделать простейшую Корзину http://wowa55.pz9.ru/testsearch/42.html (коды ниже). Здесь по клику на изображение Корзины должно увеличиваться количество товара в ней и показываться суммарное количество отобранного товара (около Большой Корзины).

Эта страница показывает результаты поиска товара по базе, поэтому количество строк в ней может быть разным и я понимаю, что это важно. Но в данный момент, для настроки связи с сервером и отладки работы Корзины, я использую простой HTML файл, являющийся слепком с РНР скрипта, взаимодействующего с базой (для простоты).

В приципе, все работает и обмен с сервером происходит нормально. Но здесь номер товара и количество я вывожу просто для того, чтобы видеть, что обмен с сервером идет. А на самом деле надо выводить только $val (количество), причем непосредственно в самой ячейке таблицы.

И вот это сделать как раз не удается!
Как решить эту проблему?

Страница 42.html
<?php session_start(); ?><!DOCTYPE html>  

<html lang="ru-RU">  
   <head>  
   <meta charset="utf-8" />  
   <link rel="stylesheet" type="text/css" href="style.css" />  
   <title>Проба</title>
   <script type="text/javascript">
function startAjax(url){
  var request;
  if(window.XMLHttpRequest){
      request = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      request = new ActiveXObject("Microsoft.XMLHTTP");  
  } else {
      return;
  }
 
  request.onreadystatechange = function(){
        switch (request.readyState) {

          case 4:{
           if(request.status==200){    
                        document.getElementById("printResult").innerHTML = "<b>"+request.responseText+"</b>";
                     }else if(request.status==404){
                        alert("Ошибка: запрашиваемый скрипт не найден!");
                     }
                      else alert("Ошибка: сервер вернул статус: "+ request.status);
           
            break
            }
        }      
    }
    request.open ('GET', url, true);
    request.send ('');
  }
  function print_console(text){
    document.getElementById("console").innerHTML += text;
  }
    </script>  
   </head>  

   <body>  

<div id="printResult"> &nbsp;</div> 


    <p align="center"><img border="0" src="1.jpg" width="200" height="162"></p>
    <p align="center">Товаров: 0</p>
    <p align="center">на сумму: 0 рублей</p>
 
    <div align="center">
    <table border="1" width="100%" style="border-collapse: collapse" id="table1" bordercolor="#000000">
        <tr>
            <td>Производитель</td>
            <td>Артикул</td>
            <td>Название</td>
            <td>Количество</td>
            <td>Цена</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>Virgin Connect</td>
            <td>155578417-vc</td>
            <td>Торговая стратегия "Тетраэдр"</td>
            <td>2</td>
            <td>20390</td>
            <td><a href="#" onClick="startAjax('basket.php?id=1');"><img alt="" src="2.jpg" /></a>           
           </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>Virgin Connect</td>
            <td>1728173698-vc</td>
            <td>Торговая стратегия "Oval-five"</td>
            <td>4</td>
            <td>18250</td>
            <td><a href="#" onClick="startAjax('basket.php?id=2');"><img alt="" src="2.jpg" /></a>           
           </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>Virgin Connect</td>
            <td>93659187-vc</td>
            <td>Торговая стратегия "Синус"</td>
            <td>10</td>
            <td>24060</td>
            <td><a href="#" onClick="startAjax('basket.php?id=3');"><img alt="" src="2.jpg" /></a>           
           </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>Virgin corporation</td>
            <td>356221377-vc</td>
            <td>Торговая стратегия "Парабола"</td>
            <td>3</td>
            <td>99000</td>
            <td><a href="#" onClick="startAjax('basket.php?id=4');"><img alt="" src="2.jpg" /></a>           
           </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>Virgin Connect</td>
            <td>300087491-vc</td>
            <td>Торговая стратегия "Express"</td>
            <td>11</td>
            <td>38200</td>
            <td><a href="#" onClick="startAjax('basket.php?id=5');"><img alt="" src="2.jpg" /></a>           
           </td>
            <td>&nbsp;</td>
        </tr>
     </table>
    <p>&nbsp;</p>



</body> 
</html> 



Серверный файл basket.php
<?php

    session_start
();

    
$n_sum $_SESSION['n_sum'];
    
$n_sum++;
    
$_SESSION['n_sum'] = $n_sum;
    echo 
"<br />Всего  " $n_sum ;

    
$m_kol $_SESSION['m_kol'];

    
$id $_GET['id'];

    
$m_kol[$id]++;
    
$_SESSION['m_kol'] = $m_kol;

    foreach(
$m_kol as $key => $val)  // Обход массива
    
{
        echo 
"<br />Номер товара $key Количество $val " ;
    }

  Ответить  

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования