我不确定为什么我的if声明总是在任何情况下验证为假。我一直在阅读代码,看起来并没有什么不对。如果有人能帮助我,那就太好了。
有问题的if语句是
if($dataValid && $_POST)
这是我的代码:
<?php
$instrument = trim($_POST["itemName"]);
$description = trim($_POST["description"]);
$supplier = trim($_POST["supplierCode"]);
$cost = trim($_POST["cost"]);
$price = trim($_POST["price"]);
$onHand = trim($_POST["onHand"]);
$reorderPoint = trim($_POST["reorder"]);
$dataValid = true ;
$instrumentChk = "/^[a-z0-9:; -,]+$/i";
$descriptionChk = "/^[a-z0-9\., -'\r\n]+$/im";
$supplierChk = "/^[a-z0-9 -]+$/i";
$costChk = "/^\d{0,}\.\d\d$/";
$priceChk = "/^\d{0,}\.\d\d$/";
$onHandChk = "/^\d*$/";
$reorderPointChk = "/^\d*$/";
if($_POST){
if(!preg_match($instrumentChk, $instrument)) {
$instrumentErr = "<span style='color:#f00'>Instrument name must be either letters, spaces,
colon, semi-colon, dash, comma, apostrophe or numeric character (0-9)</span>";
$dataValid = false;
}
elseif($instrument == ""){
$instrumentErr = "<span style='color:#f00'>Instrument name must not be blank</span>";
$dataValid = false;
}
if(!preg_match($descriptionChk, $description)) {
$descriptionErr = "<span style='color:#f00'>description must be either letters, spaces,
dashes, commas, apostrophes or digits</span>";
$dataValid = false;
}
elseif($description == "") {
$descriptionErr = "<span style='color:#f00'>Description must not be blank</span>";
$dataValid = false;
}
if(!preg_match($supplierChk, $supplier)) {
$supplierErr = "<span style='color:#f00'>Supplier code must be either
letters, spaces, dashes, or numeric characters(0-9)</span>";
$dataValid = false;
}
elseif($supplier == "") {
$supplierErr = "<span style='color:#f00'>Supplier must not be blank</span>";
$dataValid = false;
}
if(!preg_match($costChk, $cost)) {
$costErr = "<span style='color:#f00'>You must enter monetary amounts only</span>";
$dataValid = false;
}
elseif($cost == null) {
$costErr = "<span style='color:#f00'>Cost cannot be blank</span>";
$dataValid = false;
}
if(!preg_match($priceChk, $price)) {
$priceErr = "<span style='color:#f00'>You must enter monetary amounts only</span>";
$dataValid = false;
}
elseif($price == null) {
$priceErr = "<span style='color:#f00'>Price cannot be blank</span>";
$dataValid = false;
}
if(!preg_match($onHandChk, $onHand)) {
$onHandErr = "<span style='color:#f00'>You must enter digits only</span>";
$dataValid = false;
}
elseif($onHand == null) {
$onHandErr = "<span style='color:#f00'>Instruments on hand cannot not be blank</span>";
$dataValid = false;
}
if(!preg_match($reorderPointChk, $reorderPoint)) {
$reorderPointErr = "<span style='color:#f00'>You must enter digits only</span>";
$dataValid = false;
}
elseif($reorderPoint == null){
$reorderPointErr = "<span style='color:#f00'>Reorder point cannot not be blank</span>";
$dataValid = false;
}
}
if($dataValid && $_POST) {
$secret = file('/home/int322_151a14/secret/topsecret');
$link = mysqli_connect(trim($secret[0]), trim($secret[1]), trim($secret[2]), trim($secret[3])) or die(mysqli_connect_error());
$deleted = 'n';
$backOrder = (isset($_POST['backOrder']) && $_POST['backOrder'] == 'y')?"y":"n";
$sql_insert_query = 'INSERT INTO inventory values("","' . $instrument . '", "' . $description . '", "' . $supplier . '",
"' . $cost . '", "' . $price . '", "' . $onHand . '", "' . $reorderPoint . '", "' . $backOrder . '", "' . $deleted . '")';
$sql_insert_result = mysqli_query($link, $sql_insert_query) or die("Query unsuccessful " . mysqli_error($link));
if($sql_insert_result) {
header("Location: view.php");
} else {
echo "Query unsuccessful - <a href=add.php>please try again</a>";
}
} else {
?>
<?php $page_title = 'add'; ?>
<?php include "library.php"; ?>
<?php heading(); ?>
<h1>Chidi's Musical Instruments</h1>
<header>
<nav id="navigation">
<a href="add.php">Add</a>
<a href="view.php">View All</a>
</nav>
</header>
<br/>
<form action="" method='post'>
<table id="newTable">
<tr>
<td>
<label>Instrument name:</label>
<input type="text" name="itemName" value="<? echo $instrument ?>"><? echo $instrumentErr ?>
</td>
</tr>
<tr>
<td>
<label>Description:</label>
<textarea rows="5" cols="20" name="description"><? echo $description ?></textarea><? echo $descriptionErr ?>
</td>
</tr>
<tr>
<td>
<label>Supplier Code:</label>
<input type="text" name="supplierCode" value="<? echo $supplier ?>"><? echo $supplierErr ?>
</td>
</tr>
<tr>
<td>
<label>Cost:</label>
<input type="text" name="cost" value="<? echo $cost ?>"><? echo $costErr ?>
</td>
</tr>
<tr>
<td>
<label>Selling Price:</label>
<input type="text" name="price" value="<? echo $price ?>"><? echo $priceErr ?>
</td>
</tr>
<tr>
<td>
<label>Number on Hand:</label>
<input type="text" name="onHand" value="<? echo $onHand ?>"><? echo $onHandErr ?>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
<?
}
?>
<?php footer(); ?>
如果数据有效则应评估为true并返回错误,因为它无法连接到数据库,而是只删除所有字段并且不执行任何操作。如果数据实际上无效,则会按原样重新填充字段并使您重试。如果if语句的计算结果为false,那么我的代码中没有任何地方告诉它什么都不做,而这似乎是if语句返回的内容。
答案 0 :(得分:0)
你应该有这样的代码:
<?php
//You must verify first if the form was send
if(isset($_POST["itemName"])){
//you should have checked that $_POST["itemName"] existed before use it
$instrument = trim($_POST["itemName"]);
$description = trim($_POST["description"]);
$supplier = trim($_POST["supplierCode"]);
$cost = trim($_POST["cost"]);
$price = trim($_POST["price"]);
$onHand = trim($_POST["onHand"]);
$reorderPoint = trim($_POST["reorder"]);
$dataValid = true ;
$instrumentChk = "/^[a-z0-9:; -,]+$/i";
$descriptionChk = "/^[a-z0-9\., -'\r\n]+$/im";
$supplierChk = "/^[a-z0-9 -]+$/i";
$costChk = "/^\d{0,}\.\d\d$/";
$priceChk = "/^\d{0,}\.\d\d$/";
$onHandChk = "/^\d*$/";
$reorderPointChk = "/^\d*$/";
if(!preg_match($instrumentChk, $instrument)) {
$instrumentErr = "<span style='color:#f00'>Instrument name must be either letters, spaces,
colon, semi-colon, dash, comma, apostrophe or numeric character (0-9)</span>";
$dataValid = false;
}
....
//Same validation
if($dataValid && isset($_POST['backOrder']) {
$secret = file('/home/int322_151a14/secret/topsecret');
...