Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] użycie funkcji w funkcji
Forum PHP.pl > Forum > PHP
ensim
Cześć mam pytanko,
posiadam takie 3 funkcje:

Kod
function sqlConnect() {
   global $sqlUsername, $sqlPassword, $sqlDatabase, $sqlHostname, $sqlConnection;
    
    $sqlConnection = mysql_connect($sqlHostname, $sqlUsername, $sqlPassword);
    mysql_select_db($sqlDatabase, $sqlConnection);
}

function sqlDisconnect() {
   global $sqlConnection;
    
    mysql_close($sqlConnection);
}

/* FUNKCJE WERYFIKUJĄCE */
function validateUsername($username) {
   $errorBitrate = 0;
      if (empty($username)) { $errorBitrate++; }
        if (!eregi("^[a-z0-9]{6,12}$", $username)) { $errorBitrate++; }
        if ($errorBitrate == 0) {
           $sqlQuery = ("SELECT * FROM tblClients WHERE clUsername=\"$username\"");
            $sqlCount = mysql_num_rows($sqlQuery);
            if ($sqlCount != 0) { $errorBitrate++; }
        }
    
    if ($errorBitrate != 0) { echo 'error'; }
    else { echo 'ok'; }
}


nie wiem teraz w jaki sposób zmusić funkcję validateUsername() do tego żeby skorzystała z już istniejącego połączenia SQL. Ale dziwne jest także to, że jeżeli dam sqlConnect() przed zapytaniem sql i sqlDisconnect() po $sqlCount to i tak dostaję błąd mimo że wysłana nazwa użytkownika nie istnieje w bazie. Tak jakby coś było nie tak z połączeniem.
no_face
Zrob global wskaznika polaczenia lub po prostu przekaz w parametrze funkcji.
Burned
Co ma na celu ten kawałek?
  1. <?php
  2. function sqlDisconnect() {
  3. global $sqlConnection;
  4.  
  5. mysql_close($sqlConnection);
  6. }
  7. ?>

no_face
Ten kawalek sluzy do zlglobalowania wskaznika w tej funkcj w ktorej wystepuje, a chcesz wykorzystac polaczenie z baza w validateUsername()
Burned
Miałem raczej na myśli to, że jest to niepotrzebne powielanie funkcji. W czym złe było samo mysql_close, żeby obudowywać je w funkcję w taki sposób?
ensim
ma na celu to żeby naprzykład jak na stronie potrzebuję w różnych momentach zrobić z 50 różnych zapytań to żeby utrzymać połączenie a nie robić sztucznego tłumu i obciążać serwera sql.
darko
  1. // 1. nowa funkcja
  2. function sqlQuery($sql_query, $sqlConnection) {
  3. return mysql_query($sql_query, $sqlConnection);
  4. }
  5.  
  6. // 2. zmiana:
  7. function validateUsername($username, $db_resource) {
  8. // (...)
  9. if(is_resource($db_resource)) {
  10. $sqlQuery = "SELECT * FROM tblClients WHERE clUsername='".$username."'";
  11. $sqlCount = mysql_num_rows(sqlQuery($sqlQuery, $db_resource));
  12. } else {
  13. die('nieprawidłowy zasób połączenia z bazą danych');
  14. }
  15. // (...)
  16. }
  17. // 3. zmiana:
  18. function sqlConnect($sqlUsername, $sqlPassword, $sqlDatabase, $sqlHostname) {
  19. // global $sqlUsername, $sqlPassword, $sqlDatabase, $sqlHostname, $sqlConnection;
  20. $sqlConnection = mysql_connect($sqlHostname, $sqlUsername, $sqlPassword);
  21. if(mysql_select_db($sqlDatabase, $sqlConnection))
  22. return $sqlConnection;
  23. else
  24. return false;
  25. }
  26. // 4. zmiana:
  27. function sqlDisconnect($sqlConnection) {
  28. if(is_resource($sqlConnection))
  29. return mysql_close($sqlConnection);
  30. else
  31. return false;
  32. }
  33. // Teraz tylko odpowiednio wywołać.
ensim
Chłopaki dzięki wielkie za pomoc, darko dzięki wdrożyłem twoje rozwiązanie, jednakże błąd mojego kodu polegał na literówce i pośpiechu zapomniałem dać mysql_query :-/

Mam jeszcze taki mały problem, dokladnie ten sam kod - tylko na dwóch różnych stronach:

!eregi("^[+][0-9]{1,3}[.][0-9]{9}$", $phone)

a jak wpisze ten numer +48.662663664 to na jednej stronie pokazuje ze numer nie pasuje do wzorca, w drugiej ze tak :/
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.