2012-02-19 68 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

相关问题