[英]select list from database validation
衷心感谢您为解决此错误所做的努力。 从数据库中进行选择(下拉列表)。当下拉列表正常工作时(以正常形式显示。),我无法获得正确的验证。或者我不知道有什么错误。 如果我从列表中选择一个国家/地区,则会以表格形式出现错误(请选择企业总部国家/地区)
形式如下:
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" />
Country of Residence of Business' Head Office<br />
<select name="country_location" class="select">
<option> Select Country</option>
<?php
include('inc/mysqli_connect.php');
$q ="SELECT id, CONCAT_WS('', country) FROM country ORDER BY country ASC";
$r = mysqli_query($dbc, $q);
if(mysqli_num_rows($r) > 0){
while ($row = mysqli_fetch_array($r, MYSQLI_NUM)){
echo "<option value=\"$row[0]\"";
// check for stickyness
if(isset($_POST['country']) && ($_POST['country']==$row[0])) echo'country="country"';
echo ">$row[1]</option>\n";
}
}
mysqli_close($dbc);
?>
</select><br />
<input type="hidden" name="submitted" value="TRUE" /><br />
<input type="submit" name="submit" value="Register" id="submit"/>
</div>
</form>
然后验证
<?php
require_once('inc/config_inc.php');
$page_title = 'Register';
include('inc/session.html');
if(isset($_POST['submitted'])){
require_once ('inc/mysqli_connect.php');
$trimmed =array_map('trim', $_POST);
$business_name=$country_location=$business_city=$nature_of_business=$email=$telephone=$director_last_name=$director_first_name=$password=FALSE;
if(isset($_POST['country_location']) && ($_POST['country_location'] == 'country') && ($_POST['country'] > 0)){
$country_location = (int)$_POST['country'];
}
else{
$country_location = FALSE;
echo'<p class="error">Please select business\' head office country!</p>';
}
if($business_name && $country_location && $business_city && $nature_of_business && $email
&& $telephone && $director_last_name && $director_first_name && $password){
"SELECT registration_id FROM users WHERE email='$email' ";
$q = mysqli_query($dbc, $q) or trigger_error("Query: $q\n<br /> MYSQL Error:
".mysqli_error($dbc));
if(mysqli_num_rows($r) == 0){
$a = md5(uniqid(rand(), true));
$q = "INSERT INTO registration( business_name,country_location,business_city,nature_of_business,email,telephone,director_last_name,director_first_name, ,password ,active,registration_date)
VALUES
( '$business_name', '$country_location', '$business_city' ,'$nature_of_business', '$email', '$telephone', '$director_last_name','$director_first_name','$active','SHA1($password)' NOW())";
$r = mysqli_query($dbc, $q) or trigger_error("Query: $q\n<br \> MySQL Error: ".mysqli_error($dbc));
if(mysqli_affected_rows($dbc) ==1){ // send email
$body =" Thank you for registering at....You are guaranteed customer statifaction!. To activate your account, please click on this lin:\n\n";
$body .=BASE_URL .'activate.php?x='.urlencode($email) . "&y=$a"; mail($trimmed
['email'], 'Registration Confirmation', $body, 'From: example.com');
echo'<h3 > Thank you for registering! A confirmation email has been sent to your email address. Click on the link in that email to activate your account.</h3>';
include('inc/footer.php');
exit();
}
else{
echo'<p class="error"> You could not be registered due to a system error. We apologise for any inconvinience.</p>';
}
}
else{ echo'<p class="error"> The email address entered has been registered.if you have forgotten your password, click link to <a href="recover_password.php">recover your password</a></p>';
}
}
else{ echo'<p class = "error">Please re-enter your password and try again.</p>';
}mysqli_close($dbc);
}
?>
数据库:
数据库名称:用户表名称:国家。 行:id(int),值(国家名称),国家(国家名称)
请注意,表单中有很多字段,我只指出了concreend字段,因此可以看到验证。
另请注意,这是一位绝对的新开发人员,也请访问此论坛。因此,我可能违反了规则。 请纠正我而不是侮辱,我将始终进行纠正。
提前致谢!
在您的表单中,您具有<select name="country_location">
,并将每个<option>
的值设置为每个国家的ID( echo "<option value=\\"$row[0]\\"";
)。 这意味着在发布表单时, $_POST['country_location']
_ $_POST['country_location']
是所选的国家/地区ID。
在验证中,您检查以下内容:
if(isset($_POST['country_location']) && ($_POST['country_location'] == 'country') && ($_POST['country'] > 0)){
但是$_POST['country_location']
的值如何为'country'? 它应该包含国家/地区的ID。 您尝试设置<option country="country">
,但这将不起作用。 仅<option value>
将通过POST发送。
如果将上述行更改为:
if(isset($_POST['country_location']) && ctype_digit($_POST['country_location']) && ($_POST['country'] > 0)){
ctype_digit检查值是否仅包含数字。 请参阅PHP:ctype_digit-手册以获取更多信息。 由于我希望您的ID是数字,因此应该可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.