ugrás a tartalomhoz

webshop form-ok ellenőrzése

goodsector · 2008. Dec. 12. (P), 09.13
Sziasztok!
A problémám a következő:

a webshopban adatbázisból listázom a termék adatokat,ahol a vásárló "eldöntheti",hogy milyen sorrend szerint akarja látni őket.Majd egy form-ban beállíthatja az adott terméknél, hogy mennyit szeretne rendelni belőle.
Ennek az input mezőnek az ellenőrzésével van problémám, mert bármelyik terméknél elküldéskor mindig csak a legelső terméket adja át.(Egy oldalon több form is van attól függően,hogy mi a kiválasztás.)
Már próbáltam "mindenhova" beilleszteni a this.-t, de nem működött.
Lehet, hogy az arucikk_id, kellene beilleszteni?

<form action="kosarba_tesz.php" name="kosarba_tesz" id="kosarba_tesz" method="POST" target="ures_iframe">

<input type="hidden" name="arucikk_id" value="<?= $id?>">

<font style="font-size:12pt"><b><?= $ar_huf?></b> HUF</font><br><br>
<?
if ($rendelheto==1) {
?>
<input id="db" name="db" maxlength="3" style="width:40px;text-align:center" value="" disabled="disabled">
<?= $egyseg?><br><br>
<img id="kosarba_gomb" name="kosarba_gomb" src="img/kosarba_tesz.png" style="cursor:pointer;" onClick="">
<?
}
else {
?>
<input id="db" name="db" maxlength="3" style="width:40px;text-align:center" value="1">
<?= $egyseg?><br><br>
<img id="kosarba_gomb" name="kosarba_gomb" src="img/kosarba_tesz.png" style="cursor:pointer;" onClick="ellenoriz_4(kosarba_tesz.db)" onmouseover="mouseOver()" onmouseout="mouseOut()">
<?
}
?>
</form>


Az ellenőrző javascript:

function ures_mezo(){
if (document.getElementById('db').value != "" && document.getElementById('db').value !=0) {
return true;
}
else{
window.alert("üres mező, vagy nulla!");
document.getElementById('db').focus();
return false;
}
}

function teszt(adat,minta){
for (var i=0; i<adat.length; i++)
if (minta.indexOf(adat.charAt(i)) == -1) {
return false;
}
else {
return true;
}
}

function ellenoriz_4(){
if (!ures_mezo(document.getElementById('db'))) return false;
if (!teszt(document.getElementById('db').value,"1234567890")){
window.alert("Pozitív egész számot adjon értékül!");
document.getElementById('db').focus();
return false;
}
else{
document.getElementById('kosarba_tesz').submit();
return true;
}
}
 
1

ugyanazt az id-t nem

rrd · 2008. Dec. 12. (P), 10.10
ugyanazt az id-t nem egészséges több elemnek is kiosztani
2

id az adatbázisból

goodsector · 2008. Dec. 12. (P), 12.25
.....
while ($sor=mysql_fetch_array($eredmeny)) {
$id = $sor["id"];
.......

.......
<form>

<input type="hidden" name="arucikk_id" value="<?= $id?>">
......
<form>

Tehát a mysql lekérdezésben az eredmény tömböt listázom ki, ezért minden termék esetében más lesz a az id.
Vagy nem erre gondoltál?
3

Nem

zila · 2008. Dec. 12. (P), 14.39
<input id="db" name="db" maxlength="3" style="width:40px;text-align:center" value="1">
Ez a ciklusmagban van, tehát lesz egy csomó db id-jű input elemed. Sőt a nevük is megegyezik... Az adatbázsiból az aurcikk_id nevű rejtett inputnak az _értéke_ lesz más, persze ide is érvényes, hogy ha 10 árucikk jön le akkor neked lesz 10 db arucikk_id nevű inputod különböző értékekkel, amit elég nehéz megkülönböztetni egymástól...
4

Mi lehet a megoldás?

goodsector · 2008. Dec. 12. (P), 16.36
Ezt értem.
A kódom nagyban épül az oktatóvideók webshopkészítése tananyagon.
itt megnézhető, hogy miről is van szó: http://webshop.oktato2.info/
Akkor az egész koncepció hibás?
Hogy lehetne ezeket az input mezőket ellenőrizni?
ha szükséges az egész kódrészletet megadhatom.

onsubmit és onBlur alkalmazásával is próbálkoztam, de IE7 alatt jó volt, firefox alatt, nem adta vissza a focus-t a mezőre és másodszor már el lehetett küldeni a rossz értéket.
ekkor ekképp módosítottam a JavaScript kódot:

function ellenoriz_4(field) {
var valid = "0123456789"
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) {
temp = "" + field.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") ok = "no";
}
if (ok == "no") {
alert("Érvénytelen érték!Csak számokat adjon!");
field.focus();
field.select();
}
}

és a form:

<form action="kosarba_tesz.php" name="kosarba_tesz" id="kosarba_tesz" method="POST" target="ures_iframe" onSubmit="if (this.db.value=='' || this.db.value==0){ alert('Érvénytelen érték, vagy üres mező!');document.getElementById('db').focus();return false;}">

<input type="hidden" name="arucikk_id" value="<?= $id?>">

<font style="font-size:12pt"><b><?= $ar_huf?></b> HUF</font><br><br>
<?
if ($rendelheto==1) {
?>
<input id="db" name="db" maxlength="3" style="width:40px;text-align:center" value="" disabled="disabled">
<?= $egyseg?><br><br>
<img id="kosarba_gomb" name="kosarba_gomb" src="img/kosarba_tesz.png" style="cursor:pointer;" onClick="">
<?
}
else {
?>
<input id="db" name="db" maxlength="3" style="width:40px;text-align:center" value="1" onBlur="ellenoriz_4(this)">
<?= $egyseg?><br><br>
<imput type="submit" value="kosárba">
<?
}
?>
</form>
5

Hibás

Poetro · 2008. Dec. 12. (P), 22.31
El kell, hogy keserítselek, de az egész koncepció hibás.
Egy formba minden elemnek illik saját nevet adni különben azok felülírják egymást, és a formod elküldésekor csak egyet kapsz vissza.
A HTML specifikáció szerint egy oldalon egy ID csak egyszer fordulhat elő, tehát ezt se jól telejsíted, ne várd hát, hogy a JS ezt megoldja neked.
Ha az input mezőket akarod ellenőrízni egy formban, akkor keresd meg a formot, és abban keresd meg az input mezőket.

// Kikeressük a formot ID alapján
var form = document.getElementById('formId');
// Megkeressük annak INPUT elemeit
var inputs = form.getElementsByTagName('input');
// Végigmegyünk azokon.
for (var i=0; i<inputs.length; i++) {
  var input = inputs[i];
  // Itt csinálunk valamit az elemmel.
}
Ha kódot idézel, akkor azt rakd színezőbe, mert így nehéz olvasni. használd a [colorer=php] elemet (php helyett persze értelemszerűen a megfelelő nyelvet) lásd a szerkesztő alatt.
6

másképp

goodsector · 2008. Dec. 13. (Szo), 16.17
A kód beszúrásért bocs, figyelmetlen voltam.
A dolgot megoldottam másképp.
Az input mezőnél, egy onkeyup()-al megvizsgálom,mit szeretne átadni, és ha az nem jó, be sem viheti, az adott értéket.