从php消息中删除空输入

时间:2014-10-18 14:23:54

标签: javascript php

我有一个PHP表单,其中包含一些“全局”字段和2个隐藏的div,页面中有额外的字段。它工作正常,但我想用它做一些额外的事情。我会试着解释一下。

例如,全局输入是“名称”和“电子邮件”。额外的div 1输入'Quantity_of_div_1'和'Color_of_div_1',额外的div 2输入'Quantity_of_div_2'和'Color_of_div_2'。

所以我写了这段代码将表单发送到我的电子邮件(它只是代码的一部分):

    <?php
          if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){
             require("js/funcoes_mail.php");

             $name     =  ValidarString($_POST[‘name’], "");
             $email     =  ValidarEmail($_POST['email']);
             $quantity_div_1     =  ($_POST['quantity_div_1']);
             $color_div_1     =  ($_POST['color_div_1']);
             $quantity_div_2     =  ($_POST['quantity_div_2’]);
             $color_div_2     =  ($_POST['color_div_2’]);

$msg = "<html>
            <head><title>SOMETHING</title></head>
            <body>
                            <DIV>
                                <table width=\"565\" height=\"auto\" border=\"0\">
                                    <tr>
                                        <td>
                                            <strong>Name</strong>: $name <br />
                                            <strong>E-mail</strong>: $email <br />
                                        </td>
                                    </tr>       
                                    <tr id=\"msg_div_1\”>
                                        <td>
                                           <strong>Quantity</strong>: $quantity_div_1 <br />
                                           <strong>Color</strong>: $color_div_1 <br />
                                        </td>
                                    </tr>
                                    <tr id=\"msg_div_2\”>
                                        <td>
                                           <strong>Quantity</strong>: $quantity_div_2 <br />
                                           <strong>Color</strong>: $color_div_2 <br />
                                        </td>
                                    </tr>
                                </TABLE>
                            </DIV>
                        </body>
                    </html>";
?>

我有两个按钮(href)调用javascript函数来动态添加额外的div。 (像“显示div 1”和“显示div 2”)。

因此,如果用户单击“显示div 2”链接,则会添加额外的div,用户可以填充输入。

我的问题是,如果用户点击并填充div 2的数据(反之亦然),我不想在我的消息中收到“<tr id=\"msg_div_1\”>”

我该怎么做?我已经尝试了很多方法但是有效。

3 个答案:

答案 0 :(得分:1)

这里你需要进行以下2次更改......

注意:添加验证以输入适当的颜色/数量输入元素。

  1. 在PHP邮件正文中添加if条件以检查要发送的数据
  2. 修改后的PHP代码

    $msg = "<html>
                <head><title>SOMETHING</title></head>
                <body>
                                <DIV>
                                    <table width=\"565\" height=\"auto\" border=\"0\">
                                        <tr>
                                            <td>
                                                <strong>Name</strong>: $name <br />
                                                <strong>E-mail</strong>: $email <br />
                                            </td>
                                        </tr>";
    
    if($quantity_div_1 != "" && $color_div_1 != "") {
        $msg .= "<tr id=\"msg_div_1\">
                                            <td>
                                               <strong>Quantity</strong>: $quantity_div_1 <br />
                                               <strong>Color</strong>: $color_div_1 <br />
                                            </td>
                                        </tr>";
    }
    
    if($quantity_div_2 != "" && $color_div_2 != "") {
        $msg .= "<tr id=\"msg_div_2\">
                                            <td>
                                               <strong>Quantity</strong>: $quantity_div_2 <br />
                                               <strong>Color</strong>: $color_div_2 <br />
                                            </td>
                                        </tr>
                                    </TABLE>
                                </DIV>
                            </body>
                        </html>";
    }
    
    1. 使用javascript,如果触发了相反的div事件,请清除相应的数量/颜色字段。
    2. jQuery代码

      $("a.divSelector").click(function(){
          if($(this).attr('id') == "div1") {
              $("#quantity_div_2").val("");
              $("#color_div_2").val("");
          }else if($(this).attr('id') == "div2") {
              $("#quantity_div_1").val("");
              $("#color_div_1").val("");
          }
      });
      

答案 1 :(得分:0)

您不会在此处显示您的表单代码,但(只是猜测)您可以尝试在运行中构建它:

var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);

// decide which values to add
if( showdiv1 )
{
  field0 = document.createElement("input");
  field0.setAttribute("type", "hidden");
  field0.setAttribute("name", "q_div1");
  field0.setAttribute("value", quantity_of_div1 );

  form.appendChild( field0 );
}

form.submit();

依旧......

答案 2 :(得分:0)

如果字段为空,则可以使用empty()进行检查,并添加if语句以显示它。

如果你有超过2的颜色,你可以在你的表格中将它命名为数组... color_div_3 ...
然后你可以对此进行循环。

修复您的代码

<?php

if(isset($_POST['acao']) && $_POST['acao'] == 'enviar') {
    require("js/funcoes_mail.php");

    $name           = ValidarString($_POST['name'], "");
    $email          = ValidarEmail($_POST['email']);
    $quantity_div_1 = (!empty($_POST['quantity_div_1'])) ? $_POST['quantity_div_1'] : false;
    $color_div_1    = (!empty($_POST['color_div_1'])) ? $_POST['color_div_1'] : false;
    $quantity_div_2 = (!empty($_POST['quantity_div_2'])) ? $_POST['quantity_div_2'] : false;
    $color_div_2    = (!empty($_POST['color_div_2'])) ? $_POST['color_div_2'] : false;

    $msg = "<html>
                <head><title>SOMETHING</title></head>
                <body>
                    <DIV>
                        <table width='565' height='auto' border='0'>
                            <tr>
                                <td>
                                    <strong>Name</strong>: $name <br />
                                    <strong>E-mail</strong>: $email <br />
                                </td>
                            </tr>";
    if($quantity_div_1 || $color_div_1) {
        $msg .=                 "<tr id='msg_div_1'>
                                    <td>
                                       <strong>Quantity</strong>: $quantity_div_1 <br />
                                       <strong>Color</strong>: $color_div_1 <br />
                                    </td>
                                </tr>";
    }

    if($quantity_div_2 || $color_div_2) {
        $msg .=                 "<tr id='msg_div_2'>
                                    <td>
                                       <strong>Quantity</strong>: $quantity_div_2 <br />
                                       <strong>Color</strong>: $color_div_2 <br />
                                    </td>
                                </tr>";
    }

    $msg .=             "</TABLE>
                    </DIV>
                </body>
            </html>";
}
?>

要考虑的事情

如果你有两个以上的字段,并且你想要做这个动态,你可以在你的表单中使用数组,并在php中使用循环检查这个数组。

为了更有条理地执行此操作,我添加了一些j来处理表单中的数组。

这样的事情:

<?php
if(isset($_POST['qandc'])) {
    foreach($_POST['qandc'] as $qandc) {
        $q = $qandc['quantity_div'];
        $c = $qandc['color_div'];
        if($q || $c) {
            echo 'quantity: '.$q;
            echo 'color: '.$c.'<br>';
        }
    }
}
?>

<form action="" method="post">
    <div class="clonethis">
        <input type="text" name="qandc[0][quantity_div]">
        <input type="text" name="qandc[0][color_div]">
    </div>
    <div class="clones">

    </div>
    <button type="button" class="add-inputs">Add inputs</button>
    <input type="submit" value="Send">
</form>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
    var newNameID = 1;
    $('.add-inputs').click(function() {
        var clone = $('.clonethis').clone();
        clone.appendTo($('.clones'));
        $('.clones').find('.clonethis').each(function() {
            $(this).removeClass('clonethis');
            $(this).find('input[type="text"]').each(function() {
                var existingName = $(this).attr('name');
                var newName = existingName .replace(/(\d+)+/g, function(match, number) {
                   return parseInt(newNameID);
                });
                $(this).attr('name', newName);
                $(this).val("");
            });
        });
        newNameID++;
    });
});
</script>