Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jak odeslat prázdnou "name", když není zaškrtnutá ve formuláři?

Mám formulář, kde je1 000 000 name. Všechno na radiobutony
http://skrytetitulky.cz/dotazniky/vysilani-titulky /dotaznik-pozemni.html

<td class="input"><input type="radio" name="ct_1_txt" value="ČT 1 TXT je"></td>
<td class="inputne"><input type="radio" name="ct_1_txt" value="ČT 1 TXT není"></td>

Pokud však někdo nevyplní položku, protože to neví, neodešle se prázdné value. Nejde to ošetřit nějakou fintou, abych nemusel dělat třetí sloupec tabulky?

<td class="input"><input type="radio" name="ct_1_txt" value="NEVÍM"></td>

Nešlo by to nějak "globálně" přes isset, či empty? Něco jako hned na začátek zpracování

if S_POST empty {
S_POST="";
}

Díky 150x za radu.

loading...
Předmět Autor Datum
Samozřejmě. Mělo by to jít takhle: for ($x=0; $x<count($_POST['ct_1_txt']); $x++) { $value = $_POS…
Flash_Gordon 16.01.2017 01:20
Flash_Gordon
Dík, jen se mi právě moc nechce, dělat to pro 130 položek. Nejde to nějak globálně pro všechny jední…
Kráťa 16.01.2017 01:43
Kráťa
Něco jako for ($x=0; $x<count($_POST['ct_1_txt']); $x++) { $value = $_POST['?'][$x]; if (!isset($va…
Kráťa 16.01.2017 01:44
Kráťa
// Pardon ano, premyslim.... No takhle. Neselektlé radiobuttony se nepřenáší, že jo. Ty si musíš z…
Flash_Gordon 16.01.2017 02:07
Flash_Gordon
Ty máš na mysli něco jiného. Ten formulář se z databáze nenačítá, pouze se do ní ukládá. Jsou tam pr…
Kráťa 16.01.2017 07:58
Kráťa
Jo, ten script <script> $(document).ready(function(){ $("#id_form").on("submit", function(){ $('inp…
Kráťa 16.01.2017 08:10
Kráťa
Jj. Drobny preklep. Prejmenuj fungovani-titulku-zpracovani2.php na fungovani-titulku-zpracovani.php.…
Flash_Gordon 16.01.2017 08:26
Flash_Gordon
Takže do formuláře by asi stačil script, který by udělal z neodeslaného radiobutonu odeslaný s value…
Kráťa 16.01.2017 08:29
Kráťa
nemam odskusane pri radio buttonoch, ale pri checkboxe sa robi finta, ze vyrobis input typu hidden s…
wam_Spider007 16.01.2017 19:32
wam_Spider007
Bezva. Vyzkoušel jsem, nastyloval u toho width a hight na 1px, dal tomu value="nevyplněno" a funguje…
Kráťa 17.01.2017 01:34
Kráťa
ono by si nemusel robit 65 inputov, keby si pouzil na renderovanie HTML trochu viac PHP. staci ti a…
wam_Spider007 17.01.2017 10:45
wam_Spider007
Že mě to array nenapadlo hned, když jsem začínal. Měl bych 1000x méně práce, kdyby byl i formulář v…
Kráťa 17.01.2017 10:56
Kráťa
prepisat to je podla mna otazka chvilky. a do buducna budes mat aspon udrziavatelnejsi kod. poslední
wam_Spider007 17.01.2017 14:56
wam_Spider007
A co udělat fintu, předělat radiobutony na checkboxy a nastylovat je, aby vypadaly kulatě? Šlo by to…
Kráťa 16.01.2017 09:00
Kráťa
Mas to udelane v tom mem poslednim postu. Netreba.
Flash_Gordon 16.01.2017 09:04
Flash_Gordon
Děkuji ti mnohokráte za pomoc, ale "obětuji se" a udělám tu fintu od wam_Spider007, protože to bude…
Kráťa 17.01.2017 01:39
Kráťa
Ja podobnou vec delal tak, ze jsem na to pouzil funkci, neco ve stylu (byl to jiny jazyk a uz je to…
gilhad 17.01.2017 13:01
gilhad

// Pardon ano, premyslim....

No takhle. Neselektlé radiobuttony se nepřenáší, že jo.
Ty si musíš z databáze vyjet všechny stanice do pole (to jsou všechny možné hodnoty, které user hypoteticky může zaškrtnout).

Třeba takto (neznam tabulku):

1) Vytvoření pole $stanice se všemi možnými stanicemi, které může uživatel vybrat:

$sql = mysql_query("select nazev from stanice");
$stanice = array();

while ($row_stanice = mysql_fetch_assoc($sql))
    $stanice[] = $row_stanice;

2) Nyní předpokládejme, že v poli $stanice jsou stanice z databáze.
No a tyto stanice porovnáš s tím, co uživatel zaškrtl:

$nenalezene_stanice = array();
$zaskrtle_stanice = array();
foreach($_POST as $key => $value) {
  if (!in_array($key, $stanice)) {  // stanici uživatel nezaškrtl
    $nenalezene_stanice[] = $key;  // Přidáme ji teda do pole nenalezených
  else
    $zaskrtle_stanice[] = key;

}
}

3) No a teď už máš tři pole.
$stanice Obsahuje všechny možné volby
$nenalezene_stanice[] Obsahuje stanice, které uživatel nezaškrtl.
$zaskrtle_stanice Obsahuje stanice, které uživatel zaškrtl + nějaké zbylé hodnoty zaslané metodou post, na to bacha.

A NEBO HOTOVÉ JEDNODUCHÉ ŘEŠENÍ za pomocí jQuery v příloze - rovnou vybere nezaškrtlé checkboxy a pošle na server.
Přibylo jen políčko, které může být hidden $not_selected_stations.

Ty máš na mysli něco jiného. Ten formulář se z databáze nenačítá, pouze se do ní ukládá. Jsou tam právě vypsány všechny stanice a lidé budou vyplňovat, jestli jim jde u nich teletext, a titulky, ne volit stanice (protože někde nefunguje to, cop jinde ano). Jukni na něj
http://skrytetitulky.cz/dotazniky/vysilani-titulky /dotaznik-kabel.html

<tr>
<td class="stanice">ČT 1</td>
<td class="input"><input type="radio" name="ct_1_txt" value="ČT 1 TXT je"></td>
<td class="inputne"><input type="radio" name="ct_1_txt" value="ČT 1 TXT není"></td>
<td class="input"><input type="radio" name="ct_1_txt_funguji" value="ČT 1 TXT_funguji"></td>
<td class="inputne"><input type="radio" name="ct_1_txt_funguji" value="ČT 1 TXT nefungují"></td>
<td class="input"><input type="radio" name="ct_1_dvb_funguji" value="ČT 1 DVB fungují"></td>
<td class="input"><input type="radio" name="ct_1_dvb_funguji" value="ČT 1 DVB nefungují"></td>
</tr>

<tr>
<td class="stanice">ČT 1 HD</td>
<td class="input"><input type="radio" name="ct_1_hd_txt" value="ČT 1 HD TXT je"></td>
<td class="inputne"><input type="radio" name="ct_1_hd_txt" value="ČT 1 HD TXT není"></td>
<td class="input"><input type="radio" name="ct_1_hd_txt_funguji" value="ČT 1 HD TXT funguji"></td>
<td class="inputne"><input type="radio" name="ct_1_hd_txt_funguji" value="ČT 1 HD TXT nefungují"></td>
<td class="input"><input type="radio" name="ct_1_hd_dvb_funguji" value="ČT 1 HD DVB fungují"></td>
<td class="input"><input type="radio" name="ct_1_hd_dvb_funguji" value="ČT 1 HD DVB nefungují"></td>
</tr>

Mě jde o to, když dělám zpracování,

$ct_1_txt = $_POST['ct_1_txt'];
$ct_1_txt_funguji = $_POST['ct_1_txt_funguji'];
$ct_1_dvb_funguji = $_POST['ct_1_dvb_funguji'];
$ct_1_hd_txt = $_POST['ct_1_hd_txt'];
$ct_1_hd_txt_funguji = $_POST['ct_1_hd_txt_funguji'];
$ct_1_hd_dvb_funguji = $_POST['ct_1_hd_dvb_funguji'];

dát na začátek něco, co by udělalo z těch neodeslaných "", jelikož někdo vyplní třeba jen 10 stanic (ze 130 či kolika) a u dalších ani neví, nebo neví, jestli u nich jdou na HD vysílání (protože ho ani nemá) titulky. Tak abych nemusel dělat třetí sloupec "nevím" a lidé nemuseli vyplňovat celý formulář, když chtějí poslat třeba pouze teletext u ČT.

Jo, ten script

<script>
$(document).ready(function(){
 $("#id_form").on("submit", function(){
   
   $('input:radio:not(:checked)').each(function() {
   $('#not_selected_stations').val($('#not_selected_stations').val()+";"+$( this ).val());
});
 })
 });
 </script>

se mi líbí, že to udělá ono '#not_selected_stations'

ono by si nemusel robit 65 inputov, keby si pouzil na renderovanie HTML trochu viac PHP.

staci ti array televiznych stanic a pre kazdu vygenerovat vo foreach nieco taketo (pseudo kod):

$zoznam_stanic = array("CT1", "CT2", "Markiza", ...);
$i = 0;
foreach ($zoznam_stanic as $nazov_stanice)
{
<tr>
<td class="stanice">$nazov_stanice</td>
<td class="input"><input type="radio" name="teletext[$i]" value="$nazov_stanice TXT je"></td>
<td class="inputne"><input type="radio" name="teletext[$i]" value="$nazov_stanice TXT není"></td>
<td class="hidden"><input type="hidden" name="teletext[$i]" value="empty></td>
<td class="input"><input type="radio" name="txt_funguji[$i]" value="$nazov_stanice TXT funguji"></td>
<td class="inputne"><input type="radio" name="txt_funguji[$i]" value="$nazov_stanice TXT nefungují"></td>
<td class="hidden"><input type="hidden" name="txt_funguji[$i]" value="empty></td>
<td class="input"><input type="radio" name="dvb_funguji[$i]" value="$nazov_stanice DVB fungují"></td>
<td class="input"><input type="radio" name="dvb_funguji[$i]" value="$nazov_stanice DVB nefungují"></td>
<td class="hidden"><input type="hidden" name="dvb_funguji[$i]" value="empty></td>
</tr>
$i++;
}

Pricom $i iterujes od 0.

Nasledne v poste potom vies ku kazdej veci pristupovat ako k dvojrozmernemu polu. $_POST['teletext'][0]
Vies si aj potom spravit cyklus podla poctu prvkov v poli $_POST['teletext'].

for ($i = 0; $i < count($_POST['teletext']); $i++)
{
echo $_POST['teletext'][$i].'-'.$_POST['txt_funguji'][$i]; //atd.
}

Ja podobnou vec delal tak, ze jsem na to pouzil funkci, neco ve stylu (byl to jiny jazyk a uz je to dlouho)

function nacti(polozka) {
  if isset($POST[$polozka]) return $POST[$polozka];
  return "NEVIM"
}

$ct_1_txt = nacti('ct_1_txt');
$ct_1_txt_funguji = nacti('ct_1_txt_funguji');
$ct_1_dvb_funguji = nacti('ct_1_dvb_funguji');

Zpět do poradny Odpovědět na původní otázku Nahoru

loading...