Как я могу заполнить простую корзину покупок из двух баз данных MySQL? - PullRequest
0 голосов
/ 22 июля 2011

Я разрабатываю простую корзину покупок PHP, и в целом она идет хорошо. Трудность, с которой я сталкиваюсь, заключается в том, что я могу получить данные из двух отдельных баз данных, чтобы заполнить поля корзины покупок (цена за единицу, название, количество и т. Д.).

Вот функция showCart:

function showCart() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
    $items = explode(',',$cart);
    $contents = array();
    foreach ($items as $item) {
        $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
    }
    $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
    $output[] = '<table>';
    foreach ($contents as $id=>$qty) {

        $sql = 'SELECT * FROM table_name WHERE id ='. $id;
        $result = $db->query($sql);
        $row = $result->fetch();
        extract($row);
        $output[] = '<tr>';
        $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>';
        $output[] = '<td>'.$product_name.' by '.$country.'</td>';
        $output[] = '<td>&#36;'.$price.'</td>';
        $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
        $output[] = '<td>&#36;'.($price * $qty).'</td>';
        $total += $price * $qty;
        $output[] = '</tr>';
    }
    $output[] = '</table>';
    $output[] = '<p>Grand total: <strong>&#36;'.$total.'</strong></p>';
    $output[] = '<div><button type="submit">Update cart</button></div>';
    $output[] = '</form>';
} else {
    $output[] = '<p>You shopping cart is empty.</p>';
}
return join('',$output);
}

Корзина работает нормально, как показано выше. Вы можете видеть, что я взял идентификатор, цену, название продукта и несколько других битов из таблицы базы данных MySQL. Теперь я хотел бы, чтобы цена исходила из другой таблицы базы данных. Для этого я попробовал следующее ...

Сначала я создал новое соединение, которое получит значение цены после (Get_Price.php):

include 'connect.php';

$actual_price='_POST['new_price']';

$offer_price = mysql_connect("$host", "$username", "$password") or die ("Unable to connect to server");
mysql_select_db("$database", $offer_price) or die ("Unable to select database");

$get_value=mysql_query("SELECT * FROM offers WHERE actual_price = '$actual_price'");

$value_rslt = $db->query($get_value);
        $vlu_row = $value_rslt->fetch();
        extract($vlu_row);

        $vlu_otp[] = '<td>&#36;'.$special_offer.'</td>';
        $vlu_otp[] = '<td><input type="text" name="qty'.$unique_id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
        $vlu_otp[] = '<td>&#36;'.($special_offer * $qty).'</td>';
        $total += $special_offer * $qty;
        $vlu_otp[] = '</tr>';

Тогда я использовал этот вызов:

        include 'Get_Price.php';

в качестве замены в исходном коде:

    function showCart() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
    $items = explode(',',$cart);
    $contents = array();
    foreach ($items as $item) {
        $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
    }
    $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
    $output[] = '<table>';
    foreach ($contents as $id=>$qty) {

        $sql = 'SELECT * FROM table_name WHERE id ='. $id;
        $result = $db->query($sql);
        $row = $result->fetch();
        extract($row);
        $output[] = '<tr>';
        $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>';
        $output[] = '<td>'.$product_name.' by '.$country.'</td>';

        $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';

        include 'Get_Price.php';
} else {
    $output[] = '<p>You shopping cart is empty.</p>';
}
return join('',$output);
}

Это породило кучу ошибок и отбросило все значения. Какое решение?

1 Ответ

0 голосов
/ 22 июля 2011

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

Если нет, посмотрите на Get_Price.php.Вы пытаетесь подключиться ко второй базе данных и использовать для нее переменную $offer_price.Но когда вы выполняете запрос ко второй базе данных, вы используете $db->query($get_value);, который фактически будет работать с первой базой данных.

Решение: Создайте два соединения с базой данных в connect.php - что-то вроде $db_cartи $db_price.Затем действуйте, как обычно, используя соответствующее соединение.Остальная часть вашего кода выглядит нормально.

...