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

question-closed Jak wyjąć z bazy tylko jeden rekord

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,065 wizyt
pytanie zadane 3 stycznia 2020 w SQL, bazy danych przez franz Gaduła (4,940 p.)
zamknięte 4 stycznia 2020 przez franz

Witam 
Nie proszę o gotowca , a raczej o naprowadzenie na rozwiązanie (mile widziane linki)
Mój problem polega na tym że chce wyświetlić z bazy jeden tylko wpis .

Spróbuje to zobrazować

nick email jakaś wartość  inna wartość   punkty
adam       6
janek       34

Chce wyjąc z bazy i wyświetlić ilość punktów jakie posiada powiedzmy "adam"

Dodam że pisze to w Codeigniter próbowałem wielu zapytań i nie udało mi sie wyświetlić tego co chce 

Proszę o wskazówki jak skonstruować zapytanie i odebrać wynik 
Próbowałem na wiele sposobów 

$this->db->query("SELECT * FROM uzytkownicy WHERE '$nick'");
foreach ($query->result() as $row)
echo 'Łączna liczba wyników: ' . $row->num_rows();
Łączna liczba wyników:0

to zapytanie nawet działa ale nie zwraca niczego 

Proszę o rady jak to rozwiązać , jestem początkujący dlatego proszę o wyrozumiałość

komentarz zamknięcia: Porada udzielona , działa tak jak chciałem

1 odpowiedź

0 głosów
odpowiedź 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
wybrane 3 stycznia 2020 przez franz
 
Najlepsza

Gdzieś zgubiłeś `=` w WHERE? ;)

select a, b, c from table where kolumna=wartosc1, kolumna2=wartosc2;

(EDIT: inna sprawa: nie wolisz użyć ActiveRecord zamiast gołego SQLa?)

komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)
Dziękuje Ci serdeczne za wskazanie mi tego banalnego acz nie tak oczywistego dla mnie błędu.

Pozwolę sobie jeszcze na zadanie kolejnego pytania jeżeli można.

Czy jest możliwość zablokować jakoś wyświetlanie się błędu o braku zmiennej jeżeli nie jest się zalogowanym , czy należy zrobić inny widok dla nie zalogowanych ?
komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)

błędu o braku zmiennej

Nie do końca wiem, co masz na myśli.

komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)
$this->db->query("SELECT * FROM uzytkownicy WHERE '$nick'");

Zmienna "$nick" pochodzi z zmiennej sesyjnej , jak się zaloguje to istnieje zmienna sesyjna z moim nickiem i zapytanie wie co powinno pobrać z bazy 

Natomiast kiedy się wyloguje nie ma tej zmiennej i mam komunikat o braku 

Undefined variable: login

komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
No to... wykonaj ten kod tylko gdy user jest zalogowany (więc jest to pole w sesji).
komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)

Kolejny raz dziękuję za poradę 

Ale coś nie jestem pewien czy to zrobiłem dobrze 

$nick=$this->session->userdata('username');

Ten kawałek odpowiada za zmienną w której zapisuje się w sesji nick aktualnie zalogowanego

Jak dodam 

if($nick = NULL)

i wyloguje się to nie mam komunikatu Undefined variable: login 

jednak po zalogowaniu nie wyświetla się nick zalogowanego ( co jest oczywiste )

Zmieniając to na 

if($nick != NULL)

Po zalogowaniu wyświetla się to co powinno a po wylogowaniu komunikatu  Undefined variable: login​​​​​​​ nadal nie ma 

Jak to jest mozliwe ?

komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
if($nick = NULL)

`=` to nie jest porównanie.

komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)
No tak nie jest porównaniem

Ja to rozumiem w ten sposób że  $nick= NULL czyli zmienna $nick jest pusta

Najwyraźniej jestem w błędzie
1
komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
No to jeśli nie jest porównaniem, to co robi w środku `if`? ;)
komentarz 3 stycznia 2020 przez smokolisz Mądrala (6,340 p.)

@franz,

$this->db->query("SELECT * FROM uzytkownicy WHERE '$nick'");

Uważaj na SQL INJECTION w tej kwerendzie.

1
komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
A to swoją drogą; między innymi dlatego pytałem czemu SQL a nie ActiveRecord ;)
komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)

Weryfikacja formularza powinna załatwić SQL INJECTION

To zapytanie wykonuje się bez ingerencji usera 

Juz to zmieniłem smiley teraz to zapytanie wygląda tek 

$query = $this->db->get_where('uzytkownicy', array('username' => $nick));
                foreach ($query->result() as $row)

Ale teraz mam inny problem z kolejnym zapytaniem do bazy 

 $data = array(
               'punkty' => $sum,
                );

        $sql = $this->db->where('username', $nick);
        $sql = $this->db->update('uzytkownicy', $data);
        $this->db->query($sql);

wywala się błędem 

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1

W phpMyAdmin jak wpisuje 

UPDATE `uzytkownicy` SET `punkty` = 54 WHERE `username` = 'franz'

działa dobrze 

Jaki może być powód ?

Próbowałem z różnymi typami w tej kolumnie i cały czas ten sam błąd 

komentarz 3 stycznia 2020 przez adrian17 Mentor (354,120 p.)
array('username' => $nick)

To nie PHP 5.3, żeby array() używać ;)

       $sql = $this->db->update('uzytkownicy', $data);
       $this->db->query($sql);

Zgodnie z dokumentacją update():

Generates an update string and runs the query based on the data you supply

więc ta druga linia jest nie tylko niepotrzebna, ale pewnie też nie ma sensu.

A ich oficjalny przykład nawet nie ma $sql: https://codeigniter.com/userguide2/database/active_record.html#update

 

komentarz 3 stycznia 2020 przez franz Gaduła (4,940 p.)
edycja 4 stycznia 2020 przez franz

własnie z tego przykładu który podlinkowałeś skopiowałem i są tam obie linie

Nie wiem tylko dlaczego ten błąd

Po skasowaniu linii 

$sql = $this->db->where('username', $nick);

Najzwyczajniej zaktualizowało wszystkich w bazie dodając każdemu 
Ale błąd jest nadal taki sam 

1
komentarz 4 stycznia 2020 przez adrian17 Mentor (354,120 p.)

własnie z tego przykładu który podlinkowałeś skopiowałem i są tam obie linie

Nie widzę tam nigdzie `$sql =` ani `$this->db->query($sql)`.

Po skasowaniu linii $this->db->where najzwyczajniej zaktualizowało wszystkich w bazie

No... tak. Po co skasowałeś tą linię? :P Nic o niej nie mówiłem.

komentarz 4 stycznia 2020 przez franz Gaduła (4,940 p.)

Po raz kolejny czerwienie się ze wstydu i złości na samego siebie, że sam nie potrafiłem wpaść na tak prostą rzecz, Jednak w ramach wyjaśnienia chciałbym powiedzieć . tworze sobie tą stronkę tylko w ramach swojego hobby. Nie zajmuje się programowaniem i nigdy zawodowo się nim zajmował nie będę jestem na to za stary smiley, 50-siatka już na karku.
Kolejny raz dziękuje za udzielenie mi wskazówki .

Podobne pytania

0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 16 września 2018 w PHP przez Gucci93 Użytkownik (570 p.)
0 głosów
0 odpowiedzi 255 wizyt
0 głosów
2 odpowiedzi 409 wizyt

93,440 zapytań

142,431 odpowiedzi

322,678 komentarzy

62,802 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

...