Jump to content
php.lv forumi

checkbox value


anonīms

Recommended Posts

Kā var zināt, vai piemēram labojot profilu ir ieķeksēts checkbox?

viens variants ir

if($_POST['checkboks']), bet tad vēlos zināt, kāds viņš tiek ievietots db?

vai arī checkbox value varu norādīt un ja viņš ir ieķeksēts tad tiek ievietots db vai, ja ir tukšs, tad db ievietot citu skaitli...

 

Kā tur īsti ir?

 

Ideja ir tāda, ka lietotājs savā /profils/ lapā ieķeksē checkboxu (Rādīt tavu e-pastu).

Link to comment
Share on other sites

Ja čekbokss nav ieķeksēts, tad atslēgas ar tādu nosaukumu nav $_POST masīvā. Līdz ar to:

if(array_key_exists('checkboxa_nosaukums',$_POST){

//ir ieķeksēts un uzstādam vērtību, kādu nu jāuzstāda

}

else {

//nav ieķeksēts un uzstādam, citēju,"..tad ievietot db citu skaitli" - uzstādām vērtību vienādu ar šo "citu skaitli"

}

Link to comment
Share on other sites

Kāpēc ne isset() ? Pārbaudi vienu vērtību, nevis skrien caur visu masīvu..

 

if(isset($_POST['checkboxa_nosaukums']){

//ir ieķeksēts un uzstādam vērtību, kādu nu jāuzstāda

}

else {

//nav ieķeksēts un uzstādam, citēju,"..tad ievietot db citu skaitli" - uzstādām vērtību vienādu ar šo "citu skaitli"

}

Link to comment
Share on other sites

Tom, principā es piekrītu, ka var būt arī tā, bet bija pirms pāris mēnešiem diskusija (kurā pats arī piedalījies ;) ), kurā bubu sniedza mani pārliecinošus argumentus "kāpēc".

Faktiski izskrien tam masīvam cauri tā vai tā - domāju, ka algoritmu sarežģītības ziņā nekas neatšķirās (taču eksperimentus neesmu veicis, tādēļ 100% neapgalvoju šo faktu).

No dokumentācijas (angļu val.)

Example #2 array_key_exists() vs isset()

isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.

<?php

$search_array = array('first' => null, 'second' => 4);

 

// returns false

isset($search_array['first']);

 

// returns true

array_key_exists('first', $search_array);

?>

Kas var būt aktuāli, bet var arī nebūt.

Link to comment
Share on other sites

Tas būtu visai slimi, ja array_key_exists skrietu visam masīvam cauri, t.i. darbotos O(n) laikā. Jēga no tādas funkcijas nekāda nebūtu.

Un tā kā tas ir labi zināms, ka php masīvi īstenībā ir heštabulas, tad parbaudīt to, vai masīvā eksistē elements ar dotu atslēgu, ir visai dabiski, ka O(1). Nu labi, īstenībā sliktākā situācijā var gadīties O(n), bet nu praktiski tu diez vai tādu gadījumu piedzīvosi (kad vairums masīva atslēgu heši sakrīt).

isset gadījumā tā vai tā pašam php ir jāmēģina dabūt elements ar doto atslēgu no asociatīvā masīva - respektīvi tieši tāda pat situācija array_key_exists gadījumam. Elements ar doto masīvu arī ir jāmeklē, gribi vai negribi.

Tā ka tas ir stila jautājums, nevis ātrdarbības. Iespējams, ka php ir kautkā hakaini iehakots, lai isset būtu ātrāks, jo tas kā nekā ir keywords, nevis funkcija, kuram atšķirībā no pēdējā nevajag aiztikt steku, taču otram nav nekāda pamatojuma būt lēnākam (ja nu vienīgi php developeru slikums to kārtīgi implementēt). Atšķirībai katrā ziņā jābūt minimālai.

Link to comment
Share on other sites

×
×
  • Create New...