PHP使用for或语句给出错误
Posted
技术标签:
【中文标题】PHP使用for或语句给出错误【英文标题】:PHP using for or statement giving error 【发布时间】:2015-06-05 18:36:47 【问题描述】:我正在尝试在用户上传文件时编写验证代码。 条件:文件大小最大500kb,只有doc和docx文件 我使用此代码但无法正常工作。
我想授予访问者在我的网站上上传简历的权限,并带有服务器端验证 (php)。
<html>
<head>
<title>Validation</title>
</head>
<body>
<?php
$msg = "";
$msgsize = "";
if(isset($_POST['add']))
$filename=$_FILES['resume']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
$uname = $_POST['uname'];
$uemail = $_POST['uemail'];
$uphone = $_POST['uphone'];
$resume = $_FILES['resume']['name'];
if($uname=="" || $uemail=="" || $uphone=="" || $resume=="")
$msg = "Please fill in all required fields!";
else if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$uemail))
$msg = "Invalid email format";
//echo $ext;
else if($ext != '.doc' or $ext != '.docx')
$msg = "Type Error";
else if($_FILES["resume"]["size"]>500000)
$msg = "Size error". $_FILES["resume"]["size"] . "Only 500KB Resume Allowed";
else
$msg = "GOOD";
?>
<div style="background:#FF6600; padding:10px;"><?php echo $msg . $msgsize; ?></div>
<form id="form1" enctype="multipart/form-data" name="form1" method="post" action="<?php $_PHP_SELF ?>">
<table border="1">
<tr>
<td >Name</td>
<td ><input name="uname" type="text" /></td>
</tr>
<tr>
<td>Email</td>
<td><input name="uemail" type="text" /></td>
</tr>
<tr>
<td>Phone</td>
<td><input name="uphone" type="text" /></td>
</tr>
<tr>
<td>Resume</td>
<td><input name="resume" value="60000000" id="resume" type="file" /></td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" name="add" id="add" value="Add">
</td>
</tr>
</table>
</form>
</body>
</html>
【问题讨论】:
发生什么错误..?? 我想通过所有条件但是这个语句不起作用:else if($ext != '.doc' or $ext != '.docx') 不检查总是错误的结果跨度> 当我上传 doc 或 docx 文件时,它会显示 - 仅上传 DOC 或 Docx 文件 这样比较if($ext!='.doc' OR $ext!='.docx' )
不工作兄弟检查它并在你的本地主机上运行,得到同样的错误
【参考方案1】:
这里你需要改变
else if($ext != '.doc' AND $ext != '.docx') //use AND instead of OR
$msg = "Type Error";
【讨论】:
工作,但现在我有一个问题,我想保留文本框值任何建议?? 参考这个链接-***.com/questions/2246227/…【参考方案2】:试试这个
$filename=$_FILES['resume']['name'];
if(substr($filename,-3)=='doc' || substr($filename,-4)=='docx')
echo 'OK';
else
echo "Upload Only DOC or Docx File";
我希望这应该工作
【讨论】:
【参考方案3】:strpos() 在另一个字符串中找到第一次出现的字符串,所以如果文件名是这样的:-
"blahfile-2.2-1.docx" you will get "2-1.docx" not "docx"
所以它不会匹配,你应该通过方法找到字符串的出现:-
strrpos() (case-sensitive) strripos() (case-insensitive)
它会给你正确的“.docx”
似乎还有一些其他问题:-
使用 $_FILES['resume'] 而不检查是否设置 所以应该是这样的:-
if(!isset($_FILES['resume']))
$msg = "File not selected !";
第二
$uname = $_POST['uname'];
$uemail = $_POST['uemail'];
$uphone = $_POST['uphone'];
$resume = $_FILES['resume']['name'];
应该是这样的:-
$uname = (isset($_POST['uname']) ? $_POST['uname'] : "";
$uemail = ...
$uphone = ...
$resume = ...
谢谢:)
【讨论】:
以上是关于PHP使用for或语句给出错误的主要内容,如果未能解决你的问题,请参考以下文章
php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]