图像引用不会在提交时插入数据库

时间:2014-11-25 21:30:29

标签: php mysql image-uploading

我正在尝试在提交时以相同的形式上传图片和文字。图像文件进入上传文件夹,但图像参考和文本应该进入我的数据库。

当我按提交时。文本转到数据库,图像上传到上传文件夹,但没有插入带有文本的数据库。

我认为我的MYSQL有错误,但我找不到小提示!

这是我的php:

          <?php

                if(isset($_POST['submitted']) == 1) {

                $ds = DIRECTORY_SEPARATOR;  //1

                $storeFolder = 'uploads';   //2


                $text = mysqli_real_escape_string($dbc, $_POST['text']);
                $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
                $newname = time();
                $random = rand(100,999);
                $name = $newname.$rand.'.'.$ext;                

                if(isset($_POST['id']) != ''){
                    $action = 'updated';
                    $q = "UPDATE votes SET text = '$text', image = '$name'";                                
                } else{
                    $action = 'added';
                    $q = "INSERT INTO votes (text, image) VALUES ('$_POST[text]',  '$_POST[name]')";

                }

                $r = mysqli_query($dbc, $q);


                    if (!empty($_FILES)) {

                        $tempFile = $_FILES['file']['tmp_name'];          //3             

                        $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  //4

                        $targetFile =  $targetPath. $name;  //5

                        move_uploaded_file($tempFile,$targetFile); //6

                }

                if($r) {

                    $message = '<p class="alert alert-succes">Page was '.$action.'!</p>';
                } else {

                    $message = '<p class="alert alert-danger">Page could not be '.$action.' because: '.mysqli_error($dbc);
                    $message .= '<p class="alert alert-warning">Query: '.$q.'</p>';

                }

            }



        ?>

1 个答案:

答案 0 :(得分:1)

$_FILES['image']在您的代码中的任何位置都不存在,并且可能不是上传文件,因为您正在使用$_FILES['file'],它也是数组格式。您显然需要使用先前在代码中生成的$name变量。

您之前使用此行清理了$_POST['text']

$text = mysqli_real_escape_string($dbc, $_POST['text']);

但未将其用于INSERT声明。

更改此行:

$q = "INSERT INTO votes (text, image) VALUES ('$_POST[text]',  '$_FILES[image]')";

为:

$q = "INSERT INTO votes (text, image) VALUES ('$text',  '$name')";

这也是错误的:

      $random = rand(100,999);
      $name = $newname.$rand.'.'.$ext; 

更改为:

$rand = rand(100,999);
$name = $newname.$rand.'.'.$ext;

您需要非常小心如何命名变量并使用它们。不要忘记他们所命名的内容,即使只是一个从原始定义中得出的拼写错误或大写字母也行不通。 PHP无法猜测&#34;猜测&#34 34;你想做什么 - 你必须非常精确!