mysql — уменьшение стоимости независимой записи на 1

В настоящее время я делаю школьный проект, и я использую Dreamweaver вместе с базой данных с помощью phpMyAdmin.

Теперь, что мне нужно сделать, так это, когда я нажму кнопку, это уменьшит значение столбца акций в таблице «products» на 1.

Однако в таблице представлены разные продукты. Показано ниже:

http://i.stack.imgur.com/vLZXQ.png

Допустим, пользователь находится на странице игры для «Destiny» и нажимает кнопку «Купить сейчас», как я могу сделать так, чтобы уровень запасов уменьшился на единицу, но только для записи Судьбы и не для FIFA 15 столбца. Таким образом, акции Destiny становятся 49, а Fifa остается 50. Мне просто нужно, чтобы у каждой кнопки был свой скрипт или?

В настоящее время я создал кнопку на странице, которая ссылается на скрипт действия, но я не уверен, какой код я буду использовать.

Спасибо

0

Решение

xNeyte дает вам несколько полезных советов, но мне кажется, что вы — Xrin — совершенно не знакомы с программированием содержимого базы данных с помощью PHP или аналогичного?

Итак, некоторые пошаговые инструкции:

Базы данных MYSQL должны быть связаны с одним из двух типов подключения — PDO а также MySQLi_ . Базы данных MySQL также всегда будут работать с использованием собственного MySQL, но, как уже упоминалось, xNeyte — это устарело и крайне обескуражен .

Так что у вас есть, вы передаете свою информацию на страницу PHP, так что ваш список игр на index.php и ваша рабочая страница, которая обновит количество заказанных игр, будет update.php, в этом примере.

Файл Index.php проходит по якорной ссылке и $_GET значения (хотя я настоятельно рекомендую использовать php FORM и $_POST в качестве лучшей альтернативы) на страницу update.php, на которой необходимо выполнить следующие действия (примерно в таком порядке):

update.php

  • Загрузите действительное подключение для входа в базу данных, чтобы страница могла взаимодействовать с базой данных.

  • Возьмите значения, переданные с исходной страницы, и убедитесь, что они действительны.

  • установить соединение с базой данных и скорректировать значения по мере необходимости.

  • установить обновление выше работало, а затем дать пользователю некоторую обратную связь

Итак, шаг за шагом мы пройдемся по этим частям:
Я собираюсь испытать боль и использовать MySQLi, а не PDO — xNeyte использовал синтаксис PDO в своем ответе вам, и это полностью правильно и лучше, чем MySQLi, ради ясности и вашего знания родного MySQL, это может быть проще чтобы увидеть / понять, что происходит с MySQLi.

Часть 1:

Подключение к базе данных.
Это должно быть сделано с помощью Object Orientated — Classes,

class database {
private $dbUser = "";
private $dbPass = "";  //populate these with your values
private $dbName = "";
public $dbLink;
public function __construct() {
$this->dbLink = new mysqli("localhost", $this->dbUser, $this->dbPass, $this->dbName);
}
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}

if ( ! $this->dbLink )
{
die("Connection Error (" . mysqli_connect_errno() . ") ". mysqli_connect_error());
mysqli_close($this->dbLink);
}
else
{
$this->dbLink->set_charset("UTF-8");
}
return true;
} //end __construct
} //end class

Весь приведенный выше блок кода должен находиться в database.php на который ссылается xNeyte — это класс, который вы вызываете для взаимодействия с базой данных.

Таким образом, используя приведенный выше код в database.php объект, вам нужно вызвать объект базы данных в верхней части вашего кода, а затем вам нужно сгенерировать экземпляр вашего класса:

include "database.php"; ////include file
$dataBase = new database(); ///create new instance of class.

Сейчас Когда ты пишешь $dataBase->dbLink это соединение с базой данных. Если вы не знаете, что ваше соединение с базой данных использует детали, которые использует PHPMyAdmin, оно выполняет свои задачи точно так же.

Тааак

Часть 2:

То есть соединение с вашей базой данных установлено — теперь вам нужно запустить обновление: во-первых, вам нужно проверить, что данное значение действительно:

if (is_numeric($_GET['id']) && $_GET['id'] >0 ){
$id = (int)$_GET['id'];
}

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

Это также хорошая идея никогда не подключать напрямую GET а также POST значения в ваши операторы SQL. Поэтому я скопировал значение в $id

Часть 3:

$sql = "UPDATE <TABLE> SET STOCK = STOCK-1 WHERE Product_ID = ? LIMIT 1";

Имя таблицы — это имя вашей таблицы, LIMIT 1 просто гарантирует, что это работает только на одном ряду, так что это не повлияет на слишком большое количество игр.

Это выше SQL, но как заставить это работать в PHP:

во-первых, заявление должно быть подготовлено, затем, когда оно подготовлено, значения добавляются в ? части (это синтаксис MySQLi, PDO имеет более полезный :name синтаксис).

Так:

    include "database.php"; ////include file
$dataBase = new database(); ///create new instance of class.
if (is_numeric($_GET['id']) && $_GET['id'] >0 ){
$id = (int)$_GET['id'];
$sql = "UPDATE <TABLE> SET STOCK = STOCK-1 WHERE Product_id = ? LIMIT 1";
$update = $dataBase->dbLink->prepare($sql);
$update->bind_param("i",$id);
$update->execute();
$counter = $update->affected_rows;
$update->close();
//////gap for later work, see below:

}
else
{
print "Sorry nothing to update";
}

Здесь, вероятно, происходит довольно много, прежде всего bind_param Метод устанавливает значения для вставки в SQL-запрос, заменяя ? со значением $id, i указывает, что это должно быть целое число значение. Посмотри пожалуйста http://php.net/manual/en/mysqli-stmt.bind-param.php

$counter Значение просто возвращает количество затронутых строк, а затем может быть вставлено что-то вроде этого:

if ($counter > 0 ){
print "Thank you for your order. Stock has been reduced accordingly.";
}
else {
print "Sorry we could not stock your order.";
}

Часть 4

И, наконец, если хотите, вы можете просто вывести печатные сообщения, или я склонен помещать сообщения в СЕССИЮ, а затем перенаправить страницу PHP обратно.

Надеюсь, это немного помогло. Я очень рекомендую, если вы не привыкли к взаимодействию с базой данных таким образом, либо используйте PDO или же MySQLi но не объединяйте их, это вызовет всевозможные синтаксические ошибки. Использование MySQLi означает, что все, что вы знаете, может сделать MySQL, лучше с добавлением буквы «я«в вызове функции. Это также очень хорошо для ссылки на Руководство по PHP.net, в котором есть отличные четкие подробные примеры того, как использовать каждую функцию PHP.

1

Другие решения

Лучше всего установить ссылку на каждую кнопку с идентификатором вашей игры (1 для судьбы, 2 для Fifa15).

Тогда ваш скрипт, который пользователь запустит, нажав:

<?php

include('database.php'); // your database connection

if($_GET['id']) {
$id=$_GET['id'];
} else throw new Exception('Invalid parameter');

$statement = myPDO::getInstance->prepare(<<<SQL
UPDATE TABLE
SET STOCK = STOCK-1
WHERE Product_id = :id
SQL
);

$statement->execute(array(":id" => $id));

Этот скрипт сделает работу

0

По вопросам рекламы [email protected]