Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Page 2 of 3 FirstFirst 123 LastLast
Results 16 to 30 of 32
  1. #16
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    Going backwards:
    is there any reason i cant return true or false and i have to return error or ! error
    Of course not. But returning !error when you don't initialize var error = true; is an incredibly bad idea.

    i am not sure why it auto submits when i close the alert.
    Possibly because you are calling and using the function wrong?

    It should be called via something like
    Code:
    <form action="xxx.php" method="post" onsubmit="return validate_change();">
    I won't comment much further on your use of the array "configvalues[]" because I disagree with it on so many levels it's actually painful to read your code.

    Not the least of the pain is that, because of it, you will do a separate SQL UPDATE call for each value. Horrible!
    arrays in the same form one for value and one for name so the form and array looks like this
    Code:
    <input type="hidden" name="configname[]" id="configname" value="<?=$c_name[$k];?>" />
    <input type="text" name="configvalue[]" id="configvalue" size="2" maxlength="2" value="<?=$c_value[$k];?>"/>
    This is *ILLEGAL HTML* if you really have two or more sets of code like that.

    IDs must be *UNIQUE* on the entire HTML page.

    I actually see NO REASON at all for those IDs to be there. The should be removed.
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.

  2. #17
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    here is my call

    PHP Code:
    <form name="advform"  method="post" action="<?=$_SERVER['PHP_SELF'];?>?<?=$Sesid;?>" onSubmit="return validate_change();">
    Actually my code is very easy to read, have you seen some of the code out there like

    fsffdsf{
    fdffdfsfdfsdf{sfsdfdsfdsfsf}fsfsfsdfdsfdsf{}
    sfdsfdsfsfsf{
    sfasfdfdsfdsfs}
    gdggfdgdgfdgg{}

    how can anyone follow that without breaking it apart

    i label every close bracket so it is easy to follow and i dont compress my code in a jumble of garbarge like a bunch of coders do.

    how is that illegal html, it passes W3C validation and the id's are unique.

    and when did i ever say i had two sets of code like that its one form.
    Last edited by durangod; 02-18-2013 at 01:07 AM.

  3. #18
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    also i just discovered the js does not work for the second element just the first, the second element is saving chars

    i enter 5,90 is ok
    i enter fe,90 is changed to 5,90 and saves data
    i ent 10,dw and it saves 10,dw //not correct

    i think that is why we used the

    if elem.type == "text" is because i just added that and now it is catching the second element value error, it does save the char but at least it does catch it now alter wise so now i just need to test as to why the value is not changing to default on secone element.

    ok that problem solved with this

    Code:
          alert("Number Only in each field Please! You entered: " + elem.value);
           newval = document.getElementById("advform")[ "configvalue[]" ][i].value = defval;  //defval is the default value set above
           document.getElementById('configvalue').innerHTML = newval;      
           error = true;

    almost there

    i enter 10,10 saves no error //this is ok
    i enter sf,10 alerts and changes sf to 5 and submits 5,10 //that is ok
    i enter 10,se alerts and changes se to 5 and submits 10,5 //that is ok

    the problem now is if i enter
    se, ae it flags the first one and changes it to 5 but then it saves 5,ae to db // incorrect need to fix this

    here is what i have so far.



    PHP Code:

    <script type="text/javascript">
    <!--

    function 
    validate_change(){

      var 
    defval 5;
      var 
    confv document.getElementById("advform")[ "configvalue[]" ];
      
    error false;


      for(var 
    0confv.lengthi++)   // i removed && !error from here because it was stopping the process after the
                                                        // first element error and i need it to complete the loop entirely to catch other errors.
      

      
    elem confv[i]; 
      
         if(
    elem.type == "text" && (! /^d{1,2}$/.test(elem.value)))     
         {
           
    alert("Number Only in each field Please! You entered: " elem.value);
           
    newval document.getElementById("advform")[ "configvalue[]" ][i].value defval;
           
    document.getElementById('configvalue').innerHTML newval;      
           
    error true;


          
    //i added this to try to force it to compete the loop to the next element but of course that dont work lol.
          // if(error && i < confv.length)
          // {
          //  i++;
          //  } 

         
    }//close if  


      
    }//close for loop

    if(!error)
    {
    return (
    true);
    }else{
          return(
    false);
          }

    }
    //close function validate_change
    //-->
    </script> 

    and here i just thought i had this wooped, this dont fix the issue either

    PHP Code:

    if(error)
           {
              var 
    confvall document.getElementById("advform")[ "configvalue[]" ];
     
             for(var 
    0confvall.lengthj++)   
             {
             
    newvalall document.getElementById("advform")[ "configvalue[]" ][j].value defval;
             
    document.getElementById("advform")[ "configvalue[]" ][j].innerHTML newvalall;
              }
    //close for
            
           
    }//close if err 
    i also tried form reset() and no good...
    Last edited by durangod; 02-18-2013 at 02:28 AM.

  4. #19
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    Well, personally, I give up until you show us the full <form> and all its fields. Clearly I am not understanding what you are saying is in your code and seeing just *part* of the PHP is not helping.

    Bring the page up in your browser, click on the VIEW menu, click on the SOURCE or PAGE SOURCE menu item. Copy/paste the HTML *as the browser sees it*.

    Better alternative: Give us a live URL to look at.
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.

  5. #20
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    I sincerely am sorry this is frustrating for everyone including myself lol... i have googled to death trying to see what i need to do here. My apologies..

    here is the full file in both ways, php/html and how the server sees it.

    and a screen shot attached as well.



    file

    PHP Code:


    <?php


    session_start
    ();


    $Sesid "PHPSESSID=".session_id();

    //check for session id if not valid session id then no access
    $chekss session_id();
    if(
    $_GET['PHPSESSID'] != $chekss)
    {
    echo 
    "<script> location.href='logout.php'</script>";
    exit;
    }


    include(
    'includes/dbconfig.php');
    include_once(
    'functions.php');

      
    // If request is made for config Change.
    if(isset($_POST['csave']))
    {
      
    //set post arrays into own array name
      
    $name_array $_POST['configname'];
      
    $val_array $_POST['configvalue'];

      
    //now see how many elements in name array
      
    $elenum count($name_array); //used for i loop max

      //now post the values in a loop to the db rows 
       
    for ($i 0$i <= $elenum$i++) 
       {
       
    $update="UPDATE config SET cvalue='$val_array[$i]' WHERE cname='$name_array[$i]'";
       
    $resu mysqli_query($myconnect$update);   
      
       }
    //close forloop     
       
      
      
    if($resu)
      { 
       echo 
    "<div align='center'><span color='#FF0000'>Current Values Posted to Config!</span></div><br />";
       }
    //close if resu
     
    }//close if request change config

    ?>

    <script type="text/javascript">
    <!--

    function validate_change(){

      var defval = 5;
      var confv = document.getElementById("advform")[ "configvalue[]" ];
      error = false;


      for(var i = 0; i < confv.length; i++)   
      { 
      elem = confv[i]; 
      
         if(elem.type == "text" && (! /^\d{1,2}$/.test(elem.value)))     
         {
           alert("Number Only in each field Please! You entered: " + elem.value);


           newval = document.getElementById("advform")[ "configvalue[]" ][i].value = defval;
           document.getElementById("advform")[ "configvalue[]" ][i].innerHTML = newval;

           error = true;

            /*  added in the hope of if error it would just cycle thru all of them and set everything to default value, i would rather than than to have char in data.
      Does not work. 

            */

           /* commented out 
     
           if(error)
           {
              var confvall = document.getElementById("advform")[ "configvalue[]" ];
     
             for(var j = 0; j < confvall.length; j++)   
             {
             newvalall = document.getElementById("advform")[ "configvalue[]" ][j].value = defval;
             document.getElementById("advform")[ "configvalue[]" ][j].innerHTML = newvalall;
              }//close for
            
           }//close if err 
     
                  end of comment out  */         

       
         }//close if  


      }//close for loop

    if(!error)
    {
    return (true);
    }else{
          return(false);
          }

    }//close function validate_change
    //-->
    </script>



    <style type="text/css">
    .text {
    font-size:medium;
    }
    </style>


    <form name="advform"  method="post" action="<?=$_SERVER['PHP_SELF'];?>?<?=$Sesid;?>" onSubmit="return validate_change();">
    <table width="100%" border="0" cellpadding="3" cellspacing="2">
      <tr>
        <td colspan="2" bgcolor="#E6E6E6" class="titlehead"><strong>Change Advanced Configuration Settings</strong> </td>
      </tr>
      
      <tr>
        <td bgcolor="#E6E6E6">&nbsp;</td>
        <td bgcolor="#E6E6E6">&nbsp;</td>
      </tr>




    <?php


    //pull value of all configs
    $query "SELECT * FROM config";
    $resq =  mysqli_query($myconnect,$query);
    $totr mysqli_num_rows($resq);

    if(
    $totr 0)
     {

      
    $k=1
      while(
    $conf mysqli_fetch_array($resq))
      {
        
       
    $c_name[$k] = $conf['cname'];
       
    $c_value[$k] = $conf['cvalue'];
       
       
    ?>

      <tr>
        <td width="250" bgcolor="#e6e6e6" class="text">
            <span class="normal"><?=$c_name[$k];?></span>
        </td>

        <td bgcolor="#e6e6e6" class="text">
         <span class="tdeven">
          <input type="hidden" name="configname[]" id="configname" value="<?=$c_name[$k];?>" />
          <input type="text" name="configvalue[]" id="configvalue" size="2" maxlength="2" value="<?=$c_value[$k];?>"/>
         </span>
        </td>
      </tr>

      
       <?php
        $k
    ++; 
        }
    //close while

        
    ?>

       <tr>
        <td bgcolor="#e6e6e6" class="text">&nbsp;</td>
        <td bgcolor="#e6e6e6" class="text">&nbsp;</td>
      </tr>

       <tr>
        <td colspan="2" bgcolor="#e6e6e6" class="text">
         <div align="center">                
           <input type="hidden" name="csave" value="csaved" />
           <input type="submit" name="submit"  value="Submit" />
            </div>
       </td>
      </tr>
     </table>
     </form>
     <br />
     <br />
    <center>
    <a href="javascript:void(0);" onclick="window.close();">Close Window</a>
    </center>
     
    <?php

    }else{
          
    //else totr > 0

          
    echo "<tr><td bgcolor='#e6e6e6'>&nbsp;</td>";
          echo 
    "<td bgcolor='#e6e6e6'>";
          echo 
    "<center>No Records Found</center>";
          echo 
    "</td></tr></table></form>";
          echo 
    "<br /><br />";
          echo 
    "<center><a href=\"javascript:void(0);\" onclick=\"window.close();\">Close Window</a></center>";  
        
          }
    //close else

    ?>

    here is the view source

    PHP Code:


    <script type="text/javascript">
    <!--

    function 
    validate_change(){

      var 
    defval 5;
      var 
    confv document.getElementById("advform")[ "configvalue[]" ];
      
    error false;


      for(var 
    0confv.lengthi++)   
      { 
      
    elem confv[i]; 
      
         if(
    elem.type == "text" && (! /^d{1,2}$/.test(elem.value)))     
         {
           
    alert("Number Only in each field Please! You entered: " elem.value);


           
    newval document.getElementById("advform")[ "configvalue[]" ][i].value defval;
           
    document.getElementById("advform")[ "configvalue[]" ][i].innerHTML newval;

           
    error true;

         
    /*  added in the hope of if error it would just cycle thru all of them and set everything to default value, i would rather than than to have char in data.   Does not work. 

         */

           /* commented out 

     
           if(error)
           {
              var confvall = document.getElementById("advform")[ "configvalue[]" ];
     
             for(var j = 0; j < confvall.length; j++)   
             {
             newvalall = document.getElementById("advform")[ "configvalue[]" ][j].value = defval;
             document.getElementById("advform")[ "configvalue[]" ][j].innerHTML = newvalall;
              }//close for
            
           }//close if err 

               end of comment out  */                  

       
         
    }//close if  


      
    }//close for loop

    if(!error)
    {
    return (
    true);
    }else{
          return(
    false);
          }

    }
    //close function validate_change
    //-->
    </script>



    <style type="text/css">
    .text {
    font-size:medium;
    }
    </style>


    <form name="advform"  method="post" action="/authentify/change_config.php?PHPSESSID=adbd107bc86e93a6d1c9fcfd90bfc022" onSubmit="return validate_change();">
    <table width="100%" border="0" cellpadding="3" cellspacing="2">
      <tr>
        <td colspan="2" bgcolor="#E6E6E6" class="titlehead"><strong>Change Advanced Configuration Settings</strong> </td>
      </tr>
      
      <tr>
        <td bgcolor="#E6E6E6">&nbsp;</td>
        <td bgcolor="#E6E6E6">&nbsp;</td>
      </tr>





      <tr>
        <td width="250" bgcolor="#e6e6e6" class="text">
            <span class="normal">Records Per Page</span>
        </td>

        <td bgcolor="#e6e6e6" class="text">
         <span class="tdeven">
          <input type="hidden" name="configname[]" id="configname" value="Records Per Page" />
          <input type="text" name="configvalue[]" id="configvalue" size="2" maxlength="2" value="5"/>
         </span>
        </td>
      </tr>

      
       
      <tr>
        <td width="250" bgcolor="#e6e6e6" class="text">
            <span class="normal">Session Timeout</span>
        </td>

        <td bgcolor="#e6e6e6" class="text">
         <span class="tdeven">
          <input type="hidden" name="configname[]" id="configname" value="Session Timeout" />
          <input type="text" name="configvalue[]" id="configvalue" size="2" maxlength="2" value="90"/>
         </span>
        </td>
      </tr>

      
       
       <tr>
        <td bgcolor="#e6e6e6" class="text">&nbsp;</td>
        <td bgcolor="#e6e6e6" class="text">&nbsp;</td>
      </tr>

       <tr>
        <td colspan="2" bgcolor="#e6e6e6" class="text">
         <div align="center">                
           <input type="hidden" name="csave" value="csaved" />
           <input type="submit" name="submit"  value="Submit" />
            </div>
       </td>
      </tr>
     </table>
     </form>
     <br />
     <br />
    <center>
    <a href="javascript:void(0);" onclick="window.close();">Close Window</a>
    </center> 

    I have included a screen shot of it as well.

    hope that helps, if you still want to see it live let me know i can set you up and i will pm you with the info.

    I just want to go thru those elements in that section (just the value elements) and make sure they are int no neg values.

    Thanks
    Attached Thumbnails Attached Thumbnails loop element verify integer value-configbox.jpg  

  6. #21
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,982
    Thanks
    203
    Thanked 2,536 Times in 2,514 Posts
    What was wrong with my suggestion

    Code:
    <input type"text" name="NumsOnly" onkeyup="if(/\D/g.test(this.value)){alert('Only integer numbers are valid in this box.  '); this.value = ''; this.focus()}" />

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  7. #22
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    Quote Originally Posted by Philip M View Post
    What was wrong with my suggestion

    Code:
    <input type"text" name="NumsOnly" onkeyup="if(/\D/g.test(this.value)){alert('Only integer numbers are valid in this box.  '); this.value = ''; this.focus()}" />

    is onkeyup supported by all browsers and can i do name="NumsOnly[]" (array) using this method?

  8. #23
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,982
    Thanks
    203
    Thanked 2,536 Times in 2,514 Posts
    Quote Originally Posted by durangod View Post
    is onkeyup supported by all browsers and can i do name="NumsOnly[]" (array) using this method?
    Yes and yes.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  9. Users who have thanked Philip M for this post:

    durangod (02-18-2013)

  10. #24
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    thanks Philip maybe that is the best solution then for this. Is everyone agreed on this as the best way to accomplish this


    just tried it and it works great, very well done Philip and i do apologize for not asking before on this, i saw that it was name="NumsOnly" and not array and i meant to ask but with everything going on here with this as well as the crazy stuff happening at home here, i really forgot about it. My apologies i did not mean anything by it..

    also yes i did add this also for the php side

    PHP Code:
    $val_array[i] = intval($val_array[i]); 
    Last edited by durangod; 02-18-2013 at 06:41 PM.

  11. #25
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    I personally wanted to thank everyone for their time on this, Philips suggestion seems to work very well and with the php covered now, i feel good about it. I just beat it to death and it works very well.

    I also found an error in my style for the message so i wanted to correct that while i am here so to let people know what i did here.

    It should have been

    Code:
    echo "<div align='center'><span style='color:#0e8b22;'>Current Values Posted to Config!</span></div><br />";
    I also added this for error control i feel as long as one value is updated then they all should be ok due to the pre validation

    PHP Code:
    if(!$jobdone)
        {
          if(
    mysqli_affected_rows($myconnect) > 0)
          {
          
    $jobdone true;
           } 
    //close if 
         
    }//close if !jobdone
      
        
    }//close forloop  
       
      
      
    if($jobdone)
      { 
       echo 
    "<div align='center'><span style='color:#0e8b22;'>Current Values Posted to Config!</span></div><br />";
       }else{
             echo 
    "<div align='center'><span style='color:#ad0515;'>UPDATE FAILED! Values NOT updated!</span></div><br />";
             }
    //close if jobdone 

    So i guess we can call this complete, again i very sincerely thank everyone involved i will go back and give thanks via button if i can to others as well if i hav not yet.

    I am curious Old Pedant how this would have been done in a function if we had to. If you have time see what you can come up with (i want to learn) if not then i understand and thanks sooo much regardless...

  12. #26
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    One *VERY* minor suggested change:
    Code:
    <input type"text" name="whatever[]" value="<?php echo whatever;?>"
      onkeyup=" if(/\D/g.test(this.value))
                {alert('Only integer numbers are valid in this box.  '); 
                 this.value = this.defaultValue; 
                 this.focus()}" 
    />
    By using this.defaultValue, the value will be reset back to whatever your PHP code plopped in there.

    And one other possible change: If you don't want to allow a zero value, you could do this:
    Code:
    <input type"text" name="whatever[]" value="<?php echo whatever;?>"
      onkeyup=" if( ! /^(0[1-9]|[1-9]\d)$/.test(this.value))
                {alert('Only integer numbers are valid in this box.  '); 
                 this.value = this.defaultValue; 
                 this.focus()}" 
    />
    But that's much less important.
    Last edited by Old Pedant; 02-18-2013 at 08:29 PM.
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.

  13. #27
    Senior Coder
    Join Date
    Nov 2010
    Posts
    1,383
    Thanks
    264
    Thanked 32 Times in 31 Posts
    Thanks yes i did use the default value great idea.

    The problem with ! /^(0[1-9]|[1-9]\d)$/.test is that it will not let me put 10, if the value is lets say 12 and i go to put 10 as soon as i hit 0 i get a flag

    i can always check for 0 on submit real quick if i need to i guess.

  14. #28
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    And you also can't focus on the field and then hit the DELETE to remove the default 5 values, because then the field is blank and not a number at all.

    Which is why I keep saying you shouldn't use onkeyup. Instead, use onchange. Then the value isn't tested until it is complete.

    Code:
    <html>
    <body>
    <input type"text" name="whatever[]" value="5"
      onchange=" if( ! /^(0[1-9]|[1-9]\d)$/.test(this.value))
                {alert('Only integer numbers 1 through 99 are valid in this box.  '); 
                 this.value = this.defaultValue; 
                 this.focus()}" 
    />
    <br/>
    <input type"text" name="whatever[]" value="20"
      onchange=" if( ! /^(0[1-9]|[1-9]\d)$/.test(this.value))
                {alert('Only integer numbers 1 through 99 are valid in this box.  '); 
                 this.value = this.defaultValue; 
                 this.focus()}" 
    /></body>
    </html>
    ** THIS CODE WORKS **
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.

  15. #29
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    This also works. And is much better design.
    Code:
    <!DOCTYPE html>
    <html>
    <body>
    <form id="whoCares">
        <input type"text" name="whatever[]" value="5"/>
        <br/>
        <input type"text" name="whatever[]" value="20" />
    </form>
    
    
    <script type="text/javascript">
    (
      function( )
      {
          var flds = document.getElementsByName("whatever[]");
          for ( var f = 0; f < flds.length; ++f )
          {
              var fld = flds[f];
              if ( fld.type == "text" ) 
              {
                  fld.onchange = checkRange;
              }
          }
          function checkRange( )
          {
              if( ! /^(0[1-9]|[1-9]\d)$/.test(this.value))
              {
                  alert('Only integer numbers 1 through 99 are valid in this box.  '); 
                  this.value = this.defaultValue; 
                  this.focus();
              }
          }
      }
    )();
    </script>
    </body>
    </html>
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.

  16. #30
    Supreme Master coder! Old Pedant's Avatar
    Join Date
    Feb 2009
    Posts
    25,436
    Thanks
    75
    Thanked 4,372 Times in 4,337 Posts
    This is even better design, getting rid of the alert().
    Code:
    <!DOCTYPE html>
    <html>
    <body>
    <form id="whoCares">
        <label><input type"text" name="whatever[]" value="5"/><span></span></label>
        <br/>
        <label><input type"text" name="whatever[]" value="20"/><span></span></label>
    </form>
    
    
    <script type="text/javascript">
    (
      function( )
      {
          var flds = document.getElementsByName("whatever[]");
          var msg = null;
          for ( var f = 0; f < flds.length; ++f )
          {
              var fld = flds[f];
              if ( fld.type == "text" ) 
              {
                  fld.onchange = checkRange;
              }
          }
          function checkRange( )
          {
              msg = this.parentNode.getElementsByTagName("span")[0];
              if( ! /^(0[1-9]|[1-9]\d)$/.test(this.value))
              {
                  
                  msg.innerHTML = "Only integer numbers 1 through 99 are valid in this box.";
                  this.value = this.defaultValue;
                  this.focus();
                  setTimeout( function() { msg.innerHTML = ""; }, 2000 );
              } else {
                  msg.innerHTML = "";
              }
          }
      }
    )();
    </script>
    </body>
    </html>
    An optimist sees the glass as half full.
    A pessimist sees the glass as half empty.
    A realist drinks it no matter how much there is.


 
Page 2 of 3 FirstFirst 123 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •