Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: komórka tabeli jako warunek
Forum PHP.pl > Forum > Bazy danych > MySQL
Dirk
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ę.
Crozin
  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ć.
Dirk
Takie rozwiązanie mi nie działa. Na priv wyślę Ci o co bardziej szczegółowo chodzi.
Crozin
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ć.
Dirk
  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. ?>
Crozin
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.
Dirk
Mi włamania nie grożą bo u mnie nie można się nawet logować rolleyes.gif Dzięki smile.gif
Crozin
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.
Dirk
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.
Crozin
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. }
Dirk
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);
Crozin
Masz w manualu przykłady - mysql_query
Dirk
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.