2016-11-09 51 views
1

讀取未定義錯誤的屬性'值'我有一個註冊表單,我使用的是基於表單模板here。這是工作得很好,但我需要它也添加名字和姓氏和電話號碼,所以我改成了這樣:無法通過表格

 <form method="post" name="registration_form" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>"> 
      First Name: <input type='text' name='firstname' id='firstname' /><br> 
      Last Name: <input type='text' name='lastname' id='lastname' /><br> 
      Phone: <input type='tel' name='phone' id='phone' /><br> 
      Username: <input type='text' name='username' id='username' /><br> 
      Email: <input type="text" name="email" id="email" /><br> 
      Password: <input type="password" 
          name="password" 
          id="password"/><br> 
      Confirm password: <input type="password" 
            name="confirmpwd" 
            id="confirmpwd" /><br> 
      <input type="button" 
        value="Register" 
        onclick="return regformhash(this.form, 
            this.form.firstname, 
            this.form.lastname, 
            this.form.phone, 
            this.form.username, 
            this.form.email, 
            this.form.password, 
            this.form.confirmpwd);" /> 
     </form> 

我也不得不調整JavaScript的形式來接受新的值,這是現在這樣的:

function regformhash(form, uid, firstname, lastname, phone, username, email, password, confirmpwd) { 
    // Check each field has a value 
    if (uid.value == '' || firstname.value == '' || lastname.value == '' || phone.value == '' || email.value == '' || password.value == '' || confirmpwd.value == '') { 
     alert('You must provide all the requested details. Please try again'); 
     return false; 
    } 

現在我得到了兩個窗體頁,並與「confirmpwd」字段關聯的JavaScript頁面上的錯誤「無法讀取屬性未定義的‘價值’」。該字段不是空的,並且名稱沒有從原始模板改變,唯一改變的是名字和姓氏以及電話被添加到表單中。

+1

的要傳遞到'regformhash'參數的數量不是等於參數的數量。 'this.form.firstname'在函數體內成爲'uid',等等。 – DavidDomain

+0

無關:當你有這個工作時,你可能想檢查_trimmed_值對'==''例如'|| lastname.value.trim()==''||'等(爲了避免字段只填充空格) –

+0

@StephenP,是的,我會在字段工作後添加適當的驗證。 –

回答

0

兩件事情,您的功能沒有匹配。首先,您將傳遞8個參數,不包括uid的值,以使函數等於9個輸入。這些值最終不會按照您的預期排列,因此,當函數運行時,confirmpwd未定義,並且當您嘗試獲取未定義的屬性時,會出現"Cannot read property 'value' of undefined"錯誤。

由於uid不是形式,你也沒有驗證username,我繼續前進,並假設你試圖驗證username並相應地更新了你的函數。

function regformhash(form, firstname, lastname, phone, username, email, password, confirmpwd) { 
 
    // Check each field has a value 
 
    if (username.value == '' || firstname.value == '' || lastname.value == '' || phone.value == '' || email.value == '' || password.value == '' || confirmpwd.value == '') { 
 
     alert('You must provide all the requested details. Please try again'); 
 
    } 
 
    return false; 
 
}
<form method="post" name="registration_form" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>"> 
 
    First Name: <input type='text' name='firstname' id='firstname' /><br> 
 
    Last Name: <input type='text' name='lastname' id='lastname' /><br> 
 
    Phone: <input type='tel' name='phone' id='phone' /><br> 
 
    Username: <input type='text' name='username' id='username' /><br> 
 
    Email: <input type="text" name="email" id="email" /><br> 
 
    Password: <input type="password" 
 
         name="password" 
 
         id="password"/><br> 
 
    Confirm password: <input type="password" 
 
           name="confirmpwd" 
 
           id="confirmpwd" /><br> 
 
    <input type="button" 
 
      value="Register" 
 
      onclick="return regformhash(this.form, 
 
          this.form.firstname, 
 
          this.form.lastname, 
 
          this.form.phone, 
 
          this.form.username, 
 
          this.form.email, 
 
          this.form.password, 
 
          this.form.confirmpwd);" /> 
 
</form>

+0

很酷,我認爲uid參數應該在那裏,因爲它是在我正在工作的原始框架中,但我把它直接拿出來,並且稍微調整一下,結果就出來了。 –

+0

Excellente!真高興你做到了 –

-1

您忘記了uid參數

+0

這也是我的想法,但是在我基於此的模板形式中,表單中沒有聲明uid參數,但它在Javascript文件中。這裏是原始.js文件[鏈接](https://github.com/peredurabefrog/phpSecureLogin/blob/master/js/forms.js)。請記住,這個表單確實用於工作,我測試了它,它工作得很好,當我添加3個附加字段時它就停止了。哦,這也是.js文件中的錯誤部分,我現在正在更新它。 –

+0

好吧,我其實剛剛結束了在.js文件中取出uid參數,因爲它似乎並不需要。我最初感到困惑,因爲它在原始框架中,並且當我添加的3個字段不存在時它確實起作用。 –