【问题标题】:PHP file upload into mysqlPHP文件上传到mysql
【发布时间】:2015-01-05 15:36:20
【问题描述】:

我创建了一个如下表格。我正在做的是

  1. 用户正在从下拉列表中选择客户端并上传文件。当他点击添加按钮时,页面将重定向到 Confirm.php。

  2. Confirm.php 将显示用户输入的任何内容,即客户端名称和他上传的文件的名称。

  3. 在 Confirm.php 中,用户正在提交表单,它应该添加到数据库中,除了文件上传之外,其余字段都将添加到数据库中。在数据库中,文件上传字段显示为空。请有人解决这个问题。 而且我不知道如何从 Confirm.php 访问路径变量到 Add.php。

我是 php 新手。因此,我们将不胜感激。

谢谢。

Home.php

<form action="Confirm.php" method="post" enctype="multipart/form-data" novalidate>
    <label> <span>Client</span>
      <select class="required" name="client">
             <?php
mysql_connect ("localhost","root","");
                    mysql_select_db ("eservice");
                    $select="eservice";
                    if (isset ($select)&&$select!="")
                    {
    $select=$_POST ['NEW'];
                    }
            ?>
          <?php
    $list=mysql_query("select * from client");
                    while($row_list=mysql_fetch_assoc($list))
                                            {
           ?>
          <?php $ct = $row_list['cname'];?>
          <option value="<?php echo $ct; ?>"<?php if($ct==$select){ echo "selected"; } ?> > <?php echo $ct; ?></option>
          <?php } ?>
      </select>
    </label>

    <label> <span>SRN</span>
<?php
$con=mysqli_connect("localhost","root","","eservice");
// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$sql="Select * from main";
if ($result=mysqli_query($con,$sql))
  {
  // Return the number of rows in result set
  $rowcount=mysqli_num_rows($result);
  $rowcount++;
  // Free result set
  mysqli_free_result($result);
  }
mysqli_close($con);
?>
<input name="srn" type="text" id="srn" size="15" readonly="readonly" maxlength="40" value="<?php echo "$rowcount"; ?>"/>
</label>
    </div>
        <label>
            <span>File upload</span>
            <input type="file" name ="filename" required>
        </label>
    <button id='send' type='submit'>Add</button>
<button id='clear' type='reset'>Reset</button>
</form>

这是我的确认页面

确认.php

  <form action="Add.php" method="post" enctype="multipart/form-data" novalidate>
<label> <span>Client</span>
    <?php include_once('dbconn.php'); ?>
     <input name="client" type="text" id="client" size="15" readonly="readonly" maxlength="40" value="<?php echo $_POST['client']; ?>"/>
   </label>

        <label>
            <span>File upload</span>
    <?php  $path = '';
$folder = "Folder/";
if (is_uploaded_file($_FILES['filename']['tmp_name']))  
{   
    if (move_uploaded_file($_FILES['filename']['tmp_name'], $folder.$_FILES['filename']['name'])) 
    {
    $path = $folder . $_FILES['filename']['name'];
    } 
    else 
    {
     $path = '';
    };
} 
else 
{
      $path = '';
}; ?>
        <input name ="filename" readonly="readonly" value="<?php echo $_FILES['filename']['name']; ?>"/>
        </label>
    <button id='clear' type='reset'>Back</button>
<button id='send' type='submit'>Add</button>
</form>

dbconn.php

<?php
$username = "root";
$password = "";
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL");
$selected = mysql_select_db("eservice",$dbhandle) 
  or die("Could not select newsite database");
?>

这里我将上传的文件添加到phpmyadmin中。

添加.php

<?php
include_once('dbconn.php');
session_start();
$_SESSION['example']='Session Created';

 $client = $_POST['client']; // required

 if($client !='')
 {
$insQry = "Insert into `main` (client,upload) Values ('$client','$path')";
    $insertQ = mysql_query($insQry);
    if($insertQ!=''){
        echo "<h2>Data inserted successfully...</h2>";
    } else {
        echo "<h2>Not added</h2>";
    }
}
?>

【问题讨论】:

  • 您是否尝试在 confirm.php 中包含 add.php 来代替 dbconn.php
  • 我试过了,还是一样的错误
  • 禁用的字段不会发布到您的服务器。所以你必须使用readonly 而不是disabled
  • 是的,我将其设置为只读。现在数据正在插入到数据库中,文件上传字段除外。我签入了数据库,文件上传字段为空。谢谢。
  • 我仍然收到此错误 注意:未定义索引:if (is_uploaded_file($_FILES['filename']['tmp_name'])) 中的文件名

标签: php mysql file-upload


【解决方案1】:

未定义索引表示该索引是否未设置或为空...您必须检查它是否为空。

在文件名错误中添加条件

if ( $_FILES['filename']['error'] == 0 ){
///your uploading code
}

对于后验证检查是否设置,使用三元运算符:-

$client =isset( $_POST['client'])?$_POST['client']:'';

【讨论】:

    【解决方案2】:

    您的confirm.php 代码应该是

    <form action="Add.php" method="post" enctype="multipart/form-data" novalidate>
    <label> <span>Client</span>
        <?php include_once('dbconn.php'); ?>
         <input name="client" type="text" id="client" size="15" readonly="readonly" maxlength="40" value="<?php echo $_POST['client']; ?>"/>
       </label>
    
            <label>
                <span>File upload</span>
        <?php  $path = '';
    $folder = "Folder/";
    if (is_uploaded_file($_FILES['filename']['tmp_name']))  
    {   
        if (move_uploaded_file($_FILES['filename']['tmp_name'], $folder.$_FILES['filename']['name'])) 
        {
        $path = $folder . $_FILES['filename']['name'];
        } 
        else 
        {
         $path = '';
        };
    } 
    else 
    {
          $path = '';
    }; ?>
            <input name ="filename" readonly="readonly" value="<?php echo $_FILES['filename']['name']; ?>"/>
    <input name ="path" type="hidden" value="<?php echo $path; ?>"/>
            </label>
        <button id='clear' type='reset'>Back</button>
    <button id='send' type='submit'>Add</button>
    </form>
    

    您可以使用$path = $_POST['path'] 获取add.php 上的隐藏字段值

    【讨论】:

    • 我试过了,除了文件上传其余字段正在添加到数据库中。我收到此错误通知:未定义索引:$path = $_POST['path']; 中的路径
    • 您是否在您的 confirm.php 文件中添加了隐藏字段??
    • 您好,现在我正在对文件上传进行文件扩展名验证,需要您的帮助。 $allowed = array('gif','png','jpg','pdf'); $filename = $_FILES['filename']['tmp_name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!in_array($ext,$allowed) ) { echo '请上传正确的文件';我将此添加到我的 Confirm.php 中。但我希望上传时应在 Home.php 中检查文件扩展名。我正在尝试添加到 Home.php 中,但它没有出现。它显示未定义的索引文件名错误。那么我该如何实现呢?
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2015-04-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多