用php将表单和图像上传到mysql时出现奇怪错误


uploading form and image with php to mysql odd error

我正在尝试使用PHP将带有图像的表单上传到MySQL。然而,我保持,得到这个错误-

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/content/03/6455003/html/leakfaucet/submitAlbumForm.php on line 17

我已经盯着这个看了很长一段时间了,只是不知道问题是什么,如果有任何帮助,我们将不胜感激!

表单-

<?php include "base.php"; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Submit an Album</title>
</head>
<body>
<table>
  <tr>
    <td align="center">Submit an Album</td>
  </tr>
  <tr>
    <td>
      <table>
        <form enctype="multipart/form-data" action="submitAlbumForm.php" method="post">
        <tr>
          <td>Artist Name</td>
          <td><input type="text" name="artistName" size="20">
          </td>
        </tr>
        <tr>
          <td>Album Name</td>
          <td><input type="text" name="albumName" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Release Date</td>
          <td><input type="text" name="releaseDate" size="20">
          </td>
        </tr>
        <tr>        
        <tr>
          <td>Leak Date</td>
          <td><input type="text" name="leakDate" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Where It Leaked</td>
          <td><input type="text" name="whereItLeaked" size="20">
          </td>
        </tr>
        <tr>
        <tr>
          <td>Album Cover</td>
          <td><input type="file" name="albumCover">
          </td>
        </tr>
        <tr>        
          <td></td>
          <td align="right"><input type="submit" name="submit" value="Add"></td>
        </tr>
        </table>
      </td>
    </tr>
</table>
</body>
</html>

上传脚本

<?php
include "base.php";
//Setting up images directory
 $target = "images/"; 
 $target = $target . basename( $_FILES['photo']['name']);
 $albumCover=($_FILES['photo']['name']); 
//inserting data order
$order = "INSERT INTO albums
            (artistName, albumName, releaseDate, leakDate, whereItLeaked, albumCover)
            VALUES
            ('$_POST[artistName]',
            '$_POST[albumName]',
            '$_POST[releaseDate]',
            '$_POST[leakDate]',
            '$_POST[whereItLeaked]',
            '($_FILES['albumCover']['name'])')";  /*this is the line where the error keeps occurring. I've tried a number of variations and still can't seem to get it right*/
  if(move_uploaded_file($_FILES['albumCover']['tmp_name'], $target)) 
 { 
 //Tells you if its all ok 
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 
 //Gives an error if its not 
 echo "Sorry, there was a problem uploading your file."; 
 } 
//declare in the order variable
$result = mysql_query($order);  //order executes
if($result){
    echo("<br>Thank you for submitting!");
} else{
    echo("<br>Sorry, something went wrong! Please try again!");
}
?>

我的base.php文件与连接信息

<?php
session_start();
$dbhost = "";
$dbname = "";
$dbuser = "";
$dbpass = "";
mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());
?>

在PHP双引号字符串中不能使用带引号的数组键。它发出警告。此外,您不能使用多维数组,因为您在双引号字符串中。PHP的解析器不是"贪婪的",只会看到单个级别的数组,例如

$foo = array();
$foo['bar'] = array();
$foo['bar']['baz'] = 'fizzbuzz';
echo "$foo['bar']['baz']";

会发出一个关于引用密钥的警告,输出实际上是:

Array['baz']

因为PHP看不到数组的第二级。

您需要使用{}表示法:

'({$_FILES['albumCover']['name']})')";
  ^---                          ^---

它既允许引用数组键,又迫使PHP考虑ENTIRE数组引用,而不仅仅是第一级。

除此之外,您的代码对SQL注入攻击非常开放,在将这些代码放到面向公众的网站上之前,您应该阅读并学习如何避免这些攻击,否则请享受服务器pwn3d。

试试这个使用mysql_real_eescape_string 将值获取到变量中

 $artist_name =mysql_real_escape_string( $_POST['artistName']);
 $albumname=  mysql_real_escape_string($_POST['albumName'] );
 $releaseDate=  mysql_real_escape_string($_POST['releaseDate']);
...
"INSERT INTO albums
        (artistName, albumName, releaseDate, leakDate, whereItLeaked, albumCover)
        VALUES ( '$artist_name', '$albumname',...)"