表单数据未插入MySQL数据库

时间:2014-05-23 17:57:15

标签: php mysql

基本上我有一个表单,当提交它将数据发送到MySQL表时,表单输入的内容是文件上传,所以我必须检查它是否真的是图像。
所以,如果我在这里使用此代码将其发送到数据库:

$sql="INSERT INTO anuncio (anuncio_imagen, anuncio_titulo, anuncio_descripcion, anuncio_categoria, anuncio_precio, anuncio_nombre, anuncio_telefono, anuncio_email, anuncio_facebook)
VALUES ('$imagen', '$titulo', '$descripcion', '$categoria', '$precio', '$nombre', '$telefono', '$email', '$facebook')";  

它完美无缺,但是我想查看上传的文件是否是图像,所以我将上面的代码分成两个插入,并放置在图像检查代码内的图像插入,并保留其余的输入字段。

这是:

$imagen = ($_FILES['photo']['name']); 
$titulo = mysqli_real_escape_string($con, $_POST['titulo']);
$descripcion = mysqli_real_escape_string($con, $_POST['descripcion']);
$categoria = mysqli_real_escape_string($con, $_POST['categoria']);
$precio = mysqli_real_escape_string($con, $_POST['precio']);
$nombre = mysqli_real_escape_string($con, $_POST['nombre']);
$telefono = mysqli_real_escape_string($con, $_POST['telefono']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$facebook = mysqli_real_escape_string($con, $_POST['facebook']);

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["photo"]["name"]);
$extension = end($temp);

if ((($_FILES["photo"]["type"] == "image/gif")
|| ($_FILES["photo"]["type"] == "image/jpeg")
|| ($_FILES["photo"]["type"] == "image/jpg")
|| ($_FILES["photo"]["type"] == "image/pjpeg")
|| ($_FILES["photo"]["type"] == "image/x-png")
|| ($_FILES["photo"]["type"] == "image/png"))
&& ($_FILES["photo"]["size"] < 10000000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["photo"]["error"] > 0) {
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
  } else {

    if (file_exists("images/gallery/" . $_FILES["photo"]["name"])) {
      echo $_FILES["photo"]["name"] . " Ya existe en el servidor. ";
    } else {
      move_uploaded_file($_FILES["photo"]["tmp_name"],
      "images/gallery/" . $_FILES["photo"]["name"]);
      $sql="INSERT INTO anuncio (anuncio_imagen)
      VALUES ('$imagen')";

    }
  }
} else {
  echo "Archivo invalido ";
}

$sql="INSERT INTO anuncio (anuncio_titulo, anuncio_descripcion, anuncio_categoria, anuncio_precio, anuncio_nombre, anuncio_telefono, anuncio_email, anuncio_facebook)
VALUES ('$titulo', '$descripcion', '$categoria', '$precio', '$nombre', '$telefono', '$email', '$facebook')";  

但是当我这样做时它不起作用,图像数据没有上传到我的数据库,其余数据上传但不上传图像数据。我做错了什么?

3 个答案:

答案 0 :(得分:0)

用UPDATE语句替换第二个INSERT语句。第一个INSERT在表中创建行,其中包含您在那里提供的所有列值。在第二个语句中,您希望使用新值更新已创建的行。

答案 1 :(得分:0)

仅使用一个INSERT并使用mysqli_query。检查move_uploaded_file返回是否为真。尝试:

<?php
$imagen = ($_FILES['photo']['name']); 
$titulo = mysqli_real_escape_string($con, $_POST['titulo']);
$descripcion = mysqli_real_escape_string($con, $_POST['descripcion']);
$categoria = mysqli_real_escape_string($con, $_POST['categoria']);
$precio = mysqli_real_escape_string($con, $_POST['precio']);
$nombre = mysqli_real_escape_string($con, $_POST['nombre']);
$telefono = mysqli_real_escape_string($con, $_POST['telefono']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$facebook = mysqli_real_escape_string($con, $_POST['facebook']);

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["photo"]["name"]);
$extension = end($temp);

$bol_image = false;
if ((($_FILES["photo"]["type"] == "image/gif")
|| ($_FILES["photo"]["type"] == "image/jpeg")
|| ($_FILES["photo"]["type"] == "image/jpg")
|| ($_FILES["photo"]["type"] == "image/pjpeg")
|| ($_FILES["photo"]["type"] == "image/x-png")
|| ($_FILES["photo"]["type"] == "image/png"))
&& ($_FILES["photo"]["size"] < 10000000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["photo"]["error"] > 0) {
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
  } else {

    if (file_exists("images/gallery/" . $_FILES["photo"]["name"])) {
      echo $_FILES["photo"]["name"] . " Ya existe en el servidor. ";
    } else {
      if (move_uploaded_file($_FILES["photo"]["tmp_name"],
      "images/gallery/" . $_FILES["photo"]["name"])){
          $bol_image = true;
      } else{
        echo "Problem in upload the image";
      }

    }
  }
} else {
  echo "Archivo invalido ";
}

if($bol_image){
    $sql="INSERT INTO anuncio (anuncio_titulo, anuncio_descripcion, anuncio_categoria, anuncio_precio, anuncio_nombre, anuncio_telefono, anuncio_email, anuncio_facebook, anuncio_imagen)
    VALUES ('$titulo', '$descripcion', '$categoria', '$precio', '$nombre', '$telefono', '$email', '$facebook', '$imagen')";
} else{
    $sql="INSERT INTO anuncio (anuncio_titulo, anuncio_descripcion, anuncio_categoria, anuncio_precio, anuncio_nombre, anuncio_telefono, anuncio_email, anuncio_facebook)
    VALUES ('$titulo', '$descripcion', '$categoria', '$precio', '$nombre', '$telefono', '$email', '$facebook')";    
}
mysqli_query($con, $sql);

?>

答案 2 :(得分:0)

INSERT INTO仅在记录(行)尚不存在时才有效。如果您想分两步完成,您可以在第二个语句中使用UPDATE。例如:

您的代码:

move_uploaded_file($_FILES["photo"]["tmp_name"],
"images/gallery/" . $_FILES["photo"]["name"]);
$sql="INSERT INTO anuncio (anuncio_imagen)
VALUES ('$imagen')";

相反:

move_uploaded_file($_FILES["photo"]["tmp_name"],
"images/gallery/" . $_FILES["photo"]["name"]);
$sql="UPDATE anuncio
SET anuncio_imagen = ('$imagen')
WHERE anuncio_titulo = ('$titulo')";