• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[PHP, MySQL] Wykonanie operacji na dwoch tabelach

Object Storage Arubacloud
0 głosów
266 wizyt
pytanie zadane 1 kwietnia 2021 w PHP przez niezalogowany

Witam mam utworzone dwie tabele użytkownicy, produkty.

W użytkownikach mam kolumny Portfel i iloscProduktu.

W produkty mam kolumny cenaProduktu i IloscProduktu

Chciałbym zrobić zapytanie takie że gdy mam np w portfelu okresloną wartość np. 200 to od tej wartości chciałbym odjąc wartość która jest w kolumnie cenaProduktu 10 i gdy to się wykona to w tym samym zapytaniu chciałbym żeby się wykonało również to żeby  iloscProduktu jaką ma użytkownik 0 dodała wartośc taką jaką ma IloscProduktu w produktach 1

Czy musiałbym w tym przypadku skorzystać z metody update czy jest jakaś inna metoda ? 

Pozdrawiam 

1 odpowiedź

0 głosów
odpowiedź 1 kwietnia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)


Bez updatu danych się nie obejdzie. Rozumiem, że z formularza pobierasz do skryptu PHP liczbę produktów zamówionych przez usera. Po sprawdzeniu, czy ma dostateczne zasoby gotówki robisz update tabeli usera (zakładam, że zamówił 1 sztukę):

UPDATE uzytkownik 
  SET Portfel = Portfel-produkty.CenaProduktu, iloscProduktu = iloscProduktu+1;

 

komentarz 1 kwietnia 2021 przez niezalogowany
Dziękuję za pomoc a mam pytanie w jaki sposób mógłbym zrobić update jeżeli bym miał iloscProduktu np 4 i więcej być już by nie było mogło być

Pozdrawiam
komentarz 1 kwietnia 2021 przez niezalogowany
Tzn że nie musiał bym wpisywać na końcu 4 tylko aby zapytanie wiedziało że do 4 i koniec
komentarz 1 kwietnia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

Najpierw pobierasz ilość produktów z tabeli produkty i prezentujesz userowi, ile może maksymalnie zamówić. User wybiera i wysyła zamówienie. Sprawdzasz, czy user ma wystarczająco gotówki na wybrane produkty. Jeżeli tak to updatujesz jego tabelę (np. zamówił 4 sztuki):

UPDATE uzytkownik 
  SET Portfel = Portfel-4*produkty.CenaProduktu, iloscProduktu = iloscProduktu+4;

Oczywiście zamiast 4 będziesz miał zmienną przechowująca ilość produktów. Najlepiej pokaż kod aplikacji.

komentarz 1 kwietnia 2021 przez niezalogowany
Formularz 
<div class="row">
		<?php if(!empty($params['Product'])): ?>
		<?php $product = $params['Product'];?>
		<div class="col-12" id="Main">
		<h1 class="mb-2 font-weight-light text-uppercase">Kup Produkt</h1>
            <form class="login-form text-center" action="/?action=ProductBuy" method="post">
				<input name="id" type="hidden" value="<?php echo $product['id'] ?>"/>
			<div class="form-group">
				 <h3 style="text-transform: uppercase;">Produkt: <?php echo $product['NazwaProduktu'] ?></h3>
			</div>
			<div class="form-group">
				 <h4 style="text-transform: uppercase;">Wartosc Produktu: <?php echo $product['CenaProduktu'] ?> zł </h4>
			</div>
			<div class="form-group">
				 <h5 style="text-transform: uppercase;">Ilosc Sztuk dostępnych <?php echo $product['IloscProduktu'] ?> szt</h5>
			<div class="form-group">
				<input type="number" class="form-control  form-control-lg" placeholder="Ile sztuk potrzebujesz ?" name="iloscProduktu">
			</div>
		 <div class="form-group">
         <input type="submit" value="Kup" class="btn-block mt-3 btn-lg text-uppercase" id="przyciskDoLogowania" name="ZapiszDane"/>
		 </div>
	  </div>
     </form>
	 <?php else: ?>
		<div>	
			Brak danych do wyświetlenia
			<a href="/"><button>Powrót do listy produktów</button></a>
		</div>
	 <?php endif; ?>
</div>
Obsługa wysyłania oraz wygląd  
public function ProductBuyAction(): void 
    {
        if($this->request->isHasPost())
        {
          $productId = (int) $this->request->postIndex('id');
          $ProductData = [
              'iloscProduktu' => $this->request->postIndex('iloscProduktu'),
          ];
          $this->database->buyProduct($productId, $ProductData);
          $this->userRedirection('/', ['before' => 'buy']);
        }
  
        
        $this->view->displaytwo( // Wyświtlanie edytowania notatki
            'ProductBuy',
              ['Product' => $this->getProduct()] 
          );
    }
Wykonanie skryptu dopiero zaczełem kombinować
public function buyProduct(int $id, array $date): void 
    {
        try
        {
            $iloscProduktu = $this->conn->quote($date['iloscProduktu']);
            $query = "UPDATE uzytkownicy, Portfel SET Portfel-produkty.CenaProduktu, iloscProduktu=$iloscProduktu+1";
            $this->conn->exec($query);
        } catch (Throwable $e) {
            debug($e);
            throw new StorageException('Nie udało się kupić produktu', 400, $e);
        }
    }

 

komentarz 7 kwietnia 2021 przez niezalogowany

@SzkolnyAdmin

Witam mam pytanie bo mam zrobiony formularz w którym wpisuję iloscProduktu np. 4 i chciałbym zrobić tak aby właśnie sprawdzał czy użytkownik ma wystarczającą ilość gotówki gdy wpiszę odpowiednią iloscProduktu tabela jak powyżej 

tutaj jest mój kod który wykonuje działanie kodu udało mi się jedynie zrobić sprawdzanie ilosciProduktów czy jest wystarczająca w bazie Pozdrawiam

public function buyProduct(int $id, array $date): void 
    {
        $iloscProduktu = $this->conn->quote($date['iloscProduktu']);
        $query = "SELECT IloscProduktu, cenaProduktu FROM produkty WHERE produkty.id = $id"; 
        $results = $this->conn->query($query, PDO::FETCH_ASSOC);  
        $results =  $results->fetch(PDO::FETCH_ASSOC);
        $query = "SELECT Portfel FROM uzytkownicy WHERE id = $id"; 
        $result = $this->conn->query($query, PDO::FETCH_ASSOC);
        $result = $result->fetch(PDO::FETCH_ASSOC);
        if($_POST['iloscProduktu'] > $results['IloscProduktu']) 
        {
            $_SESSION['product_results'] = true; 
            header("Location: /?action=ProductBuy&id=$id");
            exit();
        }
        else
        {
            $query = "UPDATE uzytkownicy, produkty SET uzytkownicy.Portfel = uzytkownicy.Portfel - $iloscProduktu * produkty.CenaProduktu, uzytkownicy.iloscProduktu = uzytkownicy.iloscProduktu + $iloscProduktu WHERE produkty.id = $id";
            $this->conn->exec($query);
        }
        // $_SESSION['product_money'] = true; 
        // header("Location: /?action=ProductBuy&id=$id");
        // exit();
    }
komentarz 7 kwietnia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Sprawdź czy IloscProduktu*Cena nie przekracza zawartości portfela usera.
komentarz 7 kwietnia 2021 przez niezalogowany
else if($_POST['iloscProduktu'] * $results['cenaProduktu'] > $result['Portfel']) mam tak zrobione ale nie działa
komentarz 7 kwietnia 2021 przez niezalogowany
Dobra wiem gdzie mam błąd dzięki

Podobne pytania

0 głosów
2 odpowiedzi 313 wizyt
0 głosów
0 odpowiedzi 305 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 213 wizyt
pytanie zadane 24 marca 2016 w PHP przez Dzistu Nowicjusz (120 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...