Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Jak sprawdzić, czy zmienne istnieję?
Forum PHP.pl > Forum > Przedszkole
petylyl
Witam,
Mam pewnien problem. Chciałbym, aby PHP sprawdził, czy zbiór zmiennych istnieje. Jeśli przynajmniej jedna z nich nie istnieje (uzytkownik nie wpisał danych), to wyskakuje komunikat o określonej treści. Wymyśliłem coś takiego:

Kod
if (isset($imie) && isset($nazwisko) && isset($ulica) && isset($numer_domu) && isset($kodp) && isset($miejsc))
    {
    echo '<h1> Zamówienie zostanie wysłane na adres:</h1>'.'<br />';
    echo '<font size="5">';
    echo $imie;
    echo ' ';
    echo $nazwisko.'<br />';
    echo $ulica;
    echo ' ';
    echo $numer_domu.'<br />';
    echo $kodp;
    echo ' ';
    echo $miejsc;
    echo '<font/>';
    }
else
    {
    echo 'Na poprzedniej stronie nie został podany adres!';
    }


Teraz problemy:
1) Rezultaty są nie do końca takie, jakie bym chciał. Wystarczy bowiem, że wpiszę w formularz chociażby jedną zmienną, na przykład $imie, a zostaje ona wydrukowane.
2) Gdy nie wpiszę żadnej zmiennej (zostawie te pola puste, php mimo wszystko nie drukuje mi komunikatu zawartego w "else".

Bardzo proszę o podpowiedzi, jak sobie z tym problemem poradzić. Szukałem w google takich informacji, ale tam wyjaśnienia dotycza funkcji isset() do jjednej zmiennej, a mnie chodzi zastosowanie jej do kilku zmiennych.

Pozdrawiam
D.Z
Foxx
isset to nie jest dobre rozwiązanie: po wysłaniu formularza wszystkie zmienne z niego istnieją, mogą jedynie być puste jeżeli nie wypełniono pola - isset() zwróci true dla każdej z nich.

Zamiast isset() uzyj empty() a więc:
  1. <?php
  2. if(!empty($imie) && !empty($nazwisko) && ...)
  3. ?>


Poza tym jeżeli te zmienne pochodzą z formularza (metodą POST) to:
  1. <?php
  2. // tak:
  3. $_POST['imie']
  4. // zamiast:
  5. $imie
  6. ?>
petylyl
Czyli przy posługiwaniu się zmiennymi w funkcjach (np. empty), jeśli pochodzą one z formularza przesłanego metodą $_POST, należy to zrobić tak?

Kod
if (!empty($_POST['imie']) && !empty($_POST['nazwisko']) && !empty($_POST['ulica']) && !empty($_POST['numer_domu']) && !empty($_POST['kodp']) && !empty($_POST['miejsc'])
    {
    echo '<h1> Zamówienie zostanie wysłane na adres:</h1>'.'<br />';
    echo '<font size="5">';
    echo $imie;
    echo ' ';
    echo $nazwisko.'<br />';
    echo $ulica;
    echo ' ';
    echo $numer_domu.'<br />';
    echo $kodp;
    echo ' ';
    echo $miejsc;
    echo '<font/>';
    }
else
    {
    echo 'Na poprzedniej stronie nie został podany adres!';
    }



Zrobiłem tak jak sugerowałeś, ale coś jest nie tak, bo nic się nie wyświetla (mam w Linuxie chyba wyłączone komunikaty o błędach). Dla pewności przesyłam cały kod skryptu (jak widac pochodzi on z książki Vademecum Prof. - staram się dodac coś od siebie np. ta procedura sprawdzająca zmienne tongue.gif):

Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
  <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  <meta name="Description" content=" [wstaw tu opis strony] " />
  <meta name="Keywords" content=" [wstaw tu slowa kluczowe] " />
  <meta name="Author" content=" [dane autora] " />
  <meta name="Generator" content="kED" />

  <title>Sklep</title>

</head>
<body>

<h1>Cz�i samochodowe </h1>
<h2>Wyniki zam�ienia</h2>

<?php

$iloscopon = $_POST['iloscopon'];
$iloscoleju = $_POST['iloscoleju'];
$iloscswiec = $_POST['iloscswiec'];
$jak = $_POST['jak'];
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$ulica = $_POST['ulica'];
$numer_domu = $_POST['numer_domu'];
$kodp = $_POST['kodp'];
$miejsc = $_POST['miejsc'];
    
$ilosc = 0;
$ilosc = $iloscopon + $iloscoleju + $iloscswiec;

$wartosc = 0.00;

define('CENAOPON', 20.4);
define('CENAOLEJU', 5.5);
define('CENASWIEC', 50.1);


//oblicza cen�netto
$wartosc = $iloscopon * CENAOPON + $iloscoleju * CENAOLEJU + $iloscswiec * CENASWIEC;

//Oblicza cen�brutto
$stawkavat = 0.22; //Stawka VAT wynosi 22%
$resztavat = 0.00;
$brutto = 0.00;
$resztavat = $wartosc * $stawkavat;
$brutto = $wartosc + $resztavat;

if( $iloscoleju < 10)
    $znizka = 0.00;
if( $iloscoleju >= 10 && $iloscopon <= 49)
    $znizka = 0.05;
if( $iloscoleju >= 50 && $iloscopon <= 99)
    $znizka = 0.10;
    
$rabat = 0.00;
    if( $znizka > 0)
$rabat = $brutto * $znizka;

$cenaporabacie = $brutto - $rabat;

//warunek wywietlajcy tekst adekwatny to wprowadzonych danych
if( $ilosc == 0 )
    {
    echo '<font color="red"><b>';
    echo 'Na poprzedniej stronie nie zostao zoone adne zam�ienie<br />';
    echo '</font></b>';
    }
if( $ilosc > 0)
    {
    echo 'Zam�ionych cz�i: '.$ilosc.'<br />';
if( $iloscopon > 0)
    echo $iloscopon.' opon<br />';
if( $iloscoleju > 0)
    echo $iloscoleju.' oleju<br />';
if( $iloscswiec > 0)
    echo $iloscswiec.' wiec<br />';
    echo 'Cena netto: '.number_format($wartosc, 2).' '.PLN.'<br />';
    echo 'Cena brutto: '.number_format($brutto, 2).' PLN<br />';
    echo 'Tw� rabat: '.number_format($rabat, 2).' PLN<br />';
if($znizka > 0)
    echo 'Cena brutto (z rabatem): '.number_format($cenaporabacie, 2).' PLN<br />';
if( $ilosc > 0)
    echo '<p>Zam�ienie przyj�e o ';
    echo date('H:i. jS F');
    echo '</p>';
    }

if (!empty($_POST['imie']) && !empty($_POST['nazwisko']) && !empty($_POST['ulica']) && !empty($_POST['numer_domu']) && !empty($_POST['kodp']) && !empty($_POST['miejsc']))
    {
    echo '<h1> Zamówienie zostanie wysłane na adres:</h1>'.'<br />';
    echo '<font size="5">';
    echo $imie;
    echo ' ';
    echo $nazwisko.'<br />';
    echo $ulica;
    echo ' ';
    echo $numer_domu.'<br />';
    echo $kodp;
    echo ' ';
    echo $miejsc;
    echo '<font/>';
    }
else
    {
    echo 'Na poprzedniej stronie nie został podany adres!';
    }

/*switch($jak)
{
  case 'a';
  echo '<p>Stały klient.';
  break;
  case 'b';
  echo '<p>Reklama telewizyjna.';
  break;
  case 'c';
  echo '<p>Książka telefoniczna.';
  break;
  case 'd';
  echo '<p>Znajomi.';
  break;
} */




?>

</body>
</html>
Foxx
1. Przy posługiwaniu się gdziekolwiek w skrypcie, nie tylko w funkcjach. Po prostu dane pochodzące z formularza znajdują się w tablicach globalnych _POST lub _GET w zależności od użytej metody.
Ale zauważ, że w Twoim skrypcie na początku następuje przypisanie wszystkich zmiennych z tablicy _POST do zwykłych zmiennych:
  1. <?php
  2. $iloscopon = $_POST['iloscopon'];
  3. // itd.
  4. ?>


więc możesz używać tych skróconych, wcześniej nie wiedziałem o tym fragmencie kodu (chociaż nie wiem po co to przypisywanie).

2. Po prostu włącz sobie raportowanie błędów bo bez tego ciężko pracować - delikatnie mówiąc. Jak chcesz znajdować swoje błędy?

3. Nie pokazałeś formularza, którym wysyłasz dane - może masz tam jakiś błąd bo gdy podstawiam na sztywno wartości pod zmienne $iloscopon itd to wszystko wygląda dobrze. Pokaż formularz albo opisz dokładniej co, kiedy i gdzie się nie wyświetla smile.gif
petylyl
Jeśli chodzi o kod formularza to jest on na 100% poprawny, ponieważ wcześniej zanim zacząłem kombinować z funkcją emnty to wyświetlało dane z formularza (także adres). Włączyłem obsługę błędów i pokazuje mi się coś takiego:


Kod
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/srv/www/htdocs/przetworzzamowienie.php' (include_path='.:/usr/share/php5:/usr/share/php5/PEAR') in Unknown on line 0


Hm...
Foxx
No co można dodać - problem z plikiem przetworzzamowienie.php - sprawdź ścieżki, kod includowania, plik...
petylyl
Otwarłem ten plik z innego katalogu w takiej postaci, w jakiej był wcześniej i wtedy znalazłem błąd:

Kod
    echo 'Cena netto: '.number_format($wartosc, 2).'[b] '.PLN.'<br />';[/b]
    echo 'Cena brutto: '.number_format($brutto, 2).' PLN<br />';
    echo 'Tw� rabat: '.number_format($rabat, 2).' PLN<br />';


Później po dodaniu instrukcji if-else zadziałało! Dziękuję 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.