Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie pustej zmiennej do funkcji.
Forum PHP.pl > Forum > PHP
MalyKazio
Witam.

Piszę funkcję dodającą dane do bazy danych. Jako jedyny argument przekazuję do funkcji tablicę $wartosci. Przed dodaniem wszystkie dane są przepuszczane przez funkcję sprawdzającą ich poprawność. Mam pytanie dotyczące danych, które mają być liczbami. Funkcja sprawdzająca wygląda mniej więcej tak:
  1. <?php
  2. function sprawdz($co) {
  3. (int)$co;
  4. // dalej sprawdzanie zakresu itp.
  5. }
  6. ?>

Przed dodaniem do bazy wywołuję dla każdej porzebnej wartości funkcję czyli np:
  1. <?php
  2. $dodaj['wiek']=sprawdz($wartosci['wiek']);
  3. ?>

Czasem jednak przekazywana tablica $wartosc może nie zawierać $wartosci['wiek']. Czy zatem błędem jest przekazywanie tego do funkcji sprawdz? Czy konieczne jest uprzednie sprawdzenie, czy taka wartosc w tablicy istnieje?
bim2
Żeby nie otrzymać błędu NOTICE tak, ja bym rozwiązał to inaczej, a dokładniej array_map" title="Zobacz w manualu PHP" target="_manual :]
webdice
  1. <?php
  2. function sprawdz ($co = null)
  3. {
  4. if ($co !== null)
  5. {
  6. // tu kod funkcji.
  7. }
  8. }
  9. ?>


P.S. Dodaj odpowiednie bbcode.
MalyKazio
Array_map? Czyli mniej więcej jak?

  1. <?php
  2. // funkcja sprawdzajaca czy wartosc w tablicy istnieje
  3. function sprawdzczyjest($co,$domyslna) {
  4. if(isset($wartosci[$co])) {
  5. $wartosci[$co]=$wartosci[$co];
  6. } else {
  7. $wartosci[$co]=$domyslna;
  8. }
  9. return $wartosci[$co];
  10. }
  11.  
  12. $a = array('wiek', 'nrdomu', 'nrbuta', 'liczbadzieci'); // tablica z koniecznymi wartosciami $wartosci
  13. $b = array(18, 0, 40, 1); // wartosci domyslne
  14.  
  15. $wartosci = array_map("sprawdzczyjest", $a, $b);
  16. ?>


Cos takiego?
bim2
Nie
  1. <?php
  2. function sprawdz($sArray)
  3. {
  4. if(is_array($sArray)
  5. {
  6. return array_map('sprawdz', $sArray);
  7. }
  8. if(is_numeric($sArray) //sprawdz tutaj co chcesz, poprostu to nie obrobi pustych wartosci, bo ich nie bed
    zie ;]
  9. {
  10. return $sArray;
  11. } else {
  12. return null;
  13. }
  14. }
  15. $aArray = array_map('sprawdz', $_POST);
  16. ?>
MalyKazio
Ok, wiem już mniej więcej jak to zrobić.
Mam funkcję dodającą rekord do bazy danych. Wygląda to mniej więcej tak:
  1. INSERT INTO ludzie(id,nazwisko,imie,wiek,nrdomu,nrbuta,iloscdzieci) VALUES('',$wartosci['nazwisko'],$wartosci['imie'],$wartosci['wiek'],$wartosci['nrdomu'],$wartosci['nrbuta'],$wartosci['iloscdzieci'])


Potrzebuję tych wartości w tablicy $wartosci. Czasem jednak niektóre są nieustawione np. wiek, nrdomu, iloscdzieci. Dane tekstowe juz sobie przygotowałem wcześniej. Potrzebuję jeszcze kompletu danych typu INT, które nie zawsze są w tablicy $wartosci i w przypadku ich braku trzeba uzupełnić je wartościami domyślnymi. Stąd też kod:

  1. <?php
  2. // funkcja sprawdzajaca czy wartosc w tablicy istnieje i przypisująca jej wartosc domyslna w przypadku nieistnienia
  3. function sprawdzczyjest($co,$domyslna) {
  4. global $wartosci; // dodalem bo brakowalo wczesniej
  5. if(isset($wartosci[$co])) { // nie wiem czy nie zastąpić lepiej tego array_key_exists
  6. $wartosci[$co]=$wartosci[$co]; // tu jeszcze docelowo funkcja sprawdzajaca poprawnosc danych waliduj($wartosci[$co])
  7. } else {
  8. $wartosci[$co]=$domyslna;
  9. }
  10. return $wartosci[$co];
  11. }
  12.  
  13. $a = array('wiek', 'nrdomu', 'nrbuta', 'liczbadzieci'); // tablica z koniecznymi wartosciami $wartosci
  14. $b = array(18, 0, 40, 1); // wartosci domyslne
  15.  
  16. $wartosci .= array_map("sprawdzczyjest", $a, $b);
  17. ?>


BIM2 Twoje rozwiązanie, o ile moja skromna znajomość php mi podpowiada nie uzupełni mi brakujących danych w tablicy $wartosci, prawda? Ale dzięki za naprowadzenie na rozwiązanie smile.gif
bim2
nie, nie uzupełni. Ale jak chcesz żeby uzupełniało to w dużym uproszczeniu
  1. <?php
  2. echo _GET('jakas_wartosc');
  3. function _GET($sName)
  4. {
  5. return isset($_GET[$sName])?$_GET[$sName]:null;
  6. }
  7. ?>
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.