如何使用php同时提交文本和图像?

如何使用php同时提交文本和图像?,php,mysql,Php,Mysql,我目前正在尝试使用php将图像上传到mysql数据库。图像应与用户插入到同一行。因此,在我不太好的尝试中,我创建了一个文本框和一个上载表单,因此当用户在文本框中输入他的名字并上载一个图像时,它们将同时被保存。这里的问题是,我不太确定我尝试的方法是否正确。嗯,一开始我对php不是很在行。任何帮助都可以 这是我的表格: <?php require('admin.config.inc.php'); if(isset($_POST['upload'])){ $image_name =

我目前正在尝试使用php将图像上传到mysql数据库。图像应与用户插入到同一行。因此,在我不太好的尝试中,我创建了一个文本框和一个上载表单,因此当用户在文本框中输入他的名字并上载一个图像时,它们将同时被保存。这里的问题是,我不太确定我尝试的方法是否正确。嗯,一开始我对php不是很在行。任何帮助都可以

这是我的表格:

<?php

require('admin.config.inc.php');

if(isset($_POST['upload'])){
    $image_name = $_FILES['image']['name'];
    $image_type = $_FILES['image']['type'];
    $image_size = $_FILES['image']['size'];
    $image_tmp_name = $_FILES['image']['tmp_name'];

    $path = "/home/********/public_html/StagConnect/admin/pictures/$image_name";

    if($image_name==''){
    echo "Don't just click! select an image please .";
    exit();
    }
    else{
    move_uploaded_file($image_tmp_name, $path);
    $mysql_path = $path."/".$image_name;
    $query = "INSERT INTO `admin`(`admin_image1`,`path1`) VALUES ('$image_name','$mysql_path') where username = :user";

    $query_params = array(
    ':user' => $_POST['username'],
        ':image_name' => $image_name,
        ':mysql_path' => $path,
        );

    //execute query
    try {
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't Upload Image!";
        die(json_encode($response));
    }

    $response["success"] = 1;
    $response["message"] = "Image Uploaded Succesfully!";
    echo json_encode($response);
   }
    }   
    ?>

<form action="adminProfilePic.php" method="post" enctype="multipart/form-data">
Username: <input type="text" name="username">
<input type="file" name="image" >

<input type="submit" name="upload" value="Submit" >
</form>

您试图绑定
:image\u name
:mysql\u path
,但您直接将其插入查询中。将
$image\u name
更改为
:image\u name
并将
$mysql\u path
更改为
:mysql\u path

$query = "INSERT INTO `admin`(`admin_image1`,`path1`) VALUES (:image_name',:mysql_path) where username = :user";

    $query_params = array(
        ':user' => $_POST['username'],
        ':image_name' => $image_name,
        ':mysql_path' => $path,
    );

N.B.:有三种不同的类型。其中两个是不同类型的
插入
,一个是
更新

我使用了
user
作为列名,因此您可以保留它,也可以调整它

我成功地测试了这个,并阅读了整个代码以获取更多注释

假设
admin.config.inc.php
中的DB变量设置为
$DB
-如果不是,则需要修改变量以适应/匹配

作为常规的
插入
使用以下内容(以下是
更新
版本)


作为
插入
也要插入输入的用户名,请使用以下命令,输入3个值。
嗯,我想我已经尝试在那里放置一个名为username的文本框。我做了一个快速而成功的测试,但我在问
哪里username=:user
你为什么要使用这个?嗨@Marcel,谢谢你告诉我!我试过你的建议,但也犯了同样的错误。当我执行查询时,错误似乎发生了。上面写着“数据库错误,无法上传图像”。不管怎样,我的表格看起来对吗?我有点怀疑。但是你有一个数据库连接?看起来你使用的是路径方法,这是一个绝对路径。尝试相对路径。即:代替
$path=“/home/********/public_html/StagConnect/admin/pictures/$image_name”使用
$path=“StagConnect/admin/pictures/$image\u name”如果从根目录运行脚本。如果不是从根目录,那么您可能需要使用
。/../StagConnect…..
@IamMe@Fred ii-,进行调整。我正在从域运行脚本,我认为这不是问题的原因,因为从我的其他表单来看,路径工作正常。如果您正在运行代码,并且没有通过
数据库错误。无法上载图像
,那么错误/问题就在那里@我是。
<?php
require('admin.config.inc.php');

if(isset($_POST['upload'])){
    $image_name = $_FILES['image']['name'];
    $image_type = $_FILES['image']['type'];
    $image_size = $_FILES['image']['size'];
    $image_tmp_name = $_FILES['image']['tmp_name'];

    $path = "/home/********/public_html/StagConnect/admin/pictures/$image_name";

    if($image_name==''){
    echo "Don't just click! select an image please .";
    exit();
    }
    else{
    move_uploaded_file($image_tmp_name, $path);
    $mysql_path = $path."/".$image_name;

// I am unsure of this line and how you are using it, so the UPDATE version follows.
// Test with the line below that for now
//  $stmt = $db->prepare("INSERT INTO `admin_test_so` (`admin_image1`,`path1`) VALUES (:image_name,:mysql_path) where username = :user");

    $stmt = $db->prepare("INSERT INTO `admin_test_so` (`admin_image1`,`path1`) VALUES (:image_name,:mysql_path)");

    try {

 $stmt->execute(array(
  ':image_name' => $image_name,
  ':mysql_path' => $path

    ));

}
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't Upload Image!";
        die(json_encode($response));
    }

    $response["success"] = 1;
    $response["message"] = "Image Uploaded Succesfully!";
    echo json_encode($response);

/* my own tests to show what is set or not */
/*
echo "<hr>";
var_dump($image_name);
echo "<br>";
var_dump($path);
echo "<br>";
var_dump($_POST['username']);
*/

   }
    }   
?>
<?php
require('admin.config.inc.php');

$username=$_POST['username'];

if(isset($_POST['upload'])){
    $image_name = $_FILES['image']['name'];
    $image_type = $_FILES['image']['type'];
    $image_size = $_FILES['image']['size'];
    $image_tmp_name = $_FILES['image']['tmp_name'];

    $path = "/home/********/public_html/StagConnect/admin/pictures/$image_name";

    if($image_name==''){
    echo "Don't just click! select an image please .";
    exit();
    }
    else{
    move_uploaded_file($image_tmp_name, $path);
    $mysql_path = $path."/".$image_name;

$stmt = $db->prepare("UPDATE `admin_test_so` set admin_image1=:image_name, path1=:image_name where user = :user");

// update test_table set value=:value, value0=:value0 where value=:value

    try {

 $stmt->execute(array(
  ':user' => $username,
  ':image_name' => $image_name,
  ':mysql_path' => $path

    ));

}
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't Upload Image!";
        die(json_encode($response));
    }

    $response["success"] = 1;
    $response["message"] = "Image Uploaded Succesfully!";
    echo json_encode($response);

/*
echo "<hr>";
var_dump($image_name);
echo "<br>";
var_dump($path);
echo "<br>";
var_dump($_POST['username']);
*/

   }
    }   
?>
<?php
require('admin.config.inc.php');

$username=$_POST['username'];

if(isset($_POST['upload'])){
    $image_name = $_FILES['image']['name'];
    $image_type = $_FILES['image']['type'];
    $image_size = $_FILES['image']['size'];
    $image_tmp_name = $_FILES['image']['tmp_name'];

    $path = "/home/********/public_html/StagConnect/admin/pictures/$image_name";

    if($image_name==''){
    echo "Don't just click! select an image please .";
    exit();
    }
    else{
    move_uploaded_file($image_tmp_name, $path);
    $mysql_path = $path."/".$image_name;

$stmt = $db->prepare("INSERT INTO `admin_test_so` (`user`,`admin_image1`,`path1`) VALUES (:user,:image_name,:mysql_path)");

    try {

 $stmt->execute(array(
  ':user' => $username,
  ':image_name' => $image_name,
  ':mysql_path' => $path

    ));


}
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't Upload Image!";
        die(json_encode($response));
    }

    $response["success"] = 1;
    $response["message"] = "Image Uploaded Succesfully!";
    echo json_encode($response);

/*
echo "<hr>";
var_dump($image_name);
echo "<br>";
var_dump($path);
echo "<br>";
var_dump($_POST['username']);
*/

   }
    }   
?>
<form action="adminProfilePic.php" method="post" enctype="multipart/form-data">
Username: <input type="text" name="username">
<input type="file" name="image" >
<input type="submit" name="upload" value="Submit" >
</form>