Avatar billede stenger Nybegynder
13. september 2006 - 17:00 Der er 17 kommentarer og
1 løsning

Validere dynamisk inputboks

Hej drenge!

Har lige et validerings-spørgsmål...

Jeg henter 10 input bokse frem på skærmen ved hjælp af nedenstående kode (PHP med noget MySQL indover):

$no_records_aff = $db->num_rows();

$aff_array = array();

  if ($no_records_aff > 0)
  {
  for ($i=1;$i<=$no_records_aff;$i++)
  {
               
    $db->next_record();
    $AffiliationID = $db->f("AffiliationID");                $AdvisorTitle = $db->f("AdvisorTitle");                    $AdvisorOrg = $db->f("AdvisorOrg");                   
        $aff_array[$i] = array();
    $aff_array[$i]['ID'] = $AffiliationID;
    $aff_array[$i]['Title'] = $AdvisorTitle;
    $aff_array[$i]['Org'] = $AdvisorOrg;

    }
}

Dernæst følger :


for ($i=1;$i<=$no_records_aff;$i++) {
print(" <tr>

<td class='form_label' width='330' valign='top'>Title:<br /><input type='text' name='adv_title_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Title']."'></td>
                                    <td  width='44' valign='top'><img src='images/graphics/blank.gif' height='1' width='44' border='0' /></td>
                                    <td class='form_label' width='330' valign='top'>Organization:<br /><input type='text' name='adv_org_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Org']."'></td>
                                    <td  width='24' valign='top'><img src='images/graphics/blank.gif' height='1' width='24' border='0' /></td>
                                    </tr>");
}
   
for ($i=0;$i<($total_aff_rows - $no_records_aff);$i++)
{
print("                           
<tr>                                 <td class='form_label'  width='330' valign='top'>Title:<br /><input type='text' name='adv_newtitle_$i' tabindex='5' class='form_inputtext' value=''></td>
                                    <td  width='44' valign='top'><img src='images/graphics/blank.gif' height='1' width='44' border='0' /></td>
                                    <td class='form_label'  width='330' valign='top'>Organization:<br /><input type='text' name='adv_neworg_$i' tabindex='5' class='form_inputtext'  value=''></td>
                                    <td  width='24' valign='top'><img src='images/graphics/blank.gif' height='1' width='24' border='0' /></td>
                                    </tr>");
}
   
****

Denne kode gør at jeg altid har 10 bokse på skærmen og samtidig kan jeg gemme alt dataen i kun 2 rækker i min database-tabel, istedet for 10 (svarende til antallet af input bokse) og stadig få tingene hevet ud i de rigtige bokse efter en forespørgsel.

Mit spørgsmål er... hvordan kan jeg checke for om det første (dynamisk generede) felt er tomt eller har noget indhold? Det har jo ikke et standard navn, men er genereret af en variable.

Anyone?
Avatar billede mclemens Nybegynder
13. september 2006 - 18:57 #1
Om value er sat kan fanges med dette script ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
if(window.addEventListener)window.addEventListener("load", function(){wload();}, false);
else if(window.attachEvent)window.attachEvent("onload", function(){wload();});

function wload(){
  inps=document.getElementsByTagName("input");

/* inps=document.formularnavn.getElementsByTagName("input"); // er nok bedre ... */

  for(i=0,i2=inps.length;i<i2;i++){
    if(inps[i].getAttribute("rel")=="forsteinputfelt"){
      if(inps[i].getAttribute("value")!="")alert("value var sat til: "+inps[i].getAttribute("value"));
      break;
    }
  }
}

</script>

</head><body>


<table><tr>

<td class='form_label' class='form_label' width='330' valign='top'>Title:<br />

<input rel="forsteinputfelt" type='text' name='adv_title_123342tg5' tabindex='4' class='form_inputtext' value='g635y46t'>
<input type='text' name='adv_title_123347892tg5' tabindex='4' class='form_inputtext' value='g63596y46t'>


</td>

</tr></table>


</body></html>

(validering på rel da vi ikke kender name eller id)
Avatar billede mclemens Nybegynder
13. september 2006 - 19:01 #2
... Ulempen er selvfølgelig at man skal loope igennem det :/
evt. kan man bare sætte id? som her:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
if(window.addEventListener)window.addEventListener("load", function(){wload();}, false);
else if(window.attachEvent)window.attachEvent("onload", function(){wload();});

function wload(){
  var fi=document.getElementById("forsteinputfelt");
  if(fi.getAttribute("value")!="")alert("value var sat til: "+fi.getAttribute("value"));
}

</script>

</head><body>


<table><tr>

<td class='form_label' class='form_label' width='330' valign='top'>Title:<br />

<input id="forsteinputfelt" type='text' name='adv_title_123342tg5' tabindex='4' class='form_inputtext' value='g635y46t'>
<input type='text' name='adv_title_123347892tg5' tabindex='4' class='form_inputtext' value='g63596y46t'>


</td>

</tr></table>


</body></html>
Avatar billede mclemens Nybegynder
13. september 2006 - 19:03 #3
d.v.s. scriptet samt:


for ($i=1;$i<=$no_records_aff;$i++) {

if($i==1)$tmptxt=' id="forsteinputfelt"';else $tmptxt="";

print(" <tr>

<td class='form_label' width='330' valign='top'>Title:<br /><input "


.$tmptxt.


"type='text' name='adv_title_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Title']."'></td>
                                    <td  width='44' valign='top'><img src='images/graphics/blank.gif' height='1' width='44' border='0' /></td>
                                    <td class='form_label' width='330' valign='top'>Organization:<br /><input type='text' name='adv_org_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Org']."'></td>
                                    <td  width='24' valign='top'><img src='images/graphics/blank.gif' height='1' width='24' border='0' /></td>
                                    </tr>");
}


måske eller ?
Avatar billede mclemens Nybegynder
13. september 2006 - 19:04 #4
( php er ikke min stærkeste side, så måske kan der siges
$tmptxt=($i==1)?' id="forsteinputfelt"':''; som i javascript ? )
Avatar billede mclemens Nybegynder
13. september 2006 - 19:07 #5
hmmm, skulle nok have stået med mellemrummet til sidst istedet ...

for ($i=1;$i<=$no_records_aff;$i++) {

$tmptxt=($i==1)?' id="forsteinputfelt"':'';

print(" <tr>

<td class='form_label' width='330' valign='top'>Title:<br /><input"


.$tmptxt.


" type='text' name='adv_title_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Title']."'></td>
                                    <td  width='44' valign='top'><img src='images/graphics/blank.gif' height='1' width='44' border='0' /></td>
                                    <td class='form_label' width='330' valign='top'>Organization:<br /><input type='text' name='adv_org_".$aff_array[$i]['ID']."' tabindex='4' class='form_inputtext' value='".$aff_array[$i]['Org']."'></td>
                                    <td  width='24' valign='top'><img src='images/graphics/blank.gif' height='1' width='24' border='0' /></td>
                                    </tr>");
}
Avatar billede mclemens Nybegynder
13. september 2006 - 19:11 #6
Hvis det at sætte id ikke er godt (19:07:47 og 19:01:35)
eller rel kan man også vælge elementet direkte med:

<script type="text/javascript">
if(window.addEventListener)window.addEventListener("load", function(){wload();}, false);
else if(window.attachEvent)window.attachEvent("onload", function(){wload();});

function wload(){
  var fi=document.getElementsByTagName("input")[0];
  if(fi.getAttribute("value")!="")alert("value var sat til: "+fi.getAttribute("value"));
}

</script>

hvor 0 betyder første input på siden ... det kan så være
det skal være [1] , [2] eller noget højere istedet ...
Det fordrer så at antal input er kendt og i kendt rækkefølge...
Avatar billede stenger Nybegynder
13. september 2006 - 19:20 #7
Øh....kigger lige på det! Lidt forvirret lige nu.

Skal nok vende tilbage til dig. Takker :)
Avatar billede mclemens Nybegynder
13. september 2006 - 19:24 #8
Ok, kaster nok lidt for mange løsningsmuligheder ...
Kig på 13/09-2006 19:07:47 sammen med scriptet i 13/09-2006 19:01:35 ...
Hvis du har mulighed for at sætte id på den første input er det jo lettest :o)
Avatar billede stenger Nybegynder
13. september 2006 - 20:19 #9
Kan ikke rigtig få noget af det til at vire... :(

Kunne man ikke på en eller anden måde evt. ignorere alt om ID og navne og istedet bare loope igennem hele arrayet? Hvis arrayet er tomt, fejl-meddelse. Hvis der er inhold, gå videre?

Hvordan ville man skulle konstruere dette?
Avatar billede stenger Nybegynder
13. september 2006 - 20:20 #10
Og ignorer lige de 100 stavefejl/slåfejl jeg lavede i ovenstående... :)
Avatar billede mclemens Nybegynder
13. september 2006 - 20:36 #11
[ Mit spørgsmål er... hvordan kan jeg checke for om det første (dynamisk generede) felt er tomt eller har noget indhold? ]

vs.

[ Kunne man ikke på en eller anden måde evt. ignorere alt om ID og navne og istedet bare loope igennem hele arrayet? Hvis arrayet er tomt, fejl-meddelse. Hvis der er inhold, gå videre? ]

... Ønsker du at checke indholdet i input felt nr 1 eller i alle input felter ?
- Hvis vi skal ignorere alt om navne og kun have fat i input felt nr 1 kan 13/09-2006 19:11:37 bruges når man ved hvad nr. input felt man ønsker ... Hvis det første felt er det første felt på siden kan du bruge koden som den står ...




- Hvis vi skal loope igennem 10 elementer for at
checke hvilke der er tomme kan vi gøre sådan her:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta

http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">
if(window.addEventListener)window.addEventListener("load", function(){wload();}, false);
else if(window.attachEvent)window.attachEvent("onload", function(){wload();});

function wload(){
  var inps=document.getElementsByTagName("input");
  for(i=0,i2=inps.length;i<i2;i++){
    if(inps[i].getAttribute("value")==""){
      alert("value var ikke sat i input felt nr: "+(i+1)+"\nLoop af array stoppes ellers gik loop videre");
      break;
    }
  }
}

</script>

</head><body>


<table><tr>

<td class='form_label' class='form_label' width='330' valign='top'>Title:<br />

<input type='text' name='adv_title_123324542tg5' tabindex='4' class='form_inputtext' value=''>
<input type='text' name='adv_title_123347425892tg5' tabindex='4' class='form_inputtext' value='g63595786y46t'>
<input type='text' name='adv_title_1233422526344892tg5' tabindex='4' class='form_inputtext' value='g6359586y46t'>
<input type='text' name='adv_title_12334725213892tg5' tabindex='4' class='form_inputtext' value='g6359658y46t'>
<input type='text' name='adv_title_12334224534547892tg5' tabindex='4' class='form_inputtext' value='g63596y46t'>
<input type='text' name='adv_title_123342442533427892tg5' tabindex='4' class='form_inputtext' value='g6358596y46t'>
<input type='text' name='adv_title_123342137892tg5' tabindex='4' class='form_inputtext' value='g63596y5846t'>
<input type='text' name='adv_title_123344235784292tg5' tabindex='4' class='form_inputtext' value='g63596y46t'>
<input type='text' name='adv_title_12334564627892tg5' tabindex='4' class='form_inputtext' value='g63595876y46t'>
<input type='text' name='adv_title_12234334564627892tg5' tabindex='4' class='form_inputtext' value='g63595876y46t'>


</td>

</tr></table>


</body></html>
Avatar billede mclemens Nybegynder
13. september 2006 - 20:37 #12
[ Og ignorer lige de 100 stavefejl/slåfejl
jeg lavede i ovenstående... :) ]
Det er mig der smitter ;)
Avatar billede stenger Nybegynder
13. september 2006 - 20:42 #13
Det er egentligt lige meget om det er nr. 1 eller nr. 8 der er tomt, for den sags skyld.  Inputboksene må bare, som en helhed, ikke være tomme. Er der indhold i bare én af dem, fint.
Avatar billede stenger Nybegynder
13. september 2006 - 20:47 #14
Hvordan inkluderer jeg det i én samlet funktion, som checker hele dens side?

Koden er:


function validateSec1 (edit)
{

    var alert_msg = 'The following information is missing from the form. Before       
    moving on to the next page:\n\n';
    var alert_count = 0;
    var wordchk_msg = '';
    var wordchk_count = 0;
   
if (document.content_form.adv_bio.value == '')
{
document.content_form.adv_bio.focus();
alert_count++;
alert_msg += alert_count + '. Your BIOGRAPHY. \n';
}

if (document.content_form.adv_quote.value == '')
{
document.content_form.adv_quote.focus();
alert_count++;
alert_msg += alert_count + '. Your THOUGHTS. \n';
}   
   

var max_words_bio = 400;
   
if (WordLengthCheck(document.content_form.adv_bio) > max_words_bio)
{
document.content_form.adv_bio.focus();
var curr_words = WordLengthCheck(document.content_form.adv_bio)
wordchk_count++;
wordchk_msg += wordchk_count + '. The \"BIOGRAPHY\" field cannot exceed '+max_words+' words. You currently have '+curr_words+' words.\n';
}

var max_words_thoughts = 500;

if (WordLengthCheck(document.content_form.adv_quote) > max_words_thoughts)
{
document.content_form.adv_quote.focus();
var curr_words = WordLengthCheck(document.content_form.adv_quote)
   
wordchk_count++;
wordchk_msg += wordchk_count + '. The \"Your THOUGHTS\" field cannot exceed '+max_words+' words. You currently have '+curr_words+' words.\n';
}

if (wordchk_count != 0 || alert_count != 0)
{
var final_message = '';
if (alert_count != 0)
{
final_message += alert_msg;
}

if (wordchk_count != 0)
{
if (alert_count != 0)

{
var wordchk_msg = '\n\n' + 'Additionally, the following text is longer than the allowed limit. Please shorten them:\n\n' + wordchk_msg;
final_message += wordchk_msg;
}
else
{
var wordchk_msg = 'The following text is longer than the allowed limit. Please shorten them:\n\n' + wordchk_msg;

final_message += wordchk_msg;
}
}
       
alert(final_message);
return false;
}
}
Avatar billede mclemens Nybegynder
13. september 2006 - 21:39 #15
...
  var inptxt=false;
  var inps=document.getElementsByTagName("input");
  for(i=0,i2=inps.length;i<i2;i++){
    if(inps[i].getAttribute("value")==""){
      inptxt=true;
      break;
    }
  }

if(!inptxt){
  alert("Fejl, ingen input havde text");
// noget andet validerings resultat kodning ... return false / true variering af variabler ...
}


alert(final_message);
return false;
}
}




Muligvis skal for(i=0,i2=inps.length;i<i2;i++){
rettes til for(i=5;i<15;i++){ hvor 5 definerer input felternes start på siden (her er første input fra det script sat til input felt nr. 6 ... og så checker den felt 6-15 ... (ikke testet)
Avatar billede stenger Nybegynder
13. september 2006 - 23:24 #16
Ok...fik hjælp af en programmør-nørd i den anden ende af lokalet, så den er klaret :)

Smid dog et svar alligevel, mclemens... du arbejde jo lidt for føden!
Avatar billede mclemens Nybegynder
13. september 2006 - 23:31 #17
Ok :o)
Avatar billede mclemens Nybegynder
14. september 2006 - 00:13 #18
Mange tak for point :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester