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
Když si v html nazvete inputy takto
<input type="number" name="produkt[160]" class="produkt">
tak v php můžete rovnou pracovat s polem $_POST['produkt'], kde klíčem bude id produktu (160) a v hodnotě zadané kusy.

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
Ď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
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
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
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
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
moc krát Ďakujem! :) neveril som že to je zrealizovateľné, javascript je pre mňa úplná španielska dedina :D

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0