0

htmlフォームからmysqlにデータを送信しようとしていますが、これを行う前に、JavaScriptを使用してユーザー入力を検証したいと思います。現在行われているのは、ユーザーが[送信]をクリックするとjs検証が正常に機能し、phpファイルが呼び出されることですが、データをDBに送信すると、フィールドはすべて空になります。これが私が現在持っているものです:

HTMLフォーム

<form action="StudentSubmit.php" action="validating()" method="post" class="fancy-form">
.
.
<div>
     <div class="fieldgroup">
          <em>*</em><input type="text" name="addressline1" id="addressline1" class="required" minlength="7">
          <label for="addressline1">Street #1</label>
     </div>
</div>
.
.
.
<div class="submit-wrap">
     <button type="submit" class="submit">Submit</button>
</div>

JS

checkdata =
    {
        checkNull: function(textboxval) {
            if ($(textboxval).val() == null || $(textboxval).val() == "") {
                return false;
            }
            else {
                return true;
            }
        },
        checkNumeric: function(textboxval) {
            var value = $(textboxval).val();
            if ((parseFloat(value) == parseInt(value)) && !isNaN(value)) {
                return true;
            } else {
                return false;
            }
        },
        checkEmail: function(textboxval) {
            var x = $(textboxval).val();
            var atpos = x.indexOf("@");
            var dotpos = x.lastIndexOf(".");
            if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
            {
                return false;
            }
        },
        isChecked: function(textboxval) {
            if ($(textboxval).is(':checked') == false)
            {
                return false;
            } else {
                return true;
            }
        }
    };

function validating() {
var returnValue = true;


var boxFields = new Array();
boxFields[0] = "#firstname";
boxFields[1] = "#lastname";
boxFields[2] = "#addressline1";
boxFields[3] = "#homephone";
boxFields[4] = "#cellphone";
boxFields[5] = "#city";
boxFields[6] = "#state";
boxFields[7] = "#guardian";
boxFields[8] = "#zip";
boxFields[9] = "#emergencycontactperson";
boxFields[10] = "#emergencycontactphone";

var nullValue = true;
for (var i = 0; i < boxFields.length; i++) {
    if (checkdata.checkNull(boxFields[i]) == false) {
        nullValue = false;
        break;
    }

}

var numFields = new Array();
numFields[0] = "#homephone";
numFields[1] = "#cellphone";
numFields[2] = "#emergencycontactphone";

var numericValue = true;
for (var j = 0; j < numFields.length; j++) {
    if (checkdata.checkNumeric(numFields[j]) == false) {
        numericValue = false;
        break;
    }

}

var checkFields = new Array();
checkFields[0] = "#signature";

var checkValue = true;
for (var k = 0; k < checkFields.length; k++) {
    if (checkdata.isChecked(checkFields[k]) == false) {
        checkValue = false;
        break;
    }

}

if (nullValue == false || numericValue == false || checkValue == false) {
    returnValue = false;
    alert("Some required fields were left empty");
    return false;
} else {
    return true;
}
}

PHP

<?php
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$dob = $_POST['dob'];
$emergencycontact = $_POST['emergencycontactperson'];
$address = $_POST['addressline1'] . " " . $_POST['addressline2'];
$city = $_POST['city'];
$state = $_POST['state'];
$zip = $_POST['zip'];
$homephone = $_POST['homephone'];
$cellphone = $_POST['cellphone'];
$guardian = $_POST['guardian'];
$inneighborhood = 0;
if ($zip == "49503")
    $inneighborhood = 1;

$con = mysqli_connect("localhost", "cookarts_root", "password_here", "cookarts_database");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "INSERT INTO student (FirstName, LastName, DOB, EmergencyContact, Address, City,       State, ZIP, CellPhone, HomePhone, Guardian, InNeighborhood)
VALUES
   ('$firstname', '$lastname', '$dob', '$emergencycontact', '$address', '$city', '$state',   '$zip', '$cellphone', '$homephone', '$guardian', '$inneighborhood')";

if ($con->query($sql) === TRUE) {
  header( 'Location: http://cookartscenter.net/ThankYou.php' ) ;
}   
else {
  echo 'Error: '. $con->error;
}

mysqli_close($con);
?>

明確にするために、DBへの接続に問題はありません。私の問題は、JSがPHPがフォームからデータを正しくプルしていないことを検証した後です。私のhtmlコードがもっと必要な場合は、喜んで提供させていただきます。ありがとう。

4

2 に答える 2

2

変化する

<form action="StudentSubmit.php" action="validating()" method="post" class="fancy-form">

<form action="StudentSubmit.php" method="post" class="fancy-form">

そして、以下を追加します。

$('form').submit(function ()
{

  if (!validating())
  {
    return false;
  }

}
)
于 2013-03-26T23:37:07.160 に答える
0

開始フォームタグのフォームアクションをJavaScriptに置き換えます。2つの属性を設定した場合、最後に設定された属性が使用されます。ボタンのonclick()またはonsubmit()を使用できます。

<form action="StudentSubmit.php" onsubmit="validating()" method="post" class="fancy-form">

Javascriptの検証は、ブラウザを使用しているユーザーに対してのみ機能します。スパムボットやそれをオフにしている人には機能しません。最善の策は、サーバー側でPHP検証を使用し、入力をデータベースに挿入する前に入力をクリーンアップすることです。

また、変数をチェックして、それらが空でないことを確認します。

if(!empty(strip_tags($_POST['firstname']))){
 $firstname = strip_tags($_POST['firstname']);
}

$firstname = $mysqli->real_escape_string($firstname);

PDO接続を見積もることもできます

$conn->quote($firstname)
于 2013-03-26T23:36:47.740 に答える