Autor | Zpráva | ||
---|---|---|---|
tomas2245 Profil |
Zdravím, mám jednoduchý e-shop bez registrácie a nákupného košíka.
Produkty načítávam z databázy kde hotový kód s produktom vyzerá takto: <div class="obrazok"><img src="cesta-k-obrazku.png"></div> <div class="nazov_tovaru">Názov tovaru</div> <input type="number" name="produkt160"> ks</div> a takto mám na stránke s random idčkami aj x ďalších produktov... Chcel by som docieliť to, aby keď nejaký náhodný input / viacero inputov vyplním napr. produkt č. 155 s hodnotou 60 (kusov) tak aby niekde na spodu stránky mi vypísalo názov produktu z MySQL a s počtom kusov ktoré som do inputu zadal. -------------------------------- Nefunkčný kód mám zatiaľ takto: HTML: <script type="text/javascript"> $(function(){ $(".produkt160").keyup(function() { var produkt160 = $(this).val(); var dataString = 'produkty='+ produkt160; if(produkt160!='') { $.ajax({ type: "POST", url: "produkty.php", data: dataString, cache: false, success: function(html) { $("#vysledok").html(html).show(); } }); }return false; }); }); </script> <form> <input type="text" name="produkt160" class="produkt160" id="produkt160"> </form> <span class="" id="vysledok"></span> PHP: <?php require "../../pripoj.php"; $vrat_produkty = ""; $produkty = array(); if(!empty($produkty)){ $klucik = ""; foreach($_POST as $kluc => $obsah) { if (strpos($kluc, 'produkt') === 0) { if(!empty($_POST[$kluc])){ $klucik = substr($kluc, 7); //dame prec zaciatok 'produkt' $klucik = mysqli_real_escape_string($pripoj,$klucik); $dotaz_produkty = mysqli_query($pripoj,"SELECT nazov FROM produkty WHERE id='$klucik'"); $dotaz_produkty = mysqli_fetch_array($dotaz_produkty); $nazov = $dotaz_produkty['nazov']; if(is_numeric($obsah)){ $produkty[$klucik] = $obsah;} $produkty_text .= ''.$nazov.': '.$obsah.' ks'; } } } } $vrat_produkty .= ''.$produkty_text.''; echo $vrat_produkty ; ?> Problém je proste pri tom aby som nemusel ručne vypisovať pri tom Ajaxe všetky produkty a nejak to spojiť s tým PHP array Ďakujem vopred každému za pomoc |
||
Kajman Profil |
#2 · Zasláno: 3. 5. 2022, 07:16:19
Když si v html nazvete inputy takto
<input type="number" name="produkt[160]" class="produkt"> Pro javascript si můžete přidat např. to class produkt, pro snažší zaměření. Nebo to možná ani není potřeba, když budou všechny inputy v jednom form a na něj použijete metodu serialize. Možná se hodí před serialize zaměřit jen inputy s vyplněnou hodnotou. Toto řešení je vhodné, když chcete posílat více inputů najednou. Pokud je chcete zpracovávat po jednom, nemělo by to být také překážkou, jen bude javascript složitější a musí výsledek skládat on (a k tomu si bude muset někde asi pamatovat vrácené hodnoty jednotlivých inputů). Také můžete mít název produktu už schovaný přímo ve stránce, např. v atributu data u toho inputu a vůbec se serveru při změně neptat a jen to vypsat. |
||
tomas2245 Profil |
#3 · Zasláno: 3. 5. 2022, 10:19:58
Ďakujem za nasmerovanie, vybral som si ten posledný postup s data atribútom ale zatiaľ som na nič neprišiel, skúsim sa s tým ešte nejako popasovať
|
||
Kajman Profil |
#4 · Zasláno: 3. 5. 2022, 10:35:52
Když budeme mít inputy
<input type="number" name="produkt[160]" class="produkt" data-nazev="Názov tovaru" data-jednotka="ks"> Tak při změně cyklem najdete všechny input.produkt, které mají hodnotu větší než 0 a u nich z dat a value sestavíte jednotlivé řádky. Ale pokud máte v zadání ze školy, že máte použít ajax, tak tím nesplníte zadání. |
||
tomas2245 Profil |
hotovo a funguje, je to takto správne?
<script> $(document).ready(function(){ $(".produkt").keyup(function(){ $("#produkty").html(''); $(".produkt").each(function(){ if($(this).val()){ $("#produkty").append($(this).data("nazov") + ": " + this.value + " ks " + "<br>"); }}); }); }); </script> <input type="number" name="produkt157" data-nazov="NÁZOV PRODUKTU" class="produkt"> <div id="produkty"></div> |
||
tomas2245 Profil |
je možné ešte nejak spraviť to, že keď sa vrátim na predošlú stranu tak aby ten <div s výsledkom keyupu si pamätal predošle hodnoty? skúšal som local storage ale to fungovalo iba pre inputy (nie pre keyup)
pretože keď odošlem formulár s objednávkou a zákazník napr. nesplní minimálny počet kusov, tak ho presmerujem na ďalšiu podstránku s hláškou, aby sa vrátil späť a upravil počet kusov, ale potom ten DIV s keyupom si nepamätá predošlé hodnoty až dokiaľ nezmení ten input... |
||
Kajman Profil |
#7 · Zasláno: 3. 5. 2022, 23:55:46
Při chybě při vypsání inputů z php nastavte value, co uživatel poslal. Pak je může upravit a z nich to znovu sestavíte. Stačí si tu funkci v keyup uložit a použit ji tam i v inicializaci stránky.
Inputům můžete nastavit i atribut min. |
||
tomas2245 Profil |
#8 · Zasláno: 4. 5. 2022, 11:29:58
lenže, ono po tej chybe keď sa užívateľ vráti na predošlu stránku tak prehliadač si pamätá hodnotu z inputu ale potreboval by som nejak triggernut to:
$("#produkty").append($(this).data("nazov") + ": " + this.value + " ks " + "<br>"); bez toho aby užívateľ znovu musel stlačiť keyup na niektorý input z tovarov |
||
Kajman Profil |
#9 · Zasláno: 4. 5. 2022, 12:22:07
Když si pojmenujete tu fuknci pro přepočet, tak ji můžete použít na více událostí. I na Window: pageshow event
Něco jako parodie na eshop - živá ukázka |
||
tomas2245 Profil |
#10 · Zasláno: 4. 5. 2022, 12:43:43
moc krát Ďakujem! :) neveril som že to je zrealizovateľné, javascript je pre mňa úplná španielska dedina :D
|
||
Časová prodleva: 2 roky
|
0