» »

if(empty($_POST["vsa-polja"]))?

if(empty($_POST["vsa-polja"]))?

Housy ::

Hello :D

Ali je v PHP možno z enim ukazom preverit, če so vsa polja izpolnjena?

Ker zdaj imam recimo en obrazec, v katerem so textboxi, checkboxi in radio buttoni. Trenutno preverjam takole (torej za vsako polje posebej):
if(empty($_POST["ime"]) || empty($_POST["naslov"]) || empty($_POST["telefon"]))

Se da zadevo uredit na drug, krajši način, recimo nekaj v tem smislu:
if(empty($_POST["vsa-polja"]))


Hvala in lp,
Housy

carota ::

Ne, ker skripta ne ve koliko je polj.
V prvem primeru preverjaš ali je katerokoli prazno, v drugim pa če so vsa prazna.

Lahko pa zapakiraš preverjanje v eno funkcijo in potem pokličeš:
if (soVsaPoljaIzpolnjena()) ...

Housy ::

Hvala za odgovor :)

dukedl ::

foreach funkcija in greš čez celo tabelo $_POST, nastaviš števec, da ti šteje polja...
lp dukedl

Ziga Dolhar ::

$potrebnaPolja = array ('ime', 'naslov', 'telefon', 'whathaveyou' ...);
foreach($potrebnaPolja as $polje) {
 if(!isset($_POST[$polje]) || empty($_POST[$polje])) {
  return false; # oziroma karkoli - recimo $manjkajočaPolja[] = $polje
 }
}


Skratka - sestaviš seznam (array) potrebnih polj, in nato preizkusiš proti $_POST-u.

Zgolj na števec polj (npr. "if count($_POST)"), se načeloma ne moreš zanesti, ker ti uporabnik lahko vanj naštepa (vsili) poljubna svoja polja.

-- edit: popravljen isset v !isset.
https://dolhar.si/

Zgodovina sprememb…

HardFu ::

Ubistvu ne rabis niti arraya $potrebnaPolja, ker lahko uporabis ze array pri imenih (name) polj.
Takole:
<input type="text" name="polja[ime]" value="" />
<input type="text" name="polja[naslov]" value="" />

Potem pa v PHPju samo nardis
if(count($_POST['polja']) < 2)
{
  return false;
}
http://codeable.io

technolog ::

Ne moreš, ti je že Žiga napisal, zakaj ne.

Netrunner ::

če so vsa polja obvezna potem bi jaz naredil tako:
$error = false;
foreach($_POST as $p){
  $p = trim($p);
  if(empty($p)){ $error = true; break; }
}
if($error == false){
 vse je ok naredi to ...
}else{
 niso vsa polja izpolnjena
}


Z foreach grem skozi cel post, počistim presledke in preverim če je prazen .. če je prazen ustavim loop in definiram $error na true ... potem samo preverim ali je $error true ali false

Če bi pa hotel vedet katera polja niso izpisana bi naredil pa nekako tako:
$error = array();
foreach($_POST as $k => $p){
  $p = trim($p);
  if(empty($p)) $error[] = $k
}
if(empty($error)){
  vse je ok naredi to ...
}else{
  echo 'Izpolni sledeča polja:';
  foreach($error as $e) { echo $e.'<br />'; }
}


ob loopanju skozi POST shranim ključe vseh postov ki niso izpolnjeni .. nato samo repverjam če je error array prazen . in če ni ga izpišem da se ve kaj ni izpolnjeni ..

Če pa bi rad preverjal samo določena polja da morajo biti izpolnjena pa bi naredil tako:

$check = array('polje1','polje2','polje3');
$error = array();
foreach($_POST as $k => $p){
  $p = trim($p);
  if(in_array($p,$check) && empty($p)) $error[] = $k
}
if(empty($error)){
  vse je ok naredi to ...
}else{
  echo 'Izpolni sledeča polja:';
  foreach($error as $e) { echo $e.'<br />'; }
}


podobno kot prejšnja kod, samod a sem dodal en array z obveznimi polji ter sem preverjal če trenutno polje obstaja med obeveznimi
Doing nothing is very hard to do... you never know when you're finished.

Zgodovina sprememb…

  • spremenilo: Netrunner ()

Ziga Dolhar ::

... kaj pa, ko zlobni uporabnik odstrani neko polje?
https://dolhar.si/

Netrunner ::

Ziga Dolhar je izjavil:

... kaj pa, ko zlobni uporabnik odstrani neko polje?


.. definiraš obvezna polja v array in preverjaš .. ali pa prešteješ če je dovolj izpolnjenih polja .. ali pa uporabiš domišljijo in narediš kaj tretjega ..
Doing nothing is very hard to do... you never know when you're finished.

Ziga Dolhar ::

Dej si preberi celo temo, no ;).
https://dolhar.si/

Netrunner ::

Ziga Dolhar je izjavil:


Zgolj na števec polj (npr. "if count($_POST)"), se načeloma ne moreš zanesti, ker ti uporabnik lahko vanj naštepa (vsili) poljubna svoja polja.


se nanašaš na to ? ... od primera do primera je odvisno .. pač tukaj števec za ta primer ne pride v poštev .. zato pa uporabiš array kjer si zabeležiš obvezna polja .. pa potem lahko vtika po želji kar hoče...
Doing nothing is very hard to do... you never know when you're finished.

Zgodovina sprememb…

  • spremenilo: Netrunner ()

Ziga Dolhar ::

https://dolhar.si/

Zgodovina sprememb…

technolog ::

Joj. Se ne čudim da so naše spletne strani čisto luknjaste, če jih pa taki pišejo. Edino tebi Žiga čestitke za izkazano znanje ;)

Še ena opcija je ta, da ko dokument generiraš, si zapomiš kera polja so v formi in si jih zapišeš v sejo al pa bazo. In ko preverjaš uporabnikov vnos, lahko potem ta dva arraya primerjaš. Vse to popolnoma dinamično.

Netrunner ::

technolog je izjavil:

Joj. Se ne čudim da so naše spletne strani čisto luknjaste, če jih pa taki pišejo. Edino tebi Žiga čestitke za izkazano znanje ;)


ciljaš tudi name?


Ziga Dolhar => pač jaz sem navedel primer .. ti si pa samo napisal kako..
Doing nothing is very hard to do... you never know when you're finished.

technolog ::

Ja, tudi. Tale tvoja koda, med drugim vedno vrne napako:

$error = false;
foreach($_POST as $p){
  $p = trim($p);
  if(empty($p)){ $error = true; break; }
}
if($error == false){
 vse je ok naredi to ...
}else{
 niso vsa polja izpolnjena
}


pa za božjo voljo ne mi delat $vat == false.

Zgodovina sprememb…

Netrunner ::

technolog je izjavil:

Ja, tudi. Tale tvoja koda, med drugim vedno vrne napako:


zakaj ? .. obrazloži .. res da sem jo na hitro spisal vendar se mi zdi povsem pravilna .. ok lahko bi se izognil prvi vrstici in malo drugače spisal 6 vrstico .. ma vse ostalo je na mestu ...

4 vrstica pravi ... ČE je $p prazen definiraj $error na true in ustavi foreach .. zakaj bi vedno vrnila napako ?
Doing nothing is very hard to do... you never know when you're finished.

technolog ::

Spregledal del kode, sori. Kar pa ne pomeni, da je koda funkcionalna.

Hm lej. Žiga ti je že prej napisal kaj delaš narobe. Sepravi, avtor teme hoče na enostaven način preverit če so vsa polja izpolnjena. To pomeni, da ne sme koda spustit čez userja, če ni napisal recimo številke računa. Ampak ti preverjaš samo tista polja, ki ti jih uproabnik pošlje. Uporabniku ne smeš zaupat, ker lahko številke računa sploh ni poslal, zato je v foreach sploh ne boš preveril in uporabnika registriral kasneje v kodi s prazno številko računa. Sej ni panike če na tak način nisi pomislu. Vsi se učimo.

Pa ko si predlagal, da vpiše vsa polja v array, avtor teme ravno sprašuje, če se da kako drugače.

p.s.: $a == false, zapiši naslednjič !$a.

Zgodovina sprememb…

Netrunner ::

med delovnim časom sem malo preletel slo-tech in uskočil v debato ter navedel easy primer, ki pa mogoče ni bil točno to kar bi avtor te teme potreboval :) .. kakorkoli upam da je iz vsega tega kaj pametnega odnesel in bo spisal skripto ki mu bo ustrezala...

p.s.: vem, samo če te zajebavajo dosti težji problemi začneš delat napake še pri osnovah ... rabim dopust :)
Doing nothing is very hard to do... you never know when you're finished.

Zgodovina sprememb…

  • spremenilo: Netrunner ()

technolog ::

Ti čist verjamem, je tok vroče, da se vsem po malem pegla :D

HardFu ::

technolog je izjavil:

Joj. Se ne čudim da so naše spletne strani čisto luknjaste, če jih pa taki pišejo. Edino tebi Žiga čestitke za izkazano znanje ;)

Še ena opcija je ta, da ko dokument generiraš, si zapomiš kera polja so v formi in si jih zapišeš v sejo al pa bazo. In ko preverjaš uporabnikov vnos, lahko potem ta dva arraya primerjaš. Vse to popolnoma dinamično.


Drzi, ampak avtor teme je vprasal ce lahko z enim ukazom preverimo, ce so ostala polja izpolnjena, odgovor je da, lahko. Varnost pa je druga zadeva, sam osebno vsako polje posebej preverjam, ker ima vsako polje drugacne informacije, in ne mores kar preverjat vse naenkrat.
http://codeable.io

Housy ::

Hvala vsem za odgovore :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

php dodajanje ključ array

Oddelek: Programiranje
6603 (482) DeeJay
»

Rabim pomoč pri PHP-ju.

Oddelek: Šola
5615 (452) Stari89
»

[JS / PHP] miniajax post

Oddelek: Programiranje
13946 (680) cobrica
»

c# class

Oddelek: Programiranje
342140 (1734) japol
»

Kako preveriti ali so vnosna polja izpolnjena?

Oddelek: Izdelava spletišč
111903 (1557) bluefish

Več podobnih tem