webshop form-ok ellenőrzése
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;
}
}
■ 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;
}
}
ugyanazt az id-t nem
id az adatbázisból
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?
Nem
Mi lehet a megoldás?
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>
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.
másképp
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.