Autor Zpráva
nekdosproblemem
Profil *
Ahoj. Prosim vás potřebuju udělat aby když zaškrtnu checkbox tak aby zůstal zaškrtnutej i po refreši stránky a abych v php nebo někde zjistil jestli je zaškrtnutej nebo ne a nechci se u toho přesměrovávat na jiný script. zkoušel jsem že jako :

    <?php
    echo '<form name="myform" method="POST">';
    echo '<div align="center"><br>';
    echo '<input type="checkbox" name="option1" value="Milk"> Milk<br>';
    
    if(isset($_POST['Milk'])){
            echo "box1 1";
    }else{
            echo "box1 0";
    }
     
     
    ?>

nicméně to jako že ne. Možná by to šlo js nebo sešnem nějak udělat ale to nevim jak. Děkuji za pomoc.
Taps
Profil
nekdosproblemem:
zkus využít session
nekdosproblemem
Profil *
Taps :

Nevim jak to udělat. Nemůžeš mě nakopnout?
jenikkozak
Profil
nekdosproblemem:
Předně v PHP bys měl kontrolovat, jestli existuje v poli $_POST prvek, který má klíč stejný jako je atribut name položky formuláře, ne jeho value.

Podrobnosti k práci se sessiony si dohledej, jen stručně:
1) Na každé stránce, kde chceš s nimi pracovat, hned na začátku skriptu použij funkci session_start().
2) Do sessiony se pak zapisuje pomocí zápisu $_SESSION["tvuj_nazev_sessiony"]="tvoje_hodnota_sessiony";. Takže se s ní pracuje jako s jinými poli. Hodnotu vypíšeš tedy třeba takto: echo "Hodnota mé sessiony je: ".$_SESSION["tvuj_nazev_sessiony"];.
nekdosproblemem
Profil *
jenikkozak : Jo. děkuju. Umim praovat se sešnama.... ale můžeš mi napsat jak mám do něj uložit to jestli je ta věc zaškrtnutá nebo ne, tak aby to při dalšim refreči už vědět. Mě to prostě nejde.
panther
Profil
nekdosproblemem:
Mě to prostě nejde.
co a jak jsi zkoušel, co nefunguje?

Checkbox se na server odesílá jen pokud je zaškrtnutý. Nezaškrtnuté se vůbec neodesílají.
jenikkozak
Profil
nekdosproblemem:
Mě to prostě nejde.
Když umíš se sessionami pracovat, tak bys neměl mít problém. Ukaž ten svůj skript, ať se někam dostaneme.
Tori
Profil
nekdosproblemem:
aby zůstal zaškrtnutej i po refreši stránky
Jestliže se neodesílá formulář, ale jen obnovíte stránku, tak se PHP nedostane k hodnotám z formuláře. Použila bych cookie, nastavovanou javascriptem, kde se bude po kliknutí na checkbox updatovat hodnota. viz document.cookie, příklad a další.
nekdosproblemem
Profil *
Tori: Ano. cookie, nastavovanou javascriptem, kde se bude po kliknutí na checkbox updatovat hodnota toho přesně jsem se bál.


No ale co teda nechápu je že to nefunguje stejně jako s odesláním třeba stisknutého tlačítka ... jako takhle :
<form name="form">
    <input type="checkbox" name="form2">
    <input type="button" value="ověřit" onClick="over();">
</form>
<script>
    function over(){
        if (document.form.form2.checked==true)
            window.alert("pole bylo zaškrtnuto");
        else
            window.alert("pole nebylo zaškrtnuto");
    }
</script>
<?php
header("refresh: 2 second");
?>
nekdosproblemem
Profil *
prosimvás tak mám tohle teda ... a potřebuju poradit aspoň s jednou věcí... jak to z toho jQvery dostanu na server. Tu informaci že je to žaškrtnuté. Děkuji

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=uft-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title>Test</title>
  <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
  <script type="text/javascript">
  
  $(document).ready(function() { 
  
    
    if($('input[name=foo]').is(':checked')){
        $('input[name=foo]').attr('checked', true); alert("true"); 
  }else{
       $('input[name=foo]').attr('checked', false); alert("false"); 
  }
    
    
});


  </script>
  </head>
  <body>
     <input type="checkbox" name="foo" value="bar" /> <!-- checkbox -->
  </body>
</html>
Tori
Profil
nekdosproblemem:
jak to z toho jQvery dostanu na server
Pokud nepotřebujete zároveň dostat i nějaká data ze serveru, stačí vám pingnout server (resp. nějaký PHP skript, kterému předáte změněnou hodnotu), i bez jQuery.
nekdosproblemem
Profil *
Tori:
Ho takhle.. já tomu moc nerozumim. J8 prostě potřebuju jenom na serveru a tedy v php poznat jestli je to box zaškrtnutej.
nekdosproblemem
Profil *
asi je to tajemství
Tori
Profil
Napíšete si nějaký php skript, který bude ukládat do session stav checkboxu. Stav zjistí z $_GET['foo']. Z JS mu stav pošlete po každé změně. Vypadalo by to asi nějak takhle, netestovala jsem, mělo by to fungovat pro checkboxy a přepínače.
function ping(params) {
    var temp = new Image();
    temp.src = './jmenoSkriptu.php?' + params;
}

function ulozStav(el) {
    var params = encodeURIComponent(el.name) + '=' + (el.checked ? '1' : '0');
    ping(params);
}
<input type="checkbox" name="foo" value="bar" onclick="ulozStav(this);" />
nekdosproblemem
Profil *
Já k tomu nemůžu přidávat žádný další script. Tohle všechno se musí dít v rámci jednoho souboru. Už to řešit 3 dny tuhle blbost.
Tori
Profil
nekdosproblemem:
No tak to může do session ukládat klidně i ten samý skript, který zobrazuje formulář.
Alphard
Profil
nekdosproblemem:
Už to řešit 3 dny tuhle blbost.
To není naše chyba ani náš problém.

Tori: Ano. cookie, nastavovanou javascriptem, kde se bude po kliknutí na checkbox updatovat hodnota toho přesně jsem se bál.
Tak se bojte, ale bylo by to nejjednodušší řešení. Najít si funkci pro zápis a čtení cookie, pak už jen pár podmínek. Sice by byla funkčnost závislá na javascriptu, ale to je váš současný script taky.
Zpětně se omlouvám, přehlédl jsem v prvním příspěvku, že potřebujete ukládat stav.

A jestli trváte na spojení s PHP, ve FAQ jsem vypsal snad všechny možnosti.

Ale stejně si myslím, že odkaz na FAQ odpovídá na problém. Je tam uveden přímý odkaz na http://api.jquery.com/jQuery.get/, který byl nakonec použit.
nekdosproblemem
Profil *
Alphard:

trvám protože musim zaposovat do databáze informace o tom jestli byl ten box zaškrtlej nebo ne. nicméně to asi nedám a vzdám a budu se třeba věnovat akvaristice.
nekdosproblemem
Profil *
Mám to. A myslim že LÍP ! Kdyby někdo tohle musel řešit tak aby si nemusel projít tim peklem tady... tak takhle : (například)



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=uft-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title>Test</title>
  <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
  <script type="text/javascript">
  
  function Box(elem) {  
          if($(elem).is(':checked')){
              $.get("index.php", { jmeno: "1", prijmeni: "ID" });
        }else{
              $.get("index.php", { jmeno: "0", prijmeni: "ID" });
        }    
  };

  </script>                                                        
  </head>
  <body>
    <input type="checkbox" name="foo" value="bar" onClick="Box(this);" /> <!-- checkbox -->
  </body>
</html>

<?php
if ($_GET['jmeno'] <> '') { 
    require 'inc/db.php';
    $db_1 = MySQL_Query("insert into test values ('jmeno', '".$_GET['jmeno']."'), ('prijmeni', '".$_GET['prijmeni']."')");
    };
?>


*smajlík dlouhý nos*
Tori
Profil
Pro ty, kdo by to také někdy řešili:
Ta část s ukládáním by mohla být úplně na začátku skriptu a za mysql_query (ještě uvnitř podmínku) skript ukončit, ať se při každém kliknutí na checkbox neposílá prohlížeči zbytečně celá stránka. A escapovat data, která se ukládají do DB. Jinak to funguje v principu stejně jako [#14], ale s nutností stahovat několik kB jQuery (pokud ho ale už stejně na stránce používáte, tak je to jedno).
Enko
Profil *
nekdosproblemem:
Mám to. A myslim že LÍP !
No tak to ani náhodou. Být tebou, tak si vytáhnu hlavu ze zadku a nechám si poradit. Od Tori tady máš krásné řešení, které zhaníš a příjdeš s tímdle... Toto není reálně použitelné v nějaké opravdu funkční aplikaci. Obdivuju všechny, kdo těmto lidem chtějí poradit.
nekdosproblemem
Profil *
Enko:
obávám se že situace se má tak že nejsem schonej poskládat funkčí script z rad které jsem tady dostal v nějakém rozumném čase. Prostě to nepadlo na úrodnou půdu a tak jsem musel udělat vlastní řešení kterému rozumim jak funguje. Od Tori tady máš krásné řešení, které zhaníš a příjdeš s tímdle jo. věřim tomu že je krásné, ale já nenapíšu syntakticky správně takže je mi uplně k ničemu jak je správné. Bojuju s tim tedy sám.


Nicméně OK . řešení mám a funguje mi to. Prostě FUNGUJE. Proč je to špatně a když už jsem tedy tuhle hádanku uhodl po svém, nemohl by mi někdo napsat řešení? Protože jinak to nepochopím.


Nevim co se Vám na tom nezdá? Do db zapisuje jak jsem chtěl... dělá to přesně to co jsem chtěl. A žádná ze zmíněných (ať už dobře míněných) rad mě k tomu nedovedla. Tohle jsem vyplodil na noc nespánku a de to. Mám už právo na tedy to správné řešení?
Tori
Profil
nekdosproblemem:
Do db zapisuje jak jsem chtěl.
Když tohle vlákno projdu od začátku:

[#1] „potřebuju udělat aby když zaškrtnu checkbox tak aby zůstal zaškrtnutej i po refreši stránky a abych v php nebo někde zjistil jestli je zaškrtnutej nebo ne
+ [#12] „potřebuju jenom na serveru a tedy v php poznat jestli je to box zaškrtnutej
vs.
[#18] „musim zaposovat do databáze informace o tom jestli byl ten box zaškrtlej nebo ne
Kdyby nebylo tajemstvím, že chcete zapisovat do databáze, ale řekl jste nám to rovnou na začátku, tak vám neradim cookies. Až do příspěvku [#18] to vypadalo, že chcete jen uchovat stav formuláře při obnovení stránky, nic víc, a že byste to raději řešil na serveru než v prohlížeči.

Mám to. A myslim že LÍP ! [...] Prostě FUNGUJE.
Na rozdíl od Enka s tímhle v určitém smyslu souhlasím - na co si člověk přijde sám, to si líp pamatuje než to, co jen někde slyšel. Ale místo "funguje" bych použila "spolehlivě funguje jen v očekávaných podmínkách, v ostatních případech je funkčnost nedefinovaná". Nebezpečná chyba je to, že do databáze vkládáte neošetřené údaje zvenčí, to je asi jak kdybyste sebral na Václaváku ze země lžíci a jedl s ní oběd - možná zrovna nic nechytíte, ale jistý to neni. Jiné věci, co jsem napsala (třeba přesunout uložení údajů na začátek skriptu), jsou spíš návrhy - asi na úrovni "můžete klidně jíst řízek lžící, ale vidličkou a nožem to bude asi lepší". Howgh.
nekdosproblemem
Profil *
Nebezpečná chyba je to, že do databáze vkládáte neošetřené údaje zvenčí


Moje řešení přeci nevylučuje to abych tam doplnil nějaké ošetření vstupů do databáze ne? nebo ano?
panther
Profil
nekdosproblemem:
Moje řešení přeci nevylučuje to abych tam doplnil
nevylucuje. Byl to Toriin komentar k soucasnemu reseni, ktere jsi oznacil jako funkcni (a tedy takove, na ktere jsi nemusel mit v umyslu uz nikdy sahnout).

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: