Autor Zpráva
Silencer
Profil *
Mam problem s odosielacim formularom. Dorabam ho na jednu stranku, kde pribudol obchod - ponuka niekolkych druhov tovaru. Vo formulari som chcel navstevnikom ponuknut moznost objednat si jeden alebo aj viac tovarov naraz. Zobrazi sa najprv jeden riadok, po klinuti na "pridaj riadok" sa pod to zobrazi dalsi atd. Vsetko funguje ako ma, ale problem je s obsahom premennej. Kedze tych riadkov moze byt niekolko a neviem dopredu kolko, musel som zvolit nejaky pocitadlo riadkov. Ale nesedia mi asi premenne, lebo obsah prveho riadka mi neodosle, namiesto toho je prazdny retazec.
Skusal som vselijake moznosti. Ked som napr. do "pocetriadkov" vlozil na zaciatku scriptu nulu, tak to zase neodosielalo poslednu hodnotu. Skusal som menit $i aj za jednotku, prip. som rozsiril podmienku na mensia a rovna sa. Nic vsak nepomohlo, a ani tie zmeny na seba logicky nenadvazovali, aby ma vedeli posunut spravnym smerom.
Povodny zdrojovy kod, z ktoreho som cerpal, je ovela zlozitejsi, tam sa uz da vyberat aj z ponuky, nielen rucne vpisovat. Ja som z neho chcel vytiahnut iba pre mna potrebnu cast. Vsetko je so suhlasom autora, ale rady od neho sa nemozem dockat.
Viete mi niekto pomoct? Som uz zufaly, sedim nad tym dlho a nemam uz ani ziadne dalsie napady.

Prikladam dolezite casti kodu:

Definovanie scriptu:


[/pre]
<script type="text/javascript">

var PocetRiadkov=1;

function pridajRiadok(){

div = document.getElementById("obj1")

div.innerHTML += "&nbsp;";

div.innerHTML += "<input type='text' size='40' maxlength='200' name='tovar["+PocetRiadkov+"]'>";

div.innerHTML += "<br>";

PocetRiadkov++;

}

</script>
[/pre]


Formular samotny: vybrata najdolezitejsia cast kodu, kde su podmienky a cykly, ostatne klasicke html veci som nekopiroval


<tr>

<td width="150" align="right" valign="top"><b>Objednávany tovar:</b><br></td>';

if(!is_array($tovar)){ $tovar[0]=""; }

echo ' <td width="300" align="left" valign="top" id="obj1">';

for($i=0;$i<count($tovar);$i++){ echo '&nbsp;<input type="text" size="40" maxlength="200" name="tovar[$i]"><br>';};

echo '

</td>

</tr>



Tato cast odosiela hodnoty na mail:


$message.="<b>Tovar:</b><br>";


for($i=0;$i<count($tovar);$i++){ $message.=$tovar[$i]."&nbsp;[$i]<br>";}


Rovnaku temu som zalozil aj pod javascriptom v domienke, ze je to problem javascriptu, ale bol som upozorneny, ze to patri pod php, tak som tu. Dufam, ze mi niekto pomoze.
nightfish
Profil
číslování v javascriptu začíná od 1, v PHP od 0
takže je potřeba to ošéfovat tak, aby to začínalo všude stejně
Silencer
Profil *
To som predpokladal, ale nevedel som to "osefovat" :-)

Prepokladal som, ze treba zmenit hodnotu definovanu v scripte
var PocetRiadkov=1; 

Ale nech ju zmenim akokolvek, neda to zelany efekt.
Skusal som potom menit aj hodnotu "i" v cykle "for", ale rovnako bezuspesne.
Na zaver este podotykam, ze povodny script funguje s takymi hodnotami premenych ako pouzivam ja. Takze mozno tam je kdesi navyse skryta nejaka finta, ktora nieco poprehadzuje a nadefinuje tak, aby to sedelo. Ale neviem prist na to, co.

Ktoru hodnotu treba teda podla teba zmenit, aby sedelo cislovanie JS aj PHP?
nightfish
Profil
zkus si pred $message.="<b>Tovar:</b><br>";
dat
foreach ($_REQUEST as $key => $value) {
echo "$key -- $value<br />";
}

to ti vypise vsechny hodnoty predane z formulare, tam by se mozna dalo neco zjistit
Silencer
Profil
Po vlozeni tebou doporucovaneho kodu napisalo po odoslani nasledovne:

page -- objednavka
meno -- ghj
adresa -- ghj
tovar -- Array
mail -- hjkl
telefon -- hjkl
ostatne --
add -- Poslať
nightfish
Profil
ajo, zboží se předává jako pole
tak ještě jednou

foreach ($_REQUEST['tovar'] as $key => $value) {
echo "$key -- $value<br />";
}

to vypíše hodnoty předané v poli 'tovar', takže z toho poznáš kolik kterého zboží, pak už stačí porovnat s tím, cos odeslal ve formuláři a zjistíš, jestli je to posunuté a v případě, že ano, tak kde
Silencer
Profil
Teraz vypisalo:
$i -- 01
1 -- 02
2 -- 03


Pridavam aj vypis z mailu:

Tovar:
[0]
02 [1]
03 [2]


Vypis z mailu davam preto, ze tam som si testoval, aku hodnotu ma v ktorom momente premenna "i". Tam je vidiet, ze v prvom riadku ma spravnu hodnotu 0.

Ale vo vypise po pridani riadku na zaklade rady od teba tam je premenna "i" ako text ci ako? Tomu akosi nechapem.
nightfish
Profil
echo '&nbsp;<input type="text" size="40" maxlength="200" name="tovar[$i]"><br>';}
změň na
echo "&nbsp;<input type=\"text\" size=\"40\" maxlength=\"200\" name=\"tovar[$i]\"><br>";}

v tom původním je celý ten text za echo v apostrofech, což znamená, že v něm nedochází k nahrazení proměnné její hodnotou...
Silencer
Profil
Dakujem, funguje to !!!
Bol som v tom, ze ked pouzijem apostrofy na ohranicenie echo zaciatku a konca, mozem dovnutra vkladat uvodzovky a opacne, ak pouzijem uvodzovky, hodnoty vnutri musia byt v apostrofoch. Ked som si ale pozrel povodny script, z ktoreho som cerpal, zistujem, ze on to ohranicoval v uvodzovkach, hodnoty vnutri v apostrofoch.
Chyba bola v tom, ze som nevedel, ze musim pouzit uvodzovky na vypis pri meniacej sa premennej. Doteraz som vzdy pouzival co sa mi hodilo, v pripade ze to kolidovalo a hlasilo chybu, pouzil som opacne lomitko.
Este raz dakujem za pomoc. Az teraz som si pozrel tvoj profil a zistujem, ze si mal ICQ. Mohol som ta menej otravovat a nie az takto dlho do noci. Moje ICQ je 174 320 410. Keby si nieco potreboval, rad ti zase ja pomozem. Som prvy krat na tomto fore, ale uz tu budem chodit castejsie. Vtip je v tom, ze kamarat, ktory mi s tym tiez pomahal a neskor to vzdal mi povedal, ci nemam chybu v nejakej uvodzovke, co je u mna jedna z castych chyb. :-) Ani nevedel, ze mal pravdu.
Ja sa viac venujem dizajnu, ale toto som robil pre svojho sefa na jeho stranku, tak som sa chcel posnazit mu to urobit co najlepsie. Tato stranka bola moja posledna zachrana. Ked by som nenasiel pomoc tu, uz by som to vzdal.
AK budes niekedy hladat nejaky obrazok do dizajnu, mam asi 150 fotogalerii, rad ti zase ja na oplatku pomozem.
nightfish
Profil
Silencer
nemáš za co, rád jsem pomohl
Toto téma je uzamčeno. Odpověď nelze zaslat.

0