【问题标题】:PHP form either one of two text fields requiredPHP表单需要两个文本字段之一
【发布时间】:2012-02-19 19:04:56
【问题描述】:

我意识到关于 .asp 页面也有类似的主题,但是我正在使用一个 html 表单,其中包含 php 参与导致调查的提交操作。

我正在为其开发的客户希望填写其中一个文本字段,而这两个字段都不是硬性要求,必须填写两个字段之一。它可以是两者之一,但两者都不能留空。

我宁愿不使用 jquery,但是如果有必要我会学习如何使用。我对所有这些都是全新的,只是创建表单并将其连接到数据库就需要大量学习lol。

感谢您的帮助,下面我已经发布了 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)
?>

M

【问题讨论】:

  • 确保转义姓名/电子邮件以防止注入。
  • Varchar 不是表单输入元素的有效类型。
  • 提交编辑以供同行评审删除他的数据库主机名和系统特定信息
  • 当然可以。它只是没有附加任何特殊行为,因此它的行为类似于"text"

标签: php forms submit required


【解决方案1】:

您应该在客户端(您看到表单的地方)使用 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.";
    }
    ?> 

【讨论】:

  • 好答案。请注意,您应该保持一致的间距约定(}else{} else {),此外,建议使用与 mysql_* 不同的功能,因为它已被有效弃用。我建议 PDO。
  • 嗨,真相,感谢您的 cmets。对于 OP,我同意您应该使用 PDO;我也不使用 mysql_ 虽然这是我首先学习的方式。 PDO 还将帮助您防止 SQL 注入。另外,我使用的间距与我通常使用的约定不同,因此存在差异。对于 OP,至少,我会告诉你总是在 !如果你使用它。
  • @phpmeh 它非常接近工作,它要求我至少输入一个字段,但是我收到以下错误。我非常感谢这种帮助。警告:输入中的意外字符:''' (ASCII=39) state=1 in /home/gobagtoo/public_html/insert.php on line 24 解析错误:语法错误,意外的 T_STRING,期待 ',' 或 ';'在 /home/gobagtoo/public_html/insert.php 第 24 行
  • 请不要使用任何命名约定或我犯的任何错误,因为我正在使用它来学习 :) 你们在这些东西上领先于我。所以我注意到在'Echo'你必须输入电子邮件或姓名的行中。最后有一个单引号和一个双引号我改变了它,现在我得到的唯一错误是。致命错误:调用到第 4 行 /home/gobagtoo/public_html/insert.php 中的未定义函数 mysql_escape_real_string()
  • 糟糕,我把字倒过来了:us2.php.net/manual/en/function.mysql-real-escape-string.php 你应该把它改成 mysql_real_escape_string 而不是 escape_real
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2016-06-10
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多