Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Instrukcja if
Forum PHP.pl > Forum > Przedszkole
Niedowiarek
Witam, oto mam taki kod:

  1. <?php
  2.  
  3. $ig = $_POST['ig'];
  4. $ic = $_POST['ic'];
  5.  
  6. if(isset($ig && $ic)) {
  7. echo 'Twoja zamówienie wygląda następująco: ';
  8. echo $ic. 'cuksów oraz '.$ig.' gum.';
  9. } else {
  10. echo 'Nic nie zamówiłeś!';
  11. }
  12.  
  13. ?>


No i wywala mi taki błąd: Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ',' or ')' in C:\Program Files\WebServ\httpd\works.php on line 6

Coś linijką szóstą, chyba oczekuje ',' albo ')' - ale nie za bardzo rozumiem gdzie to wstawić.
skowron-line
Brakuje CI nawiasów.
Niedowiarek
Jak to brakuje, przcież tak wygląda isset
a if
  1. if()
no imam 4 nawiasy, gdzie mam jeszcze dodać?
skowron-line
  1. if(isset($ig && $ic))

na
  1. if(isset($ig) && isset($ic))

lub
  1. if(isset($ig, $ic))
Niedowiarek
Aaaa, myślałem że w isset można łączyć przez && brzydal.gif Dzięki wielkie

Okej, tyko teraz inny problem. Kiedy nic nie wpiszę w pola powinno się wyświetlić "Nic nie zamówiłeś!" a jest puste miejsce w polu na liczbę produktów.
Niktoś
To powinieneś raczej użyć zamiast
1.
1.
if(isset($ig) && isset($ic))
instrukcje or
1.
if(isset($ig) || isset($ic))

Nie to i to -lecz to lub to
Niedowiarek
Ale to nie rozwiązuje problemu tego że jak nic nie wpiszę w pola ilość cuksów i ilość gum to powinno się wyświetlić 'Nic nie zamówiłeś!' a tak nie jest ;/

Całość teraz wygląda tak:

  1. <title>Test</title>
  2. <form action="works.php" method="POST">
  3. <table border="1">
  4. <tr>
  5. <td>Ilość gum</td><td><input type="text" size="3" name="ig"></td>
  6. <tr></tr>
  7. <td>Ilość cuksów</td><td><input type="text" size="3" name="ic"></td>
  8. </tr><tr>
  9. <td><input type="submit" value="Wyślij"></td>
  10. </tr>
  11. </form>
  12. </body>
  13. </html>


  1. <?php
  2.  
  3. $ig = $_POST['ig'];
  4. $ic = $_POST['ic'];
  5.  
  6. if(isset($ig) || isset($ic)) {
  7. echo 'Twoje zamówienie wygląda następująco: ';
  8. echo $ic.' cuksów oraz '.$ig.' gum.';
  9. } else {
  10. echo 'Nic nie zamówiłeś!';
  11. }
  12.  
  13. ?>
Niktoś
if(strlen($ig>0) || strlen($ic)>O) {
Tutorial co robi isset.
Niedowiarek
Dzięki, a isset sprawdza czy dana zmienna istnieje, tak? W takim razie jak jej nie przypiszę wartość to ona istnieje, i jest pusta?
Ulysess
jeśli nie przypiszesz do zmiennej wartości tylko po prostu nagle gdzieś jej użyjesz to wtedy APACHE powinnien wywalić notice o ile jest odpowiednio oczywiście skonfigurowany.


Niktoś
Cytat
Dzięki, a isset sprawdza czy dana zmienna istnieje, tak?

Jeśli nic nie wpiszesz zmienna będzie istnieć ,ale będzie " " lub null tego do końca jeszcze nie rozwikłałem.
Badanie długości znaków jest jednym ze sposobów czy ktoś coś wpisał.
mortus
Cytat(Niedowiarek @ 26.12.2011, 17:50:06 ) *
Dzięki, a isset sprawdza czy dana zmienna istnieje, tak? W takim razie jak jej nie przypiszę wartość to ona istnieje, i jest pusta?

Nie, jeśli nie przypiszesz jakiejś zmiennej wartości (oprócz null), to ta zmienna nie istnieje. Przykład:
  1. if(isset($a)) {
  2. echo 'zmienna a istnieje<br/>';
  3. } else {
  4. echo 'zmienna a nie istnieje<br/>';
  5. }
  6.  
  7. $a = ''; // przypisujemy wartość, która jest pusta (empty), ale nie jest niczym (null)
  8. if(isset($a)) {
  9. echo 'zmienna a istnieje<br/>';
  10. } else {
  11. echo 'zmienna a nie istnieje<br/>';
  12. }

Podczas pierwszego uruchomienia Twojego skryptu zmienne $_POST['ig'] i $_POST['ic'] nie istnieją, czyli mają wartość null, zatem i zmienne $ig oraz $ic mają wartość null. Tutaj PHP powinien zgłosić uwagę.

Cytat(Ulysess @ 26.12.2011, 17:55:06 ) *
jeśli nie przypiszesz do zmiennej wartości tylko po prostu nagle gdzieś jej użyjesz to wtedy APACHE powinnien wywalić notice o ile jest odpowiednio oczywiście skonfigurowany.

W powyższym przykładzie PHP nie zgłosi żadnej uwagi i właśnie do tego służy isset().
Niktoś
Nie wiem jak za bardzo jest w PHP bo ja programuje w c#,ale
robisz Posta ,pola pozostają puste to w c#
jakaś zmienna string przyjmuje prawdopodobnie null lub "" właśnie tego nie wiem ,bo w przypadku int od razu wysypuję błędami .Dlaczego? Bo zarówno podczas konwersji "" lub null na int-nie może tego dokonać ,gdyż " " nie jest liczbą ,ani int nie jest typu nullable(można powiedzieć ,że w int null to 0).
Dlatego trudno mi się zorientować ,czy przy requesciie w PHP $_POST na pustą zmienną jest zwracany "" czy null coś zwracane musi być i tutaj nie ma ale.
mortus
Pole formularza HTML jest polem tekstowym, więc jak można się domyślić, w przypadku gdy takie pole nie zostanie uzupełnione, w tablicy $_POST pod indeksem będącym nazwą takiego pola zostanie przesłany pusty łańcuch znaków (czyli "" lub '' - jak kto woli).

Jeśli pole nie jest polem tekstowym (i chyba również polem select, czyli listą rozwijaną), to jego zawartość zostanie przesłana tylko wtedy, gdy zostanie określenia jego wartość (checkbox, radio muszą być np. zaznaczone).
Niktoś
Dzięki mortus trochę mi rozjaśniłeś.
Tak więc w wyżej wymienionym przypadku jak nic nie wpisze to isset i tak nie zadziała ,bo wartość będzie istnieć i przyjmie pusty łąńcuch znaków " ".
Więc badanie długości znaków ma tam sens.

A powiedz mi jeszcze po stronie klienta to chyba trochę inaczej wygląda,wartość niezdefiniowana przyjmuje undefined,tam jest tego trochę nawet więcej NaNA,undefined,null i " ".Czy sposób kreowania zmiennych po stronie klienta różni się od tego po stronie serwera??
mortus
Sprawdzanie długości przesłanego łańcucha znaków ma wtedy sens, jeśli rzeczywiście oczekujemy, że w polu znajdzie się łańcuch znaków i będzie on miał lub nie będzie miał określonej długości. Aby sprawdzić, czy pole tekstowe zostało wypełnione jakąś wartością wystarczy użyć w PHP funkcji empty(), ale stosuje się również porównanie do pustego łańcucha znaków, czyli:
  1. if(isset($_POST['login']) && $_POST['login'] != '') {
  2. // pole login zostało wypełnione
  3. }
  4. // jeśli pole jest polem tekstowym, to możemy użyć czegoś takiego
  5. if(!empty($_POST['login'])) {
  6. // pole login zostało wypełnione
  7. }

Inaczej wygląd sytuacja jeśli mówimy o polach typu checkbox, bo przy tego typu polach isset() bardzo się przydaje, żeby nie rzec, że jest koniecznością.

Jeśli chodzi o typy zmiennych w JS, po stronie przeglądarki, to:
NaN - Not a Number - przypisywana zmiennej, która nie jest prawidłowym wynikiem działań arytmetycznych,
undefined - to taka zmienna, która nie została zadeklarowana (słówko var) lub taka, która jest argumentem funkcji lub właściwością/polem obiektu i nigdy nie otrzymała wartości,
null - to zmienna pusta,
"" - to po prostu pusty łańcuch znaków (jego długość to 0).
Trochę więcej na ten temat możesz znaleźć tutaj (zajrzyj również do źródła artykułu).
Niktoś
Jeszcze raz dziękuje -masz plus ode mnie w profilu ;)Fajny tutorial JS -dodam do zakładki. .Jeszcze,aż tak się nie zagłębiałem w strukture html ,ale wydaje mi się ,że nawet select,checkbox jest tam traktowany jako tekst.Tzn.Przy zaznaczeni daje 1 przy odznaczeniu 0. Skrypt PHP ,czy c# obojętnie jaki traktuje to wartściami boolean czyli dla 1 True,dla 0 false ,ale mogę być w błędzie.W przypadku indeksowania 0 będzie wartością -1;

W JS po obserwacji ,to tam jest chyba ściśle odseparowane od typów int i string w przeciwieństwie do HTML gdzie wszystko traktowane jest jako string,ale tutaj też mogę być w błędzie.To takie moje indywidualne spostrzeżenia,które mogą być błędne.
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.