2012-02-19 71 views
0

我知道有關於.asp頁面的類似線程,但是我使用的PHP格式涉及提交操作導致調查的PHP表單。PHP表單需要的兩個文本字段之一

我正在開發的客戶端想要填寫任一個文本字段,而不需要填寫任何一個文本字段,必須填寫其中的一個。它可以是兩者中的任何一個,但是兩者不能留空。

我寧願不使用jQuery,但如果這是必要的,我會學習如何。我是全新的,只是創建表單並將其連接到數據庫需要大量的學習。

感謝您的幫助,下面我已經發布了HTML表單以及它鏈接到的php腳本。

<form action="insert.php" method="post"> 
Name: <input type="varchar" name="name" /> 
<span style="color: #F00">or</span> Email: 
<input type="varchar" name="email" /> 
<input type="submit" /> 
</form> 

PHP的「insert.php

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

mysql_select_db("gobagtoo_1", $con); 

$sql="INSERT INTO name_email (name, email) 
VALUES 
('$_POST[name]','$_POST[email]')"; 

if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
else 
$url = 'tool.html'; 
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'; 

mysql_close($con) 
?> 

中號

+1

確保逃生名/電子郵件,以防止注射。 – 2012-02-19 19:08:10

+0

Varchar不是有效類型的表單輸入元素。 – j08691 2012-02-19 19:11:03

+1

請不要大喊! – markus 2012-02-19 19:11:34

回答

2

你應該做到這一點無論在客戶端(在那裏你看到的形式),JavaScript和服務器端(在PHP提交表單後)。

在客戶端: 1.將函數添加到頁面validateForm。 2.將id屬性添加到您的姓名和電子郵件元素。 3.將一個onsubmit元素添加到您的表單標記。

<html> 
    <head> 
    <script language="javascript"> 
    function validateForm(){ 
     var value1 = document.getElementById('nameId').value; 
     var value2 = document.getElementById('emailId').value; 
     if(value1 != "" || value2 != "") 
     { 
      return true;  
     } 
     alert("You must enter a value"); 
     return false; 
    } 
    </script> 
    </head> 

    <body> 
    <form action="insert.php" method="post" onsubmit="return validateForm();"> 
    Name: <input type="text" name="name" id="nameId" /> 
    <span style="color: #F00">or</span> Email: <input type="text" name="email" id="emailId" /> 
    <input type="submit" /> 
    </form> 
    </body> 
    </html> 

在PHP端:

<?PHP 

    function makeSafeish($value){ 
     return mysql_escape_real_string($value); 
     // If you put this in a function, you can do more w/ it. I don't use this as is but don't want to be judged by the community here for my bad use :P 
    } 

    if(strlen($_POST['name']) > 0 && strlen($_POST['email']) > 0){ 
     $con = mysql_connect("localhost","******","******"); 
     if (!$con) { 
      die('Could not connect: ' . mysql_error()); 
     } 
     mysql_select_db("*****", $con); 
     $sql="INSERT INTO name_email (name, email) VALUES ('".makeSafeish($_POST["name"])."','".makeSafeish($_POST["email"])."')"; 
     if (! mysql_query($sql, $con)) { 
      die('Error: ' . mysql_error()); 
     } else { 
      $url = 'tool.html'; 
     } 

     echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';  
     mysql_close($con); // you're not gonna get here because of the above line. 
    }else{ 
     echo 'You must enter either an email or name."; 
    } 
    ?> 
+0

很好的答案。有幾點需要注意,您應該保持一致的間距約定(或者'else else {'或'} else {'),並且推薦使用與mysql_ *'不同的特性,因爲它被有效地棄用。我建議PDO。 – 2012-02-19 19:31:07

+0

嗨真相,感謝您的意見。對於OP,我同意你應該使用PDO;我不使用mysql_,雖然這是我第一次學習。 PDO還將幫助您防止SQL注入。另外,我使用的間距與我通常使用的慣例不同,所以差異。對於OP,在最低限度,我會告訴你總是在兩邊放一個空格!如果你使用它。 – phpmeh 2012-02-19 19:36:29

+0

@phpmeh它非常接近工作,它要求我輸入至少一個字段,但是我得到以下錯誤。我非常感謝這個幫助。 警告:輸入中意外的字符:'''(ASCII = 39)狀態= 1第24行中的/home/gobagtoo/public_html/insert.php 解析錯誤:語法錯誤,意外的T_STRING,期待','或';'在線24上的/home/gobagtoo/public_html/insert.php – 2012-02-20 08:55:47

相關問題