Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> komórka tabeli jako warunek
Dirk
post 19.12.2010, 13:06:42
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


Witam. Mam jeszcze jeden problem. Jak wstawić pole tabeli jako warunek?

uno to pole tabeli i jeśli ma wartość 1 to zwraca fałsz, jeśli 0 prawdę.
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 13:21:22
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. uno = 0 -- to prawda
  2. uno = 1 -- to fałsz
Takich zapisów możesz użyć jako warunek - chyba próbujesz gdzieś, coś przekombinować.
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 13:36:22
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


Takie rozwiązanie mi nie działa. Na priv wyślę Ci o co bardziej szczegółowo chodzi.
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 14:37:47
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. To co podałem jest poprawne, być może próbujesz tego źle użyć.
2. Podaj nieco kodu, bo nawet z opisu z prywatnej wiadomości (na przyszłość: spraw związanych z wątkiem nie załatwiaj przez PW) niewiele da się wywnioskować.
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 14:42:13
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $sql_conn = mysql_connect('host', 'nazwa', 'haslo')
  3. or die('Nie mogłem połaczyć się z bazą danych');
  4.  
  5.  
  6. if(uno = 0)
  7. $zapytanie = "UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`='$_POST[nick]'";
  8. $idzapytania = mysql_query($zapytanie);
  9. echo 'Dodano questa';
  10. else
  11. echo 'Już zrobiłeś tego questa';
  12.  
  13. mysql_close($sql_conn);
  14. ?>


Ten post edytował Dirk 19.12.2010, 14:49:41
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 14:48:16
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Plecam lekturę Temat: Bezpieczenstwo skryptow PHP a przede wszystkim Temat: SQL Injection Insertion - a co za tym idzie i przejście na PDO.
2. Po prostu pobierz wartość kolumny uno:
  1. SELECT uno FROM users WHERE nick = ?
Mając już jej wartość będziesz mógł użyć jej w warunku.
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 15:04:44
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


Mi włamania nie grożą bo u mnie nie można się nawet logować rolleyes.gif Dzięki smile.gif
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 15:13:45
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Co z tego, że nie można się logować? Nadal można (o ile da się uruchomić ten fragment kodu) wywołać niebezpieczne zapytanie SQL.
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 15:44:02
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


Czyli takie rozwiązanie.

  1. ...
  2. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = './'$_POST[nick];";
  3. $idzapytania = mysql_query($zapytanie);
  4.  
  5.  
  6. if(uno == 0)
  7. $zapytanie = "UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`=''./'$_POST[nick]'";
  8. $idzapytania = mysql_query($zapytanie);
  9. echo 'Dodano questa';
  10. ...


Jest lepsze od takiego?

  1. ...
  2. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = $_POST[nick];";
  3. $idzapytania = mysql_query($zapytanie);
  4.  
  5.  
  6. if(uno == 0)
  7. $zapytanie = "UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`='$_POST[nick]';
  8. $idzapytania = mysql_query($zapytanie);
  9. echo 'Dodano questa';
  10. ...



Kolejny problem... Wiem, że dużo ich mam tongue.gif Wczoraj zacząłem zabawę z mysql i php. Wcześniej się bawiłem tylko w HTML i js.

  1. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = $_POST[nick];";
  2. $idzapytania = mysql_query($zapytanie);
  3.  
  4.  
  5. if(uno == 0)
  6. $zapytanie = "UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`='$_POST[nick]'";
  7. $idzapytania = mysql_query($zapytanie);
  8. echo 'Dodano questa.';
  9. else
  10. echo 'Robiłeś już tego questa!';


Gdy włączam stronę to pokazuje mi, że jest błąd w linijce w której jest else.

Ten post edytował Dirk 19.12.2010, 15:50:09
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 16:11:03
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Pod względem bezpieczeństwa każde z tych rozwiązań jest złe:
  1. // $_POST[nick] = bla bla bla' OR '1' = '1
  2. $zapytanie = "UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`='$_POST[nick]'";
  3. // Wynik: UPDATE `users` SET `iq` = `iq` + 1, `uno` = '1' WHERE `nick`='bla bla bla' OR '1' = '1'";
  4. // Efekt? Zapytanie aktualizuje dane wszystkich użytkowników, a nie tylko jednego.
  5.  
  6. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = './'$_POST[nick];";
  7. // To zapytanie to w ogóle zawsze będzie błędy powodować:
  8. // SELECT `uno` FROM `users` WHERE `nick` = './'crozin;
  9.  
  10. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = $_POST[nick];";
  11. // Tutaj to wartość z POSt[nick] nie zostanie nawet potraktowana jako tekst, a fragment samego zapytania
  12. // Przy przykładowej wartości "Dirk" baza będzie myślała, że robisz porównanie: nick = Dirk, gdzie zarówno nick i Dirk to nazwy kolumn, a nie tekst

Wszystkie dane powinieneś filtrować:
  1. $nick = mysql_real_escape_string($_POST['nick']);
  2. $zapytanie = ".... nick = '$nick' ....";
A tak w ogóle to nie powinieneś w ogóle używać funkcji mysql_*() tylko przykładowo PDO - w manualu przykłady.
A skoro masz jakąś tam styczność z JS, to nie powinieneś mieć problemów z obiektowym interfejsem PDO.


W samym kodzie masz jeszcze dwa błędy:
1. Używasz jakiejś niezdefiniowanej stałej "uno". W PHP zmienne poprzedzone są znakiem dolara, np. $uno, w dodatku Ty nawet nie pobrałeś danych zwróconych przez zapytanie tylko je wywołałeś (w przykładach użycia PDO masz jak pobrać zawartość zwróconą przez zapytanie do zmiennej).
2. Wszystkie konstrukcje językowe typu IF, ELSE, WHILE, FOR itd. odnoszą się wyłącznie do wyrażenia które poprzedzają. Dlatego chcąc wykonać kilka instrukcji grupuje się je w bloki ( { ... } ), czyli:
  1. if (...) {
  2. ...
  3. } else {
  4. ...
  5. }
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 16:58:58
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


To jak pobrać nazwę kolumny? W odpowiedzi na poprzedni mój temat otrzymałem właśnie
  1. $zapytanie = "SELECT `uno` FROM `users` WHERE `nick` = $_POST[nick];";
  2. $idzapytania = mysql_query($zapytanie);
Go to the top of the page
+Quote Post
Crozin
post 19.12.2010, 17:05:16
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Masz w manualu przykłady - mysql_query
Go to the top of the page
+Quote Post
Dirk
post 19.12.2010, 17:46:31
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 19.12.2010

Ostrzeżenie: (0%)
-----


Próbuję tymi przykładami to zrobić, ale mi nie wychodzi. Mógłbyś mi to zrobić? Ja bardziej na gotowych przykładach łapię o co chodzi.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 03:54