0

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());
?>
4

2 に答える 2

0

PHPの二重引用符で囲まれた文字列では、引用符で囲まれた配列キーを使用できません。警告をスローします。さらに、二重引用符で囲まれた文字列内にあるため、多次元配列を使用することはできません。PHPのパーサーは「貪欲」ではなく、単一レベルの配列のみを表示します。

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

引用符で囲まれたキーに関する警告が発行され、出力は実際には次のようになります。

Array['baz']

配列の第2レベルはPHPでは認識されないためです。

{}表記を使用する必要があります。

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

これにより、引用符で囲まれた配列キーが許可され、PHPは、最初のレベルだけでなく、配列参照全体を考慮するようになります。

それを超えて、あなたのコードはSQLインジェクション攻撃に対して広く開かれているので、このコードを公開Webサイトに配置する前に、それらを回避する方法を読んで学ぶ必要があります。

于 2012-08-02T04:44:55.970 に答える
0

mysql_real_escape_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',...)"
于 2012-08-02T04:46:56.527 に答える