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

PHP - dodawanie wartości przy pomocy przycisku

Object Storage Arubacloud
0 głosów
1,290 wizyt
pytanie zadane 30 września 2019 w PHP przez SalyWan Nowicjusz (140 p.)
Cześć wszystkim!

Mam problem polegający na tym iż mam zmienną przechowującą wartość. (np $hp=100;) Chciałbym przy pomocy przycisku dodać do tej wartości zmiennej daną liczbę. Niestety nie mogę znaleźć niczego w internecie i dlatego proszę o pomoc. Zasada działania miałaby być taka że mam np tabelkę z wartościami i po naciśnięciu przycisku odświeża się tylko liczba. Np mam 100 naciskam przycisk i pokazuje się 120.

Drugim moim pytaniem jest natomiast to czy da się przyciskowi nadać jakieś indywidualne id żebym mógł go potem na przykład wywołać w jakimś if-ie? Jeżeli tak to jak wygląda struktura tego przycisku.

Z góry dziękuję :)

1 odpowiedź

+1 głos
odpowiedź 30 września 2019 przez Chess Szeryf (76,710 p.)
edycja 30 września 2019 przez Chess

Jeśli nie chciałbyś tego napisać wyłącznie na PHP, to zostaje np. jeszcze Ajax lub inne techonologie, które spowodują, że strona nie będzie musiała się przeładowywać.

button:hover {
  background: lightgreen;
}
<body style="background: darkgoldenrod;">

<form method="get" action="">
  <button name="p_m" value="1">-20</button>
  <button name="p_m" value="2">+20</button>
</form>

Z wykorzystaniem sesji.

<?php
session_start();

$points = 100;

$p_m = $_GET['p_m'] ?? 0;

if(!isset($_SESSION['points'])) {
  $_SESSION['points'] = $points;
} else {
  if($p_m == 1) {
    $_SESSION['points'] -= 20;
  } else if($p_m == 2) {
   $_SESSION['points'] += 20;
  }
}

if(isset($_SESSION['points'])) {
  echo $_SESSION['points'];
}
?>

Z wykorzystaniem pliku.

<?php
$p_m = $_GET['p_m'] ?? 0;

$points = 0;

if($p_m == 1) {
  $points = -20;
} else if($p_m == 2) {
  $points = +20;
}

if(file_exists("scores.txt")) {
  file_put_contents("scores.txt", file_get_contents("scores.txt") + $points);
} else {
  $points = 0;
  file_put_contents("scores.txt", $points);
}


if(file_exists("scores.txt")) {
  echo file_get_contents("scores.txt");
}
?>

Z wykorzystaniem ciasteczek.

<?php
$p_m = $_GET['p_m'] ?? 0;

$points = 0;

if($p_m == 1) {
  $points = -20;
} else if ($p_m == 2) {
  $points = +20;
}

if(!isset($_COOKIE['scores'])) {
  setcookie("scores", 0);
} else {
  setcookie("scores", $_COOKIE['scores'] + $points);
}

if(isset($_COOKIE['scores'])) {
  echo $_COOKIE['scores'];
}

if($_SERVER['QUERY_STRING']=='p_m=1') {
  header('Location: http://127.0.0.1:8000/get1.php/?accepted_p_m=1');
} else if($_SERVER['QUERY_STRING']=='p_m=2') {
  header('Location: http://127.0.0.1:8000/get1.php/?accepted_p_m=2');
}
?>

Nie wiem, czy da się to inaczej napisać bez przeładowywania strony, chodzi o te header(...). Jeśli nie byłoby header w kodzie, to po naciśnięciu kilka razy pod rząd tylko +20 wszystko byłoby OK, ale gdy nagle zmienilibyśmy na -20, to wtedy ukazałaby się nie aktualna wartość. Możliwe, że da się to lepiej napisać niż przekierowując stronę.

Z wykorzystaniem bazy danych.

<?php
$p_m = $_GET['p_m'] ?? 0;


$points = 0;

if($p_m == 1) {
  $points = -20;
} else if($p_m == 2) {
  $points = +20;
}

$mysql = new mysqli('localhost', 'root', 'mystrongpass', 'sc');

$query = 'SELECT points  FROM scores where id = 1;';


if($mysql->query($query)->num_rows != 1) {
  $mysql->query('INSERT INTO scores VALUES (null, 0)');
} else {
  $mysql->query('UPDATE scores SET points = points + ' . $points);
}


echo $mysql->query($query)->fetch_row()[0];
?>

Jeśli chciałbyś skorzystać z tej opcji, to możesz kod przepisać na PDO.

</body>

Jak już powyżej wspomniałem. Do dynamicznego generowania/modyfikowania wartości z HTML potrzebowałbyś innych technologii jak np. JavaScript, czy czegoś co pozwoli na zaaktualizowanie kontentu bez przeładowania strony. Jednak, z tego, co opisałeś niemożliwe jest odwołanie się do elementu poprzez backend w stylu document.getElementById('my_id').... Do tego musisz skomunikować się z frontendem innej opcji nie ma. Gdyby taka opcja była, to wtedy język nie byłby backendem, a frontendem. Ewentualnie byłby językiem all-in-one - wszystko w jednym, czyli przemieszany frontend z backendem. Nie będę nadmieniał o parsowaniu elementów DOM np. z pliku, ponieważ to jest zupełnie coś innego niż taka dynamiczna modyfikacja.

komentarz 1 października 2019 przez SalyWan Nowicjusz (140 p.)

Dziękuję serdecznie za naprawdę wyczerpującą odpowiedź. heart

Podobne pytania

0 głosów
2 odpowiedzi 231 wizyt
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 28 lipca 2016 w SQL, bazy danych przez Assasz Nałogowiec (30,460 p.)
0 głosów
0 odpowiedzi 92 wizyt

92,596 zapytań

141,445 odpowiedzi

319,717 komentarzy

61,980 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!

...