2013-10-10 4 views
1

기본적으로이 문제를 해결하는 데 문제가 있습니다. 기본적으로 이미지 (image 및 image2) 필드에 하나의 테이블이 있습니다. 코드를 재사용하고 업로드를 위해 올바르게 작동하고 있습니다. un 이미지를 제출하지만 두 번째는 업로드되지 않으며 과정이 DB에 삽입되지 않습니다.PHP로 두 개 이상의 이미지를 MySQL에 업로드

<form action="../imgs/update_code.php" method="post" enctype="multipart/form-data" id="form1"> 

<input name="image1" type="file" /> 
<input name="image2" type="file" /> 

<input name="id" type="hidden" value="<?php echo $row_Recordset1['id']; ?>" /> 
<input name="submit" type="submit" value="submit" /> 
</form> 

이 제출 한 다른 이미지를 업로드 할 수 있습니다 또는 나는 형식 당 하나 개의 이미지를 업로드 계속해야하는 경우 사람이 말해 줄래 (첫 번째 양식 업로드/"image1에"와 두 번째 형태 업데이트를 삽입/업로드 "이미지 2 ")

<?php require_once('../admin/Connections/cnx.php'); ?> 
<?php 
ob_start(); 
$tabla='models'; 
$destino='../models.php'; 
mysql_connect($server,$user,$pass); 
mysql_select_db($db); 
function modificar($tabla,$id){ 
$strupdate=''; 
foreach($_POST as $k => $v){ 
if($k!='imageField_x' && $k!='imageField_y' && $k!='image1' && $k!='image2' &&   $k!='foto2' && $k!='foto3' && $k!='Submit'){ 
$v=(get_magic_quotes_gpc()) ? $v : addslashes($v); 
$strupdate.= "$k='$v',"; 
}} 
$strupdate=substr($strupdate,0,(strlen($strupdate)-1)); 
mysql_query("SET NAMES utf8"); 
mysql_query("update $tabla set $strupdate where id='$id'"); 
} 
function reemplazaarchivo($archivo,$archivotemp,$tabla,$campoarchivo,$error,$id){ 
if($archivo!=''){ 
$qryant=mysql_query("select * from $tabla where id='$id'"); 
$rowant=mysql_fetch_array($qryant); 
@unlink($rowant[$campoarchivo]); 
$extension200=end(explode(".",strtolower($archivo))); 
if($extension200!='jpg' && $extension200!='gif' && $extension200!='png' && $extension200!='doc' && $extension200!='zip' && $extension200!='pdf' && $extension200!='xls' && $extension200!='ppt' && $extension200!='swf'){ 
eval($error);exit;} 
$foto2=md5(time()).$archivo; 
copy($archivotemp,$foto2); 
@chmod($foto2,0755); 
mysql_query("update $tabla set $campoarchivo='$foto2' where id='$id'"); 
} 
} 
modificar($tabla,$_POST['id']); 
reemplazaarchivo($_FILES['image1']['name'],$_FILES['image1']['tmp_name'],$tabla,'image1','',$_POST['id']); 
for($i=1;$i<4;$i++){ 
reemplazaarchivo($_FILES['image1'.$i]['name'],$_FILES['image1'.$i] ['tmp_name'],$tabla,'image1'.$i,'',$_POST['id']); 
} 
header("Location:$destino"); 
ob_end_flush(); 
?> 
+2

** ** 더 많은 SQL 인터페이스 코드를 작성하기 전에 심각한 [SQL 주입 버그]를 피하려면 [적절한 SQL 이스케이프] (http://bobby-tables.com/php)를 읽어야합니다 http://bobby-tables.com/). 'addslashes'는 유효한 이스케이프 메소드가 아니며, mysql_query는 새로운 애플리케이션에서 사용해서는 안되며 PHP에서 제거됩니다. [PDO와 같은 현대적인 대체물은 배우기 어렵지 않습니다.] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). [PHP The Right Way] (http://www.phptherightway.com/)와 같은 안내서는 이와 같은 실수를 피하는 데 도움이됩니다. – tadman

+1

'eval' !? 'addslashes'!? 'mysql' !? 보안 문제와 끔찍한 코딩 실례로 코드가 간소화되었습니다. 이 쓰레기를 도랑, 그리고 드로잉 보드로 돌아갑니다 ... –

+0

귀하의 의견을 많이 주셔서 감사합니다, 나는 PHP 드림위어 교육 않았다 그리고 그들은 우리에게 예제 코드를 제공하고 모르게 그것을 재사용했다. 당신의 조언을 확인하겠습니다. –

답변

2

Google도 되나요? http://php.net/manual/en/features.file-upload.multiple.php

<form action="file-upload.php" method="post" enctype="multipart/form-data"> 
    Send these files:<br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input type="submit" value="Send files" /> 
</form> 

는 또한, 코드 .. 보안에 봐 매우 불분명하고 안전하지 않은 것.

+0

답장을 보내 주셔서 감사합니다. 일주일 이상 인터넷 검색 중입니다. 예제를 찾았지만 구현할 수 없습니다. –

+0

실제 코드에있는 내용은 입력 필드의 이름이 동일합니다. 그래서 그것은 덮어 쓰기입니다. 배열로 변경하거나 다른 값을 지정하십시오. – Matheno

관련 문제