Как предотвратить отправку строк со значениями по умолчанию в базу данных MySQL - PullRequest
0 голосов
/ 08 августа 2011

У меня есть форма с 2 разделами, каждый из которых начинается с одной строки и к которой можно добавить дополнительные строки с помощью скрипта. Вы можете увидеть форму внизу этой страницы .

Форма использует значения по умолчанию, и я ищу способ не отправлять строки, содержащие значения по умолчанию (как в базу данных MySQL, так и по электронной почте). Поскольку люди могут заполнять только одну строку (т. Е. По ставке Waged или Unwaged), часто я хочу, чтобы была представлена ​​только одна строка информации. Текущий код для формы ниже.

Спасибо за любую помощь заранее,

Ник

HTML:

<form method="post" name="booking" action="bookingengine.php">
    <fieldset>
        <h2>Waged/Organisation Rate</h2>
        <p>
            <input type="text" name="name[]">
            <input type="text" name="email[]">
            <input type="text" name="organisation[]">
            <input type="text" name="position[]">
        </p>
        <p><span class="add">Add person</span></p>
    </fieldset>

    <fieldset>
        <h2>Unwaged Rate</h2>
        <p>
            <input type="text" name="name2[]">
            <input type="text" name="email2[]">
        </p>
        <p><span class="add">Add person</span></p>
    </fieldset>

    <p><input type="submit" name="submit" id="submit" value="Submit and proceed to payment page" class="submit-button" /></p>

</form>

Сценарий:

<script>
$(function() {
    var defaults = {
        'name[]':           'Name',
    'name2[]':           'Name',
        'email[]':          'Email',
     'email2[]':          'Email',
        'organisation[]':   'Organisation',
        'position[]':       'Position'

    };

    // separating set and remove
    // note that you could add "defaults" as an arg if you had different
    // defaults for different fieldsets
    var setDefaults = function(inputElements) {
        $(inputElements).each(function() {
            var d = defaults[this.name];
            if (d) {
                // set with jQuery
                // we don't need the data - just check on the class
                $(this).val(d)
                    .addClass('default_value');
            }
        });
    };

    var removeDefaults = function(inputElements) {
        $(inputElements).each(function() {
           if ($(this).hasClass('default_value')) {
                $(this).val('')
                   .removeClass('default_value');
           }
        });
    };

    setDefaults(jQuery('form[name=booking] input'));

    $("span.add").click(function() {
        // get the correct fieldset based on the current element
        var $fieldset = $(this).closest('fieldset');
        var $inputset = $('p', $fieldset)
                .first()
                .clone()
                .insertBefore($('p', $fieldset).last());
        // add a remove button
        $inputset.append('<span class="remove">Remove</span>');
        setDefaults($('input', $inputset));
        // return false; (only needed if this is a link)
    });

    // use delegate here to avoid adding new 
    // handlers for new elements
    $('fieldset').delegate("span.remove", {
        'click': function() {
            $(this).parent().remove();
        }
    });

    // Toggles 
    $('form[name=booking]').delegate('input', {
        'focus': function() {
            removeDefaults($(this));
        },
        'blur': function() {
            // switch to using .val() for consistency
            if (!$(this).val()) setDefaults(this);
        }
    });
 }); 
 </script>

PHP:

<?php

$emailFrom = "****";
$emailTo = "****";
$subject = "****";

$body = "****" . "\n\n";
$row_count = count($_POST['name']);
$row_count2 = count($_POST['name2']);

$values = array();

 for($i = 0; $i < $row_count; $i++) {
     // variable sanitation...
     $name = trim(stripslashes($_POST['name'][$i]));
     $email = trim(stripslashes($_POST['email'][$i]));
     $organisation = trim(stripslashes($_POST['organisation'][$i]));
     $position = trim(stripslashes($_POST['position'][$i]));

     // this assumes name, email, and telephone are required & present in each element
     // otherwise you will have spurious line breaks. 
     $body .= "Name: " . $name . "    Email: " . $email . "  Organisation: " . $organisation . "   Position: " . $position . "\n\n";

     //prepare the values for MySQL
     $values[] = '(\'' . $name . '\',\'' . $email . '\',\'' . $organisation . '\',\'' . $position . '\')';

}

mysql_select_db($database, $connection);

$query1 = "INSERT INTO conference (Name, Email, Organisation, Position) VALUES "  . implode(',', $values);

$result1 = mysql_query($query1);
if (!$result1) {
  die('Invalid query: ' . mysql_error());
}


 $body .= "****" . "\n\n";

 $values = array();

 for($i = 0; $i < $row_count; $i++) {
     // variable sanitation...
     $name = trim(stripslashes($_POST['name2'][$i]));
     $email = trim(stripslashes($_POST['email2'][$i]));

     // this assumes name, email, and telephone are required & present in each element
     // otherwise you will have spurious line breaks. 
     $body .= "Name: " . $name . "    Email: " . $email . "\n\n";

     //prepare the values for MySQL
     $values2[] = '(\'' . $name . '\',\'' . $email . '\')';
}
$query2 = "INSERT INTO conference (Name, Email) VALUES " . implode(',', $values2);

$result2 = mysql_query($query2);
if (!$result2) {
  die('Invalid query: ' . mysql_error());
}

// send email 
$success = mail($emailTo, $subject, $body, "From: <$emailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=/conference/payment.html\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

1 Ответ

0 голосов
/ 08 августа 2011

Я бы использовал оператор IF в PHP, предполагая, что любая полученная вами проверка не вернет ошибок.

Например

// SET VARIABLES
$name2 = $_POST['name2'];
// SET CORRECT VALUES
if($name2 == "Surname") { $name2 = ""; }
// RUN DB FUNCTIONS

Я бы делал это для каждого значения по умолчанию, позволяя мне вставить то, что мне нужно или нужно, из значений по умолчанию и удалить или изменить остальные. Это также означает, что пользовательские данные остаются в такте.

Надеюсь, это поможет вам встать на правильный путь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...