Autor Zpráva
kikinet
Profil
Zdravím,
mám formulář dejme tomu s 25ti poli, a chci vytvořit podmínku, která odešle jen vyplněná pole do "soubor.php".
Všechno se odesílá a správně zapisuje do souboru, ale problém je ten, že se zapíší i pole, která nejsou vyplněná...
Jediné co mě napadlo je dát každou položku zvlášť do podmínky, ale to se mi zdá zbytečně moc opisné...
if ($pole1!="") {
 zapiš do "soubor.php"}
elseif ($pole2!="") {
 zapiš do "soubor.php"}
elseif....

Zatím to mám takhle (což nefunguje):
if ($pole1!="" || $pole2!="" || $pole3!="" || ...) {
 zapiš do "soubor.php"}

Dá se to udělat i jinak než, abych vytvářela pro každé pole podmínku? Díky
panther
Profil
kikinet:
pokud máš názvy pole1 - polex, myslím, že by bylo na místě použít skutečně pole, tedy pole[]. Při zpracování ho projdeš foreachem a jednoduchou podmínkou zjistíš, zda je položka prázdná či nikoliv.

Pokud se nejedná o související hodnoty (a tedy není vhodné použít pole), musíš mít vícero podmínek.
Str4wberry
Profil
Případně použít přímo pole $_POST/$_GET.

Podmínka mi v tomto případě přijde možná zbytečná. Pokud je formulářové políčko prázdné, zapsání této prázdné hodnoty by nemělo ničemu vadit. :–)

Jinak pozor na zápis dat od uživatele, zvláště do souboru, který lze spustit, může to představovat bezpečnostní risiko.
kikinet
Profil
Str4wberry:
No jenže ono se to zapíše jako
<div class="box"><div class="text">nějaká proměnná</div></div>
a pak to tudíž vadí...
Ty soubory mám zabezpečené :)


panther:
No některé spolu souvisí a některé ne :D Pročtu si ten odkaz
Tori
Profil
kikinet:
Koukněte na vlákno Součet počet položek v poli, ale jen ty, které mají hodnotu
kikinet
Profil
Tori:
Tak jsem to teda zkusila přepsat. Vypadá to takhle:
$ostatni = array ('jedna', 'dva', 'tri ', 'ctyri', 'pet');

if (pokud se odešle formulář) {
  foreach ($pole as $hodnota){
    if ($hodnota!=""){
      $pocet++;}
;}
echo $pocet ;}
Jenže tohle mi vypíše 5 i když vyplním jen 2 pole...
panther
Profil
kikinet:
co je v promenne $pole?
kikinet
Profil
panther:
A pardon, moje chyba, zkopírovala jsem blbý řádek
$pole = array ('udaj1', 'udaj2', 'udaj3', 'udaj4', 'udaj5');
panther
Profil
kikinet:
nevím, co se ti nelíbí.

Pokud procházíš foreachem pole $pole, které jsi teď poslala, tak to samozřejmě žádné prázdné položky nemá, to nevidíš? V proměnné $hodnota se bude postupně střídat udaj1 - udaj5.
Keeehi
Profil
if ( !empty($_POST[$hodnota]) ) {
kikinet
Profil
panther:
No jo jenže já potřebuju, aby to spočítalo jen pole, která jsou vyplněná. Protože potřebuji odeslat jen pole ve kterých něco je. Ale ono to spočítá i ty, které jsou prázdné
Keeehi
Profil
kikinet:
Protože tam máš špatnou podmínku. Pokud posíláš formulář postem a inputy mají name udaj1, udaj2, ... tak si zaměň podmínku za tu mojí a bude to počítat správně.
kikinet
Profil
Keeehi:
Děkuji, vyzkouším :)


Keeehi:
Tak teď to pro změnu počítá pokaždé 0:
foreach ($pole as $hodnota){
  if (!empty($_POST[$hodnota])){
    $pocet++;}}
echo $pocet;}
Pokud to mám teda zapsané dobře...?
panther
Profil
kikinet:
Pokud to mám teda zapsané dobře...?
pravděpodobně, ne, když vychází vždy nula. Dáváš sem útržky kódu, lze jen hádat, proč vychází nula: nic neodesíláš metodou post.
kikinet
Profil
panther:
To není útržek kódu, je to celý kód. Zbytek mám zkomentovaný.
$odeslat = $_POST['odeslat'];
$pole = array ('udaj1', 'udaj2', 'udaj3', 'udaj4', 'udaj5');

if($odeslat == "Odeslat") {
  foreach ($pole as $hodnota){
    if (!empty($_POST[$hodnota])){
      $pocet++;}}
  echo $pocet;}

Toto je celý nezkomentovaný kód
panther
Profil
kikinet:
a problem je kde? Existuji ve formulari pole name=udaj1 az name=udaj5?

Na zacatku bys mela promenno $pocet deklarovat, aby bylo k cemu pricitat, takze $pocet = 0.

Jinak v tomto kousku kodu chyba neni, jestli to stale nepocita, bude jinde.

To není útržek kódu, je to celý kód
je to cely PHP kod, bez dalsiho kontextu, ktery je v tomto pripade pravdepodobne chybny.
Šéva
Profil
kikinet:

<form action="" method="post">
<input type="text" name="pole[0]"><br>
<input type="text" name="pole[1]"><br>
<input type="text" name="pole[2]"><br>
<input type="text" name="pole[3]"><br>
...
<input type="submit" name="odeslat" value="OK">
</form>
<?php
if(IsSet($_POST["odeslat"]))
{
  $hodnoty=array();
  $i=0;
  foreach($_POST["pole"] as $hodnoty)
  {
      if(!empty($hodnoty))
      {
       echo "$hodnoty<br>";
       $i++;
      }
  }
  echo $i;
}
?>
chybí ošetření vstupních údajů v případě zápisu do souboru,v případě používání doporučuju dodělat
kikinet
Profil
panther, Šéva:
Už to počítá, stačilo přidat pocet='0'. Jen nevím jak vypsat obsah pole co uživatel vyplní? echo "$hodnota"; vypíše názvy prvků pole.
panther
Profil
kikinet:
v kódu v [#15] budou hodnoty v $_POST[$hodnota], tedy $_POST['udaj1'] - $_POST['udaj5'].
kikinet
Profil
panther:
Tak úplně nechápu co jste tím chtěl říct... echo $_POST['udaj1'] ani nic tomu podobného nefunguje. Ale nejspíš jste to myslel jinak
panther
Profil
kikinet:
už několikrát jsem ti psal, že vaříme z vody. Jak vypadá HTML formulář, z kterého chodí data?

ani nic tomu podobného nefunguje.
jaktože ne? Přesně to jsi nám kódem v [#15] řekla.

Klíše v POST jsou totožné s jednotlivými hodnotami atributů name u formulářových polí. Máš-li tedy např. <input name="policko">, jeho hodnota po odeslání bude dostupná skrze $_POST['policko'].
kikinet
Profil
panther:
Super už to jede. Promiň, učím se sama, takže mi to jde pomaleji. Díky za trpělivost.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: