2012-03-17 6 views
2

$updateNames 변수에 4 개의 다른 값을 할당하는 방법을 알아 내려고 했으므로 한 번에 하나의 파일을 다시 업로드 할 수있었습니다. 지금 업로드 한 파일은 name1입니다. 당신이 $ 값 배열을 채우는 동안이상한 여분의 등호 (mysql 쿼리). 어떻게 제거합니까?

<?php 

require_once('storescripts/connect.php'); 
mysql_select_db($database_phpimage,$phpimage); 
error_reporting(E_ALL); 
$uploadDir = 'upload/'; 
if(isset($_POST['upload'])) 
{ 


foreach ($_FILES as $file) 
{ 

    $fileName = $file['name']; 
    $tmpName = $file['tmp_name']; 
    $fileSize = $file['size']; 
    $fileType = $file['type']; 

    if ($fileName != ""){ 
     $filePath = $uploadDir; 
     $fileName = str_replace(" ", "_", $fileName); 

     //Split the name into the base name and extension 
     $pathInfo = pathinfo($fileName); 
     $fileName_base = $pathInfo['fileName']; 
     $fileName_ext = $pathInfo['extension']; 

     //now we re-assemble the file name, sticking the output of uniqid into it 
     //and keep doing this in a loop until we generate a name that 
     //does not already exist (most likely we will get that first try) 
     do { 
      $fileName = $fileName_base . uniqid() . '.' . $fileName_ext; 
     } while (file_exists($filePath.$fileName)); 

     $file_names [] = $fileName; 

     $result = move_uploaded_file($tmpName, $filePath.$fileName); 
    } 


if(!get_magic_quotes_gpc()) 
{ 
$fileName = addslashes($fileName); 
$filePath = addslashes($filePath); 
} 
$fileinsert[] = $filePath; 
} 
} 

$mid = mysql_real_escape_string(trim($_POST['mid'])); 
$cat = mysql_real_escape_string(trim($_POST['cat'])); 
$item = mysql_real_escape_string(trim($_POST['item'])); 
$price = mysql_real_escape_string(trim($_POST['price'])); 
$about = mysql_real_escape_string(trim($_POST['about'])); 

for($i = 0; $i < 4; $i++) 
{ 
    $values[$i] = isset($file_names[$i]) ? mysql_real_escape_string($file_names[$i]) : ''; 

    if($values[$i] != '') 
    { 
     $updateVals[] = "name".($i+1)." = '{$values[$i]}'"; 
    } 

} 
$updateNames = ''; 
if(count($updateVals)) 
{ 
    $updateNames = ", " . implode(', ', $updateVals); 
} 

$update = "INSERT INTO image 
       (mid, cid, item, price, about, name1, name2, name3, name4) 
      VALUES 
       ('$mid', '$cat', '$item', '$price', '$about', '$values[0]', '$values[1]', '$values[2]', '$values[3]') 
      ON DUPLICATE KEY UPDATE 
       cid = '$cat', item = '$item', price = '$price', about = '$about' $updateNames"; 
$result = mysql_query($update) or die (mysql_error()); 

답변

1

귀하의 $ 필드 배열이 비어 : 여기

는 PHP입니다. 따라서 참조가 빈 문자열을 반환하므로 불완전한 대입 표현식이 발생합니다.

+0

가 어떻게 난 내 $ 필드 배열에 적절한 값을 할당 제안으로 시작? – userX

+0

루프를 반복 할 때마다 $ fields [$ i] = "name". ($ i + 1); –

+0

정확히 어디에 추가됩니까? – userX

1

아주 기본적인 오류가 있습니다.

INSERT INTO image (mid, cid, item, price, about, name1, name2, name3, name4) VALUES ('167', 'hats', 'zzz', 'zz', 'zz', '4f64105aad275.jpg', '', '', '') ON DUPLICATE KEY UPDATE cid = 'hats', item = 'zzz', price = 'zz', about = 'zz' , = '4f64105aad275.jpg'; 

위 문장의 마지막 부분은 , = '4f64105aad275.jpg'입니다. , name1 = '4f64105aad275.jpg';

+0

이름은 무엇입니까 234? – userX

+0

데이터베이스를 업데이트 중이므로 어떤 값을 저장할 필드를 알아야합니다. SQL 문에서 오류를 언급했습니다. 또한 삽입 절 'VALUES ('167 ','hats ','zzz ','zz ','zz ','4f64105aad275.jpg ',' ',' ',' ') 234 자신을 비 춥니 다. – hjpotter92

0

코드에서 for 루프의 $fields[] 배열에 값을 지정하지 마십시오.

원하는 것을하기 위해 어레이가 필요하지 않습니다.

그 작동합니다 :

$updateVals[$i] = "name".($i+1)." = '{$values[$i]}'"; 

당신은 이름을 변수로 내가 + 1을 사용할 필요는 1.

+0

어떤 값을 할당해야합니까? – userX

+0

올바른 코드로 답을 편집했습니다. –

+0

이제 첫 번째 이미지를 업로드 한 항목으로 대체합니다. – userX

관련 문제