Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z funkcją:/
Forum PHP.pl > Forum > Przedszkole
robos85
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
Shili
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.
robos85
: mam, coś ten bbcode mi ucina. Podaję kod na phpfi: http://phpfi.com/351671
tak mam funkcję napisaną
Shili
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
robos85
łą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.
Shili
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.
robos85
zmiana na
  1. {$error[0]}
nie pomaga
zmiana error w funkcji na:
  1. <?php
  2. $error[$value]="...";
  3. ?>
też nie pomaga

jakiś pomysł?
Shili
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. ?>
robos85
Przez nieuwagę nie przypisałem wyniku do zmiennej sad.gif
Już działa:)
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.