Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z funkcją:/
robos85
post 9.09.2008, 09:15:08
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


mam taką funkcję:
  1. <?php
  2. function check_login_input(){
  3.  $fields=array('login','pass');
  4.  $error=array();
  5.  if(!isset($_POST['log_in'])){
  6.      return "";
  7.  }
  8.  else{
  9.      foreach($fields as $value){
  10.          switch($value)
  11.          {
  12.              case 'login'<span style="color: #007700":
  13.                  if(!(preg_match('/^[a-zA-Z0-9ąĄćĆęĘłŁńŃóÓśŚżŻźŹ_]{3,32}$/', sqlesc($_POST[$value])))){
  14.                      $error[]='musi zawierać od 3 do 32 znaków,<br />dozwolone znaki to litery, cyfry oraz znak podkreślenie(_)';
  15.                  }
  16.                  break;
  17.              case 'pass'<span style="color: #007700":
  18.                  if(strlen($_POST[$value])<6 || strlen($_POST[$value])>40){
  19.                      $error[]='musi zawierać od 6 do 40 znaków';    
  20.                  }
  21.                  break;
  22.          }
  23.      }
  24.          if(isset($error)){
  25.              return $error;
  26.          }
  27.          else{
  28.              return '';
  29.          }
  30.  }
  31. }
  32. ?>

lecz nie działa poprawnie, bo nie zwraca prawidłowego error.
Co tu skopałem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Shili
post 9.09.2008, 09:22:36
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Po case 'cośtam' umieszcza się :

Nie zwraca prawidłowego, to znaczy jaki zwraca i dla jakich danych?
Weź pod uwagę, że skrypt masz niepełny, nie można go uruchomić na lokalu nie przerabiając i dorabiając, więc precyzuj najbardziej jak to tylko możliwe.
Go to the top of the page
+Quote Post
robos85
post 9.09.2008, 09:25:29
Post #3





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


: mam, coś ten bbcode mi ucina. Podaję kod na phpfi: http://phpfi.com/351671
tak mam funkcję napisaną
Go to the top of the page
+Quote Post
Shili
post 9.09.2008, 09:28:20
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Nadal nie wiem dokładnie jaki jest problem.

Swoją drogą za każdym razem, nawet dla dobrych danych powinno Ci zwrócić błąd (o to chodzi?). Bo zmienną error masz ustawioną wcześniej, czyli isset zwróci zawsze true. Nie wiem czy nie lepiej zamiast
  1. <?php
  2. if(isset($error)){
  3.              return $error;
  4.          }
  5.          else{
  6.              return '';
  7.          }
  8. ?>

Byłoby napisać
  1. <?php
  2. if(count($error)){
  3.              return $error;
  4.          }
  5.          else{
  6.              return '';
  7.          }
  8. ?>

Jeśli nie o to chodziło z nieprawidłowym error, to dużo bardziej dokładnie opisz z czym jest problem winksmiley.jpg

Ten post edytował Shili 9.09.2008, 09:30:06
Go to the top of the page
+Quote Post
robos85
post 9.09.2008, 09:33:06
Post #5





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


łączę to e smarty do wywalania błędów poprawności forma. Podaję cały kod jaki używam:
plik php który przetwarza a później do smarty daje dane
  1. <?php
  2. if(isset($_POST['log_in'])){
  3. check_login_input();
  4. }
  5. ?>

i przypisanie do smarty
  1. <?php
  2. $smarty->assign('error',$error);
  3. ?>

a tu linia w smarty:
  1. {$error.login}


tak dt się przedstawia i nie działa.
Jak na sztywno (nie orzez funkcję) zadeklaruję array to działa, więc stąd wniosek, ze ta funkcja trafiona.
Go to the top of the page
+Quote Post
Shili
post 9.09.2008, 09:35:50
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Cytat
{$error.login}
Oczywiście, że nic Ci nie zwróci tongue.gif

Przypatrz się, jak deklarujesz elementy tablicy - nie nadajesz im kluczy o nazwie login i haslo, nadajesz im kolejne liczby. Wyświetl sobie pod koniec funkcji print_r($error) i sprawdź sobie swoje indeksy tongue.gif

Chcesz się tak odwoływać? To nie korzystaj ze składni $error[] = ... a $error['klucz'] = ...
Gdzie klucz, to oczywiście dla podanego przykładu login.

Ten post edytował Shili 9.09.2008, 09:37:16
Go to the top of the page
+Quote Post
robos85
post 9.09.2008, 09:56:00
Post #7





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


zmiana na
  1. {$error[0]}
nie pomaga
zmiana error w funkcji na:
  1. <?php
  2. $error[$value]="...";
  3. ?>
też nie pomaga

jakiś pomysł?

Ten post edytował robos85 9.09.2008, 09:45:58
Go to the top of the page
+Quote Post
Shili
post 9.09.2008, 10:38:53
Post #8





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Zrób tak:
  1. <?php
  2. print_r(check_login_input())
  3. ?>
tam gdzie wywołujesz funkcję. Żeby nie zwracać błędów smarty możesz tymczasowo dać potem die();

Coś się wyświetla?
Jakie dane wpisujesz w formularz?

Zmieniłeś
  1. <?php
  2. if(isset($error)){
  3. ?>
na
  1. <?php
  2. if(count($error)) {
  3. ?>
?

Podaj jeszcze sposób wywoływania tejże funkcji.

Jeśli to ten kod:
  1. <?php
  2. if(isset($_POST['log_in'])){
  3. check_login_input();
  4. }
  5. ?>
to chyba zapomniałeś wyniku funkcji przypisać do jakiejś zmiennej:
  1. <?php
  2. if(isset($_POST['log_in'])){
  3. $error = check_login_input();
  4. }
  5. ?>
Go to the top of the page
+Quote Post
robos85
post 9.09.2008, 10:54:47
Post #9





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Przez nieuwagę nie przypisałem wyniku do zmiennej sad.gif
Już działa:)
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: 14.08.2025 - 06:02