Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]/[MySQL] Sprawdzenie zawartości bazy danych
Forum PHP.pl > Forum > Przedszkole
Szypa
Chciałbym dodać do skryptu rejestracji funkcje sprawdzającą czy nie ma już w bazie użytkownika o podanej nazwie lub adresie Email. Wie ktoś jak go zmodyfikować?

  1. <?php
  2. if (isset ($_POST['wyslij']))
  3. {
  4. $problem = FALSE;
  5.  
  6. if (empty ($_POST['uzytkownik']))
  7. {
  8. $problem = TRUE;
  9. print '<p>Proszę podac nazwę użytkownika!</p>';
  10. }
  11.  
  12. if (empty ($_POST['haslo1']))
  13. {
  14. $problem = TRUE;
  15. print '<p>Proszę podac hasło!</p>';
  16. }
  17.  
  18. if ($_POST['haslo1'] != $_POST['haslo2'])
  19. {
  20. $problem = TRUE;
  21. print '<p>Hasło nie jest zgodne z powtórzonym hasłem!</p>';
  22. }
  23.  
  24. if (!$problem)
  25. {
  26. if ($dbc = @mysql_connect ('localhost', 'XxX', 'XxX'))
  27. {
  28. if (!@mysql_select_db ('XxX'))
  29. {
  30. die ('<p>Nie można wybrać bazy danych, ponieważ: <b>' . mysql_error() . '</b></p>');
  31. }
  32. }
  33. else
  34. {
  35. die ('<p>Nie można połączyć się z MySQL, ponieważ: <b>' . mysql_error() . '</b></p>');
  36. }
  37. $email = strtolower($_POST['email']);
  38. $zapytanie = 'INSERT INTO niezarejestrowani (uzytkownik, haslo, email, gg, data) VALUES ("'.$_POST['uzytkownik'].'", "'.crypt($_POST['haslo1']).'", "'.$email.'", "'.$_POST['gg'].'", now())';
  39.  
  40. if (@mysql_query ($zapytanie))
  41. {
  42. print '<p><b>Zostałeś zarejestrowany na stronie!</b><br />Zaloguj się aby uzyskać specjalne opcje</p>';
  43. }
  44. else
  45. {
  46. print "<p>Nie można zarejestrowac na stronie ponieważ: <b>" . mysql_error() . "</b>. Wykonywane zapytanie: $zapytanie.</p>";
  47. }
  48. }
  49. else
  50. {
  51. print '<p>Brak wypełnionego pola! Proszę spróbować jeszcze raz!</p>';
  52. }
  53. } 
  54. else
  55. {
  56. ?>
  57. <p><strong>Podaj dane niezbędne dla rejestracji</strong></p>
  58. <form action ="rejestracja.php" method="post">
  59. <p><strong>Obowiązkowe</strong><br />
  60. Nazwa użytkownika: <input style="position:relative; left:13px" type="text" name="uzytkownik" size="20" /><br />
  61. Hasło: <input style="position:relative; left:80px" type="password" name="haslo1" size="20" /><br />
  62. Powtórz hasło: <input style="position:relative; left:39px" type="password" name="haslo2" size="20" /><br />
  63. Adres Email: <input style="position:relative; left:52px"type="text" name="email" size="20" /><br />
  64. <strong>Nieobowiazkowe</strong><br />
  65. Numer GG: <input style="position:relative; left:59px" type="text" name="gg" size="20" /><br />
  66. <input type="submit" name="wyslij" value="Zarejestruj" /></p>
  67. </form>
  68. <?php
  69. }
  70. ?>
mild
  1. <?php
  2. $res = mysql_query("SELECT id FROM niezarejestrowani WHERE pole_do_sprawdzenia = 'wartosci_podana_przez uzytkownika'");
  3. if (mysql_num_rows($res) > 0 )
  4. {
  5. print '<p>Brak wypełnionego pola! Proszę spróbować jeszcze raz!</p>';
  6. die();
  7. }
  8. ?>

Nie zapomnij zmienic zapytania winksmiley.jpg
Szypa
Teraz wygląda to tak:
  1. <?php
  2. $res = mysql_query("SELECT user_id FROM niezarejestrowani, uzytkownicy WHERE uzytkownicy = '{$_POST['uzytkownik']}' OR email = '{$_POST['email']}'");
  3.  
  4. if (mysql_num_rows($res) > 0 )
  5. {
  6. ?>


Ale coś wywala bład takowy:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\XxX\rejestracja.php on line 54
Sokal
A nie możesz skorzystać z rozszerzenia mysqli? Ja miałem jakieś dziwne problemy z tymi mysql_*() ;-)

edit:
Aj, bo w tych mysql_*() musisz podawać jako drugi parametr połączenie ;P
Cysiaczek
Nie podoba mi się to zapytanie sql - co to za wartości w tzw. "wąsach" {wartosc}?

Dodaj die() przy zapytaniu
  1. <?php
  2. $sql="SELECT user_id FROM niezarejestrowani, uzytkownicy WHERE uzytkownicy = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'"
  3. $res = mysql_query($sql) or die(mysql_error());
  4. ?>


Zobacz jaki błąd wywali.

@Sokal : > Co ma do tego mysqli? :*
Sokal
Ja byłbym jednak za tym, że trzeba podawać drugi parametr .... czyli połączenie, ale zobacz najpierw Szypa czy to zapytanie, które napisał Cysio działa
Szypa
No to tak: Zapytanie cysiaczka działa "prawie"
Wyskakuje mi info:Kolumna: 'user_id' w field list jest dwuznaczna
Hmmm...W obu branych pod lupę tabelach jest taka tabela user_id z primary key`em i auto_incrementem.
Może to o to chodzi?
Co do wąsów: Tak mnie uczyła książka i czasami się sprawdza;)
A może zrobić to jakoś z zapytaniem COUNT z Mysql`a? Nigdy teg nie używałem, a w necie nie jest to dobrze wytłumaczone. Ktoś wie jak przerobić aktualny skrypt żeby sprawdzał to Count?
drPayton
"Wąsy" w niczym nie przeszkadzają...
  1. <?php
  2. $sql="SELECT niezarejestrowani.user_id AS nid, uzytkownicy.user_id AS uid FROM niezarejestrowani, uzytkownicy WHERE uzytkownicy
     = '"
    .$_POST['uzytkownik']."' OR email = '".$_POST['email']."'"
  3. $res = mysql_query($sql) or die(mysql_error());
  4. ?>

I wtedy dalej w kodzie do pola user_id z tabeli niezarejestrowani odwołujesz się przez nid, a tabeli użytkownicy - poprzez uid
A co do count:
  1. <?php
  2. $sql="SELECT count(user_id) FROM uzytkownicy WHERE uzytkownicy = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'"
  3. ?>
Cienki1980
Cytat(Sokal @ 8.08.2007, 16:11:37 ) *
Ja byłbym jednak za tym, że trzeba podawać drugi parametr .... czyli połączenie, ale zobacz najpierw Szypa czy to zapytanie, które napisał Cysio działa


Zgodnie z tym co pisze manual
Cytat
resource mysql_query ( string $zapytanie [, resource $identyfikator_połączenia [, int $typ_wyniku]] )

mysql_query() wysyła zapytanie do aktywnej bazy na serwerze skojarzonym z podanym identyfikatorem połączenia. Jeżeli identyfikator_połączenia nie został podany, wykorzystywane jest ostatnio otwarte połączenie.
drugi parametr nie jest wymagany do poprawnego działania funkcji mysql_query.

Tak więc zapytanie Cysiaczka ( poza tym faktem, że w dwóch tabelach jest kolumna o takiej samej nazwie i to wywala zapytanie ) jest poprawne i działające w takiej postaci jak napisał.
Szypa
Jest gdzieś błąd tutaj, mógłby ktoś go zweryfikować? gdy podczas rejestracji podaje nazwę która już jest i email to nic sobie z tego nie robi i spokojnie wrzuca go do bazy:/

  1. <?php
  2. if (!$problem)
  3. {
  4. if ($dbc = @mysql_connect ('localhost', 'XxX', 'haslo'))
  5. {
  6. if (!@mysql_select_db ('XxX'))
  7. {
  8. die ('<p>Nie można wybrać bazy danych, ponieważ: <b>' . mysql_error() . '</b></p>');
  9.  }
  10. }
  11. else
  12. {
  13. die ('<p>Nie można połączyć się z MySQL, ponieważ: <b>' . mysql_error() . '</b></p>');
  14. }
  15.  
  16. $sql = "SELECT count(user_id) FROM niezarejestrowani WHERE uzytkownik = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'";
  17.  
  18. if ($sql > 0 )
  19. {
  20. print '<p>Nie możesz się zarejestrować bo ktoś taki już jest blabla</p>';
  21. //Dalsze instrukcje
  22.  
  23. }
  24. else
  25. {
  26. $email = strtolower($_POST['email']);
  27. $zapytanie = 'INSERT INTO niezarejestrowani (uzytkownik, haslo, email, gg, data) VALUES ("'.$_POST['uzytkownik'].'", "'.crypt($_POST['haslo1']).'", "'.$email.'", "'.$_POST['gg'].'", now())';
  28.  
  29. if (@mysql_query ($zapytanie))
  30. {
  31. print '<p><b>Zostałeś zarejestrowany na stronie!</b><br />Zaloguj się aby uzyskać specjalne opcje</p>';
  32. }
  33. else
  34. {
  35. print "<p>Nie można zarejestrowac na stronie ponieważ: <b>" . mysql_error() . "</b>. Wykonywane zapytanie: $zapytanie.</p>";
  36. }
  37. }
  38.  
  39.  
  40. }
  41. else
  42. {
  43. print '<p>Brak wypełnionego pola! Proszę spróbować jeszcze raz!</p>';
  44. }
  45. ?>



Opcjonalnie mogę to zrobić tak, ale z kolei zawsze wyskoczy błąd:/
  1. <?php
  2. $sql = "SELECT count(user_id) FROM niezarejestrowani WHERE uzytkownik = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'";
  3.  
  4. $res = mysql_query($sql) or die(mysql_error());
  5. if ($res > 0 )
  6. ?>
nospor
  1. <?php
  2. $sql = "SELECT count(user_id) FROM niezarejestrowani WHERE uzytkownik = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'";
  3.  
  4. if ($sql > 0 )
  5. ?>

blinksmiley.gif
No przeciez zapytanie musisz wykonac a nie tylko napisac...

  1. <?php
  2. $res = mysql_query($sql) or die(mysql_error());
  3. if ($res > 0 )
  4. ?>

wynik nalezy jeszcze odebrac poprzez mysql_fetch_array(). kurka, korzystaj z manuala...
Szypa
Zrobiłem to troszeczkę inaczej:

  1. <?php
  2. $sql = "SELECT user_id FROM niezarejestrowani WHERE uzytkownik = '".$_POST['uzytkownik']."' OR email = '".$_POST['email']."'";
  3. $res = mysql_query($sql) or die(mysql_error());
  4. if (mysql_num_rows($res) > 0 )
  5. ?>


I ładnie śmiga:) Dzięki za pomoc!
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.