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

UPDATE PHP MYSQL aktualizowanie rekordów.

Object Storage Arubacloud
0 głosów
229 wizyt
pytanie zadane 18 sierpnia 2020 w PHP przez Kacperhehe Bywalec (2,930 p.)
    if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['roll']))
    {
        func();
    } else {
      unset($_POST['roll']);
    }
    function func()
    {
        $rol = rand(1,99998);
        echo $rol, number_format($num2)."\n"; 
        if ($rol > "500000") {
          $db = mysqli_connect($server, $user, $password, $dbapp);
          $sql = "UPDATE users SET points='9299' WHERE id = 1";
          mysqli_query($db, $sql);
          echo "sukces";
          unset($_POST['roll']);
        } else {
          echo "<50000";
          unset($_POST['roll']);
        }
    };

No co mam mówić nie działa, wcześniej zrobiłem jakoś że działało ale wywalił się program bez zapisu i nie mogę cofnąć ustawień.
Znaczy dokładniej nie działa mi dodanie rekordu do bazy danych.

3 odpowiedzi

0 głosów
odpowiedź 19 sierpnia 2020 przez HaKIM Szeryf (87,590 p.)
edycja 19 sierpnia 2020 przez HaKIM

Zamien nic nie warte

mysqli_query($db, $sql);
echo "sukces";

na:

if (mysqli_query($db, $sql) === TRUE) {
    echo 'success';
} else {
    printf("Error: %s\n", $mysqli->error);
}

unset($_POST['roll']);

 

Daj znac o wyjsciu (output) funkcji "func".

0 głosów
odpowiedź 19 sierpnia 2020 przez VBService Ekspert (253,300 p.)
edycja 19 sierpnia 2020 przez VBService

Pierwszy błąd:

$rol = rand(1,99998);
    echo $rol, number_format($num2)."\n"; 
    if ($rol > "500000") {

zmienna $rol jest liczbą a w warunku sprawdzasz string  if ($rol > "500000")  "500000"

$rol = rand(1,99998);
    echo $rol, number_format($num2)."\n"; 
    if ($rol > 500000) {

Drugi $rol = rand(1,99998); ten zapis nigdy nie spełni tego warunku:
 if ($rol > 500000) za dużo o jedno 0 "zero" winkwnioskując z zapisu poniżej:
 echo "<50000";
i skąd się wzięła zmienna $num2, number_format($num2), zmienna gobalna?

komentarz 19 sierpnia 2020 przez Kacperhehe Bywalec (2,930 p.)
Czy spełni warunek czy go nie spełni i tak nie nadpisuje mi rekordu
Co do $num2 jest to nie istotnę, testowałem coś.
komentarz 19 sierpnia 2020 przez VBService Ekspert (253,300 p.)
edycja 19 sierpnia 2020 przez VBService

Jak nie ma znaczenia czy się kiedykolwiek spełni warunek. surprise

UPDATE w Twoim kodzie zostaje "wywołany" gdy w zmiennej $rol znajdzie się liczba większa od 500000 if ($rol > 500000) w podanym przez Ciebie kodzie nigdy nie zostaje spełniony warunek, bo rand(1,99998) zwróci największą wartość to 99998, w dodatku rand  zwraca wartość typu intiger (liczbę), a ty porównujesz ją z wartością w cudzysłowach (typ string) więc jak może się wykonać kod między If a else

    $rol = rand(1,99998)!;
    ... 
    if ($rol > "500000"!) {
      $db = mysqli_connect($server, $user, $password, $dbapp);
      $sql = "UPDATE users SET points='9299' WHERE id = 1";
      mysqli_query($db, $sql);
      echo "sukces";
      unset($_POST['roll']);
    } else {
      ...
    }

Powiedzmy, że php z tym sobie poradzi i zwróci wartość true (niejawna konwersja typów), ale nie zmienia to faktu, że to jest zła praktyka programowania.

<?php
    $rol = 500001;
    echo $rol."\n"; 
    if ($rol > "500000") {
      echo "sukces";
    } else {
      echo "<50000";
    }
?>

Tu warunek zawsze będzie false

<?php
    $rol = 99998; // rand(1,99998)
    echo $rol."\n"; 
    if ($rol > "500000") {
      echo "sukces";
    } else {
      echo "<50000";
    }
?>

Tu jest jak za pomocą UPDATE ... SET  zwiększyć wartość (increase), która już jest zapisana o wartość z SET.
SQL how to increase or decrease one for a int column in one command

Można też używać "stałych", żeby zapobiec takim błędom: 

function func()
{
    const MAX_ROL = 50000;
    // define("MAX_ROL", 50000);

    $rol = rand(1,99998);
    echo $rol, number_format($num2)."\n"; 
    if ($rol > MAX_ROL) {
      $db = mysqli_connect($server, $user, $password, $dbapp);
      $sql = "UPDATE users SET points='9299' WHERE id = 1";
      mysqli_query($db, $sql);
      echo "sukces";
      unset($_POST['roll']);
    } else {
      echo "<".MAX_ROL;
      unset($_POST['roll']);
    }
};

 

0 głosów
odpowiedź 19 sierpnia 2020 przez Artek Stary wyjadacz (11,800 p.)

1. Poprawiłbym nazwy funkcji i zmiennych. Coś takiego jak func albo rol nic nie wnosi. Skąd osoba to czytająca ma wiedzieć co masz na myśli?

Znaczy dokładniej nie działa mi dodanie rekordu do bazy danych

No nic dziwnego, że nie działa dodanie rekordu skoro Ty zmieniasz już istniejący.

2.Po co jest to? ->

unset($_POST['roll']);

 

komentarz 19 sierpnia 2020 przez Kacperhehe Bywalec (2,930 p.)
1) func - funkcja
roll - moja wina nie dodałem drugiego l, ma losować mi liczbę
Oraz chodziło mi że nie zmienia mi istniejący się rekord, ciągle jest taki sam w tej bazie danych.
2) Aby po wejściu na stronę nie losowało się to automatycznie tylko po kliknieciu buttona,
jedno kliknięcie i unsetuje roll, bo 1 if sprawdza czy jest jakis roll
komentarz 19 sierpnia 2020 przez Artek Stary wyjadacz (11,800 p.)
1) To rozumiem, że funkcja :D Chodzi o to aby nadać taką nazwę aby było wiadomo co ona robi :D

Roll to po angielsku rolka, zwój - chyba nie o to Ci chodziło? Może bardziej random, jak już?

2) Przecież jak wchodzisz na stronę to nie używasz metody POST tylko GET. Ten pierwszy warunek w takiej sytuacji Ci nie wejdzie, funkcja się nie wywoła. Poza tym o ile mi wiadomo to parametry w POST nie żyją dłużej niż jeden request.

Podobne pytania

0 głosów
1 odpowiedź 2,462 wizyt
0 głosów
1 odpowiedź 1,119 wizyt
0 głosów
1 odpowiedź 566 wizyt
pytanie zadane 20 lutego 2017 w JavaScript przez krystian904 Mądrala (6,820 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

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

...