Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z zapytaniem MySQL i PHP
Forum PHP.pl > Forum > Przedszkole
DukaN
Witam,
Mam problem z tym kodem:
  1. $p = $_GET['p'];
  2.  
  3. if($p == 1){
  4. $login1 = $_GET['login'];
  5. $aktywacja_kod = $_GET['aktywacja'];
  6. $info = mysql_query("SELECT activ FROM login='$login1' WHERE aktywacja1");
  7. if($info == $aktywacja_kod){
  8. $login2 = $_GET['login'];
  9. $info1 = mysql_query("SELECT activ FROM login='$login2' WHERE aktywacja2");
  10. if($info1 == 0){
  11. mysql_query("UPDATE activ SET aktywacja2='1' WHERE login='$login2'");
  12. header("Location: index.php");
  13. }
  14. else{
  15. echo 'Twoje konto zostalo juz aktywowane!';
  16. }
  17. }
  18. else{
  19. echo 'Niepoprawny kod';
  20. }
  21. }


Nie wyświetla pobiera mi kodu z bazy danych. A dokładniej to problem tkwi w $info bo jak wyświetlałem jego zawartość to była pusta.

Pozdrawiam smile.gif
daniel1302
  1. $info = mysql_query("SELECT activ FROM login='$login1' WHERE aktywacja1");
  2. if($info == $aktywacja_kod){


W przyszłości, zamin zadasz pytanie przeczytaj kurs o podstawach, albo zajrzyj do manuala

  1. $info = mysql_fetch_assoc(mysql_query("SELECT activ FROM login='$login1' WHERE aktywacja1"));
  2. if($info['activ'] == $aktywacja_kod){
CuteOne
@up ty również

co do problemu - niewłaściwa składnia zapytania a dokładnie ten fragment
  1. SELECT activ FROM login='$login1' WHERE aktywacja1

powinien wyglądać mniej więcej tak
  1. SELECT activ FROM tabela WHERE login='".$login1."' AND aktywacja1 = '".$aktwyacja1."'
DukaN
Ok, już sobie poradziłem, oto poprawny kod:

  1. $info = mysql_fetch_assoc(mysql_query("SELECT * FROM activ WHERE login='$login1'"));
  2. if($info['aktywacja1']==$aktywacja_kod){


//EDIT
Czyli wyszło że oboje mieliscie poniekąd racje.
CuteOne
Nie. Jeżeli chcesz sprawdzić czy podane argumenty znajdują się w bazie to pod żadnym pozorem nie robisz tego jak kolega wyżej opisał.

Włącz raportowanie błędów i podaj wartości, których nie ma w bazie smile.gif

  1. $p = $_GET['p'];
  2.  
  3. if($p == 1){
  4.  
  5. $login1 = mysql_real_escape_string($_GET['login']);
  6. $aktywacja_kod = mysql_real_escape_string($_GET['aktywacja']);
  7.  
  8. $result = mysql_query("SELECT kolumna FROM active WHERE login='".$login1."' WHERE aktywacja1 = '".$aktywacja1."'") or die(mysql_error());
  9.  
  10. if(mysql_num_rows($result)) {
  11.  
  12. $row = mysql_fetch_assoc($result);
  13. ....
  14. }
  15. }


@daniel1302 ehhh... przyjrzyj się temu zapytaniu
daniel1302
Niekoniecznie błąd w składni. Bo WHERE sprawdza co zwraca warunek w tej klauzuli, a WHERE pole zwraca jeśli pole nie jest równe false lub puste i chyba dla 0 też warunek jest równy false. Sprawdziłem zapytanie w którym nie ma błędów, ale wszystko zależy od struktury bazy danych na tym forum prze różne dziwolągi widać, więc czasami już nie widze w tym nic dziwnego. Dokładnie jak powiedział kolega wyżej, nie robi się tego jak napisałem ja.

ten kod:
if($info['aktywacja1']==$aktywacja_kod){

Można zastąpić jak napisał użytkownik post wyżej przez dodanie w zapytaniu w klauzuli WHERE warunku: aktywacja1 = '".$aktywacja1."'

Jest to w pewnym rodzaju optymalizacja
CuteOne
Nie chodzi tu o wpisywanie warunków a o sposób pobierania danych

Załóżmy, że używamy "twojego" sposobu. Niech $login1 ma wartość "afeofjiwejfiow" (która nie istnieje w bazie). Taki zapis wywali błąd dla mysql_fetch_assoc() (mysql_query zwróci boolean zamiast resources)
  1. $info = mysql_fetch_assoc(mysql_query("SELECT * FROM activ WHERE login='$login1'"));


Natomiast "mój" zapis najpierw sprawdzi czy jakiś zasób zostanie zwrócony za pomocą mysql_num_rows() a dopiero później ten zasób zostanie wykorzystany.
daniel1302
Ale to jest zbędne wykonywanie zapytania bo sprawdzać można za pomocą isset i wteddy jest jedno zapytanie mniej, może nie robi to różnicy przy małych projektach ale później na dole strony przy pobraniu 5 newsów widać takie głupoty jak:
Cytat
Wykonanych zapytań do bazy danych: 32
.
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.