如何将带有文本字段的图像插入数据库的自定义表中?

时间:2018-12-25 15:05:38

标签: wordpress custom-wordpress-pages

如何在数据库中使用文本字段自定义表插入图像?

<form method = "post" action = "#">
     <label for="name">Name</label>
     <input type="text" name="name"/><br>
     <label for="description">Description</label>
     <input type="text" name="description"/><br>
     <label for="phone">phone</label><br>
     <input type="text" name="phone"/><br>
     <label for="name">Image</label>
     <input type="file" name="image"><br>
  <input type="submit" value="Submit" name="sub_submit"/>
</form>

<?php

function insert_query() {

  $name         = $_POST['name'];
  $description  = $_POST['description'];
  $phone  = $_POST['phone'];

  $img = $_FILE['image']['name'];
  $img2 =time().$img;
  $folder = "echo bloginfo('template_url')/pic/".$img2;
  $tmp = $_FILE['image']['tmp_name'];
  move_uploaded_file($tmp, $folder);

  global $wpdb;
  $table_name = "wp_insert";
  $sss = $wpdb->insert($table_name, array('name' => $name, 'description' => $description, 'phone' => $phone, 'image' => $img2 ),array( '%s', '%s', '%d', '%s'));

    if($sss)
    {
        echo "Done";
    }
    else 
    { 
    echo " Not Done";
    }
  }

if( isset($_POST['sub_submit']) ) insert_query();

========= OutPut =========== enter image description here

1 个答案:

答案 0 :(得分:1)

您的代码中有一些错误,不允许您将图片上传到主题文件夹中。

  

不建议将下面提供的表单处理和文件上传用于WordPress。

您可以使用WordPress Codex的一些技巧,例如wp_handle_upload()等。此外,还可以查看this answer

  1. 您的代码的HTML部分应为:

    <form method = "post" enctype="multipart/form-data">
        <label for="name">Name</label>
        <input type="text" name="name"/><br>
        <label for="description">Description</label>
        <input type="text" name="description"/><br>
        <label for="phone">phone</label><br>
        <input type="text" name="phone"/><br>
        <label for="name">Image</label>
        <input type="file" name="image"><br>
        <input type="submit" value="Submit" name="sub_submit"/>
    </form>
    

    我们删除了action属性,因为不知道应该由哪个文件处理。另外,添加了enctype="multipart/form-data"属性=>值,用于处理文件上传。

  2. PHP部分应类似于:

    function insert_query() {
        $name         = $_POST['name'];
        $description  = $_POST['description'];
        $phone  = $_POST['phone'];
        $img = $_FILES['image']['name'];
        $img2 =time().$img;
        $folder = get_template_directory()."/pic/".$img2;
        $tmp = $_FILES['image']['tmp_name'];
        move_uploaded_file($tmp, $folder);
        global $wpdb;
        $table_name = "wp_insert";
        $sss = $wpdb->insert($table_name, array('name' => $name, 'description' => $description, 'phone' => $phone, 'image' => $img2 ),array( '%s', '%s', '%d', '%s'));
    
        if($sss)
        {
            echo "Done";
        }
        else
        {
            echo " Not Done";
        }
    }
    
    if( isset($_POST['sub_submit']) ) insert_query();
    
    • PHP超全局变量是$_FILES
    • bloginfo()打印值,但是我们需要获取它(不打印)。因此,我们可以改用get_bloginfo()或其他相关功能。我使用了get_template_directory()函数。
    • 应该创建名为“ pic”的文件夹,因为move_uploaded_file()不会创建文件夹(如果不存在)
    • $img2 =time().$img;这部分的旁注:将图像名称命名为1545769627_name.jpg会更好。您的代码将创建图像名称,例如1545769627name.jpg

另外,请注意。您的代码中有很多安全漏洞。我不建议您将其用于localhost之外的任何其他项目。

其他部分应该可以正常工作。