【问题标题】:PHP File upload script getting in the wayPHP文件上传脚本阻碍
【发布时间】:2015-03-28 17:53:02
【问题描述】:

我有这个表格

如果单击第一个单选按钮,则启用其下方的文本字段,如果单击第二个单选按钮,则启用文件上传,禁用前者,反之亦然。如果选择了文件上传选项,它工作正常,但如果选择了第一个单选按钮并且文件上传被禁用,它不会在数据库中插入数据。 :/ 即使文件上传被禁用/为空,应该怎么做才能成功发送表单详细信息?

代码:

 <form name="form" method="POST" enctype="multipart/form-data">
   <table width="416" height="245" border="1" align="center">
   <tr>
   <td colspan="2">Transaction No: <input type="text" name="transaction_no" id="transaction_no" /> </td>
   </tr>
   <tr>
   <td colspan="2" align="center">Please select the mode of payment</td>
   </tr>
   <tr>
   <td width="183" align="center"><input name="rad" type="radio" onclick="enableField(this)" value="Smart Money" checked="checked"> 
   Smart Money</td>
   <td width="201" align="center"><input name="rad" type="radio" onclick="enableField(this)" value="BPI"> BPI Bank Deposit</td>
   </tr>
   <tr>
   <td align="center"><input type="text" name="contactno" id="contactno"></td>
   <td align="center"><input name="filename" type="file" id="filename" disabled="disabled"/></td>
   </tr>
   <tr>
   <td>Total amount sent:</td>
   <td>&nbsp;<input type="text" name="totalsent" id="totalsent" /></td>
   </tr>
   <tr>
   <td>Date sent:</td>
   <td>&nbsp;<input type="text" name="datesent" id="datesent" /></td>
   </tr>
   <tr>
   <td colspan="2" align="center"><input name="submit" type="submit" id="submit" value="Submit" /></td>
   </tr>
   </table>
   <input type="hidden" name="MM_insert" value="form" />

   </form>

PHP

<?php

if(isset($_FILES['filename'])){
$errors = array();
$file_name = $_FILES['filename']['name'];
$file_size =$_FILES['filename']['size'];
$file_tmp =$_FILES['filename']['tmp_name'];
$file_type=$_FILES['filename']['type'];   
$file_ext=strtolower(end(explode('.',$_FILES['filename']['name'])));


$expensions= array("jpeg","jpg","png");         
if(in_array($file_ext,$expensions)=== false){
    $errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
 $errors[]='File size must be excately 2 MB';
}          

// pag walang error...     
if (empty($errors)==true) {

    // upload the file...
    move_uploaded_file($file_tmp,"uploads/".$file_name);

    $servername = "localhost";
    $username = "root";
    $password = " ";
    $dbname = "admin";

    // create new record in the database
   include ("dbinfo.php");

    mysql_query("INSERT INTO payment_form (date, Tracking, mode, ContactNo, totalsent, datesent, filename) VALUES (NOW(), '$transactionNo', '$rad', '$contactNo', '$totalSent', '$dateSent', '$file_name')") ;

   header('Location: paymentform_success.php');
}else{
    print_r($errors);
}
}

?>

启用/禁用Javascript

<script type="text/javascript">
function enableField(obj){
var form=obj.form;
var txtNames=['contactno','filename'], f;
var rads=document.getElementsByName(obj.name), r, i=0;
while(r=rads[i++]){
f=form[txtNames[i-1]];
if(r.checked){
    f.removeAttribute('disabled');
    f.focus();
}
else{
    f.value='';
    f.setAttribute('disabled','disabled')
}
}
}
</script>

【问题讨论】:

  • 很高兴看到这里的安全实践!

标签: php mysql forms file-upload


【解决方案1】:

您应该首先检查检查了哪个收音机,然后决定要做什么。它不起作用,因为整个脚本都在if(isset($_FILES['filename'])) 下。如果文件上传被禁用,那么$_FILES 将不会被设置并且不会执行任何操作。

【讨论】:

  • 我没有时间完整地写它,但我会做这样的事情:pastebin.com/9jWxpHj6
  • @MarkTu 在你做任何其他事情之前,你可能想了解 sql-injections 以及为什么你的代码易受攻击。
  • @Phate01 嗨,我正在测试它。你能给我举个例子来说明 if else 中的 //Actions 部分吗?对不起,我有点新。
  • 我现在正在阅读查询,我看到它包含文件名和联系人编号。但是,如果您肯定只获得其中之一,那怎么可能呢?
  • @Phate01 是的,那是 question.hmm 中的初始查询。因为我有一个包含这些字段的表。如果输入了联系人编号,则文件上传应在数据库中至少插入空字符串,反之亦然。你知道怎么做吗……我有点迷路了。或者javascript,如果它更容易的话。无论如何,我的主要问题是问题中所述。 T__T
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2011-06-24
  • 2019-03-04
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多