2010-11-09 75 views
0

我目前有一個表單,要求用戶的電子郵件,手機號碼和手機號碼。沒有任何字段被標記爲必需的,因爲我只需要電子郵件或手機號碼。如果用戶輸入電子郵件和電話號碼,或者只輸入電話號碼和電子郵件地址,表單提交就會很好。但是,如果用戶嘗試僅使用電子郵件和電話號碼提交表單,則表單不會提交。換句話說,爲了使表單正常工作,需要電話號碼。除非填寫了特殊的非必填字段,否則表格不會提交(PHP)

我如何避免這種情況?我希望用戶能夠輸入他們的電子郵件或只是電話;既不應該是強制性的。任何幫助將不勝感激。

我也有問題驗證電話號碼(FILTER_VALIDATE_INT不適用於10位數字),但這是一個問題,我會稍後解決。

該窗體的代碼如下:

<form action="insert.php" method="post" id="signup"> 
    <p> 
    <input type="text" id="email" name="email" value="E-mail" /><br/> 
    <input type="text" id="phone" name="phone" value="Phone" /><br/> 
    <select id="carrier" name="carrier"> 
     <option value="" selected="selected">Carrier</option> 
     <option value="att">AT&amp;T</option> 
     <option value="sprint">Sprint</option> 
     <option value="tmobile">T-Mobile</option> 
     <option value="verizon">Verizon</option> 
    </select> 
    </p> 
    <p> 
    <input type="image" src="images/button.gif" alt="Register!" /> 
    </p> 
</form> 

的PHP腳本的代碼如下:

<?php 
$con = mysql_connect("dbhost","dbuser","dbpass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("dbname", $con); 

$filters = array(
    "email"=> FILTER_VALIDATE_EMAIL, 
    "phone" => FILTER_VALIDATE_INT, 
); 

$result = filter_input_array(INPUT_POST, $filters); 

if (!$result["email"]) 
    { 
    echo("E-mail is invalid.<br />"); 
    } 
elseif(!$result["phone"]) 
    { 
    echo("Phone is invalid.<br />"); 
    } 
else 
    { 
    $sql="INSERT INTO dbtable (email,phone,carrier) 
    VALUES 
    ('$_POST[email]','$_POST[phone]','$_POST[carrier]')"; 
    if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error()); 
     } 

    mysql_close($con); 
    header('Location: http://pagename.com'); 
    } 

?> 

回答

3
$result = filter_input_array(INPUT_POST, $filters); 

if(!empty($result["email"]) || !empty($result["phone"])){ 
    //Being here means that either the email or the phone has passed 
    //your validation and therefore you should be able to insert in the db. 
}else{ 
    //Being here means that neither the phone or email have been filled 
    //and should show a message like "Please fill at least one field :)" 
} 

你的問題的事實來了,是你的if聲明要求填寫正確的BOTH字段,如果是,則插入數據。只要按照你的條件結構。

+0

臭蟲!你打敗了我很多...你的回答是正確的,所以我不會發布我自己的。 – 2010-11-09 16:08:34

+0

非常感謝!我絕對只是馬虎。我非常感謝幫助。 – ARP 2010-11-09 16:37:10

+0

沒有probs,快樂編碼。 – 2010-11-09 16:51:55

相關問題