Web-мастер: курс молодого бойца

php mysql ajax корзина

   

 Добавлено 2011-06-01 02:03:58



Сообщений: 2
Зарегистрирован: 01.06.2011

Цитировать
Буду благодарен за помощь.
Необходимо создать упрощенную корзину покупок.

Далее показано то что есть на даннный момент.
Есть база, одна таблица tov, два столбца id, name, код показывать нет смысла, все просто.
файл index.php:

<?php
      session_start
(); 
    require_once(
"const.php");
    
mysql_connect($dbhost,$dbuser,$dbpass) or die("Не могу соединитться с сервером");
    
mysql_select_db($dbname) or die("Не могу подключить базу");     
?>

<!DOCTYPE HTML>
<html lang="en-US">
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title></title>
    
</head>
<body>
<a href="cart.php">Корзина</a><br>

<?     
  $sql
='select * from tov'
  
$rez=mysql_query($sql);
  
  while 
            (
$line=mysql_fetch_array($rez))        
            {  
                    
$q $line['name'];    
                    echo 
$q;

?>
                    <script type="text/javascript">a=<? echo $line['id']; ?>;</script>
                    <script type="text/javascript">
                    var ajax=null;
                    
                    function getAjax()
                    {
                        if (window.ActiveXObject)
                            return new ActiveXObject("Microsoft.XMLHTTP");
                        else if (window.XMLHttpRequest)
                            return new XMLHttpRequest();
                        else
                        {
                            alert("Ваш браузер не поддерживает‚ AJAX.");
                            return null;
                        }
                    }

                    function ajaxFunction()
                    {
                        ajax=getAjax();
                        var param;
                        if (ajax != null)
                        {
                            ajax.open("POST","get.php",true);
                           
                            param="in="+encodeURI(document.getElementById(a).value);
                            ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
                            ajax.setRequestHeader("Content-length", param.length);
                            ajax.setRequestHeader("Connection", "close");
                    
                            ajax.onreadystatechange = function()
                            {
                                if(ajax.readyState==4 && ajax.status==200)
                                {
                                    document.getElementById('out').innerHTML=ajax.responseText;
                                }
                            }
                            ajax.send(param);
                        }
                    }
                    </script>
                    <form name="myform">
                    <? echo("<input id=".$line['id']." type=text value=".$line["id"].">"); ?>
              
                    <input type="button" value="В корзину" onclick="ajaxFunction();" /><br><br>
                    </form>
<?
             
}
?>

</body>
</html>

Запросом из базы выводит название и id товара, id помещается в форму, чтобы отправить для дальнейшей обработки.
Как видно яваскрипт не в отдельном файле, иначе не работает вообще.

Далее
Файл get.php
<?php
    session_start
(); 
    require_once(
"const.php");
    
mysql_connect($dbhost,$dbuser,$dbpass) or die("Не могу соединитться с сервером");
    
mysql_select_db($dbname) or die("Не могу подключить базу");     
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<?php
if (isset($_POST['in'])) 
$arr = array();
$_SESSION['arr'][] = $_POST['in'];
if (isset(
$_SESSION['arr']) && $_SESSION['arr'] != ""
            {
              foreach (
$_SESSION['arr'] as $id=>$value)
                {
                       
$query mysql_query("select * from tov where id='".$value."'");            
                       
$num mysql_num_rows ($query); 
                       
$armysql_fetch_array ($query);
                       echo 
"<p>" .$ar['name']. "</p>"
                 }
             }
?>

Тут запрос в базу по тому самому id который должен придти с index.php, создание массива и запись его в сессию, ну создание переменной для отображения ее в корзине.

И файл корзины cart.php
<?
session_start
(); 
?>
<!DOCTYPE HTML>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="js/ajax.js"></script>
</head>
<body>
<a href="index.php">Магазин</a>
          <? include ("get.php") ;
               echo 
$q ;
            
?>  
        <p id="out"></p>
    </form>
</body>
</html>

Тут просто инклуд для отображения переменной с именем.

Дак вот проблема заключается в том что с index.php id шлется последний, то есть, есть 4 записи в базе, значит 4 товара, следовательно id=1, id=2, id=3, id=4 по нажатию на любую кнопку из 4х форм, отправляется только 4я, то есть шлется только последний id.

Необходимо чтобы этот параметр получал тот id который находится в форме с той кнопкой которую пользователь нажимает
param="in="+encodeURI(document.getElementById(a).value);
Или у вас профессионалов есть свое мнение на реализацию этого.

Зранее пардон, я новичек, был бы не новичек наверное бы не спрашивал.

Так же если что то не понятно спросите я поясню, но только окажите помощь.
Спасибо


-
Наверх  Посмотреть профиль   Сайт автора Отредактировано модератором evgenijj 01.06.2011

 Добавлено 2011-06-01 16:39:37
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
Цитата
Дак вот проблема заключается в том что с index.php id шлется последний, то есть, есть 4 записи в базе, значит 4 товара, следовательно id=1, id=2, id=3, id=4 по нажатию на любую кнопку из 4х форм, отправляется только 4я, то есть шлется только последний id.
Все правильно - если выводится список из четырех товаров, то в результате будем иметь
<script type="text/javascript">a=1;</script>
<script type="text/javascript">
var ajax=null;
function getAjax() { ... }
.....
</script>
.....
<script type="text/javascript">a=2;</script>
<script type="text/javascript">
var ajax=null;
function getAjax() { ... }
.....
</script>
.....
<script type="text/javascript">a=3;</script>
<script type="text/javascript">
var ajax=null;
function getAjax() { ... }
.....
</script>
.....
<script type="text/javascript">a=4;</script>
<script type="text/javascript">
var ajax=null;
function getAjax() { ... }
.....
</script>
Фактически, мы имеем код
a=1;
a=2;
a=3;
a=4;
И чему равна переменная a? При нажатии любой кнопки "В корзину" мы добавим в корзину товар с id=4.

P.S. Удивительно, как это вообще работает - функции getAjax() и ajaxFunction() заданы четыре раза. В PHP в таком случае выдал бы ошибку Cannot redeclare function (не могу переопределить функцию, которая была определена ранее). JS такое прощает и даже пытается что-то сделать.


Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 01.06.2011

 Добавлено 2011-06-01 17:15:47


Цитировать
Переменную а приравнял к $line['id'], пытаясь передать ее сюда param="in="+encodeURI(document.getElementById(a).value);
, а то что это все дело в цикле хотел чтобы переменная отправлялась та, которая находится с соответствующей формой.
Повторю, что в цикл все засунул из-за безвыходности, в отлельном файле или в хеде ниче не работало, ниче не отправлялось ниче не возвращалось.
Если есть какой то вариант как можно это дело исправить, то поделитесь.
Наверх Незарегистрированный пользователь  

 Добавлено 2011-06-01 17:51:42



Сообщений: 2
Зарегистрирован: 01.06.2011

Цитировать
Проблему решил.

Измененные строчки
<input type="button" value="В корзину" onclick="var id= document.getElementById('<?php echo $id;?>').value; ajaxFunction(id);" />

В JS
function ajaxFunction(id)
param="in="+encodeURI(id);

А вот это удалить

 <script type="text/javascript">a=<? echo $line['id']; ?>;</script>

Сам скрипт можно вынести в отдельный файл или в хед поместить, это кому как нравится.

Данный способ наиболее подходит для создания корзины на php и mysql, с использованием технологии ajax для новичков, а так же и опытным программистам. Этот способ прост и гибок.


-
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 01.06.2011

 Добавлено 2019-07-09 09:35:27


Цитировать
Хотел спросить про программу,где <a href=http://offeramazon.ru/2019/07/03/хрумер-антиспам/>скачать софт</a>
для добавления друзей в Facebook?
Наверх Незарегистрированный пользователь  
   
Быстрый ответ
 
Цвет шрифта: Закрыть все теги
Сообщение
Защитный код