5

I am trying to write to a file from an html form, however the write part of the javascript doesn't do anything.

Only the validate part of the script seems to be working.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<script LANGUAGE="JavaScript">
function Write(input1, input2)
{
    var fso =  new ActiveXObject("Scripting.FileSystemObject");  
    var s = fso.OpenTextFile("C:\\test.txt", true);
    s.WriteLine(input1 + "," + input2);
    s.Close();
}

function validateForm() {
    var x1=document.userform.pwd.value;
    var x2=document.userform.re_pwd.value;
    if (x2 == x1){
        Write(document.userform.user.value, document.userform.pwd.value);
    }
    else{alert("Passwords are not the same, Re-enter password");}
}
</SCRIPT>

<head>

    <link rel="stylesheet" href="css/screen.css" media="screen" />
</head>
<body>

<div id="container">

        <h2>Create a new account <?php echo "It works!"; ?></h2>
        <form id="form1" NAME="userform" METHOD="GET" ONSUBMIT="return validateForm()" ACTION="">   

            <fieldset><legend>Create a new Account</legend>
                <p class="first">
                    <label for="username">Username</label>
                    <input type="text" name="user" size="30" />
                </p>
                <p>
                    <label for="password">Password</label>
                    <input type="password" name="pwd" size="30" />
                </p>
                <p>
                    <label for="repassword">Re-enter Password</label>
                    <input type="password" name="re_pwd" size="30" />
                </p>

            </fieldset>             

            <p class="submit"><button type="submit" value="Submit">Signup</button></p>          

        </form> 

</div>
</body>
</html>
Cœur
  • 37,241
  • 25
  • 195
  • 267
Alhamza Alnaimi
  • 97
  • 2
  • 2
  • 11
  • Why are you storing plaintext credentials as a file on a user's computer using non-universal outdated technology? We have hashing and cookies, you know. – Waleed Khan Feb 10 '13 at 06:37
  • 2
    Are you using Internet Explorer? Not every browser supports ActiveX natively as far as I know. – Enfyve Feb 10 '13 at 06:39
  • Good luck saving text file with browsers other than IE. – Derek 朕會功夫 Feb 10 '13 at 06:40
  • 1
    Only way that wil work is if you save the HTML file with extension [.HTA](http://msdn.microsoft.com/en-us/library/ms536496(v=vs.85).aspx) – mplungjan Feb 10 '13 at 06:49
  • 1
    What is your end goal with this? If you're trying to make a web application that users can sign up for and log into, Javascript isn't going to cut it. – Eric Freese Feb 10 '13 at 06:51
  • I am using IE, and it's just for a java program, the code is non final and I just learned javascript today - that's quite frankly my first code in javascript, just testing things out! – Alhamza Alnaimi Feb 10 '13 at 06:56
  • As I said, save as hta, HTML application, if you want to do file manipulation – mplungjan Feb 10 '13 at 07:26
  • saving as hta doesn't work still. No files are created once button is pressed. Thanks for the effort! – Alhamza Alnaimi Feb 10 '13 at 07:28

1 Answers1

9

I pulled out my general .HTA read/write routines and dropped them in here for you.

  • Removed the XHTML stuff and switched to the HTML 5 doctype
  • Cleaned up markup to be HTML5 compliant.
  • Fixed the ID's in your INPUTS. The label element matches by ID, not name.
  • Added a return false to your form.

General notes:

  • Only constructors should start with a capital letter.
  • This must be saved with a .HTA file name
  • Needless to say, this is windows only.

<!doctype html>
<html>

<script>

var ie_writeFile = function (fname, data) {
    var fso, fileHandle;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    fileHandle = fso.CreateTextFile(fname, true);
    fileHandle.write(data);
    fileHandle.close();
  };

var ie_readFile = function (fname) {
    try {
      fso = new ActiveXObject("Scripting.FileSystemObject");
      var fso, filehandle, contents;
      filehandle = fso.OpenTextFile(fname, 1);
      contents = filehandle.ReadAll();
      filehandle.Close();
      return contents;
    } catch (err) {
      return null;
    }
  };



function Write(input1, input2)
{
    var s = input1 + "," + input2;
    ie_writeFile("test.txt", s);
}

function validateForm() {
    var x1=document.userform.pwd.value;
    var x2=document.userform.re_pwd.value;
    if (x2 == x1){
        Write(document.userform.user.value, document.userform.pwd.value);
    }
    else{alert("Passwords are not the same, Re-enter password");}
}
</script>

<head>

    <link rel="stylesheet" href="css/screen.css" media="screen">
</head>
<body>

<div id="container">

        <h2>Create a new account <?php echo "It works!"; ?></h2>


        <!-- return false added to keep the form from reloading -->

        <form id="form1" NAME="userform" METHOD="GET" ONSUBMIT="return validateForm();return false" ACTION="">   

            <fieldset><legend>Create a new Account</legend>
                <p class="first">
                    <label for="username">Username</label>
                    <input type="text" name="user" id="user" size="30">
                </p>
                <p>
                    <label for="pwd">Password</label>
                    <input type="password" name="pwd" id="pwd" size="30" />
                </p>
                <p>
                    <label for="repassword">Re-enter Password</label>
                    <input type="password" name="repassword" id="repassword" size="30" />
                </p>

            </fieldset>             

            <p class="submit"><button type="submit" value="Submit">Signup</button></p>          

        </form> 

</div>
</body>
</html>
Community
  • 1
  • 1
Jeremy J Starcher
  • 23,369
  • 6
  • 54
  • 74