0

我需要帮助解决我的问题。我想在我的数据库中上传多张图片。我将路径放在我的数据库中,将图像放在文件夹中。我认为上传工作正常,但如果我在数据库中看到路径,它看起来像这样:

projects/projects_past/benefits.pnh

图片的扩展名应该是.png我为什么要拍这个.pnh???

我在问用户您要上传多少张图片?比如3,所以我在同一个php文件中给他三个输入类型的文件来上传它们。提交后,重定向到另一个 php,我将图像插入数据库。

第一个 php 文件有以下代码:

if($submit_num_images)
{
echo "<form action='img_projects.php?num_images=".$num_images."' enctype='multipart/form-data' method='post' name='form3' id='form3'>";
$temp_num = 0;
while($temp_num != $num_images){
    echo '<tr><td>Choose image number:&nbsp;'.$temp_num.'</td><td colspan="2"><input type="file" name="image[]" id="image[]" multiple /> </td></tr>';
    $temp_num++;
}
echo '<tr><td colspan="3">&nbsp;</td></tr>';
echo '<tr><td> Choose the Project that related to the images </td>
<td colspan="2">';
    $titles = mysql_query("SELECT * FROM projects");
    echo '<select name="title_project">';
    $count = 0;
    while($values_titles = mysql_fetch_assoc($titles))        {
        echo'<option value="'.$values_titles['id_project'].'">"'.$values_titles['title'].'"</option>';
        $count++;
    }
    echo '</tr>';
echo '<tr><td colspan="3">&nbsp;</td></tr>';
echo '<tr><td colspan="3"><input type="hidden" name="img_insert" id="img_insert" value="1" /></td></tr>';
echo '<tr><td colspan="3" align="center"> <input type="submit" name="submit_project_image" value="Submit the images of a project" id="submit_project" /></td></tr>';
}       
echo '</table>';
echo '</form>';
} // end insert 2

?>

这是第二个 php 文件:

for($i=0; $i<$num_images; $i++){
if($_FILES['image']['name'][$i] == "") {
//header('Location:controlpanel.php?insert=2&msg=0');   
}
else {
$pics.$j = "projects/projects_past/".$_FILES['image']['name'][$i];
move_uploaded_file($_FILES['image']['tmp_name'][$i], $pics.$j);
$j++;
$query = mysql_query('INSERT INTO img_projects (id_project,image) VALUES ("'.$title_project.'","'.$pics.$j.'") ') or die(mysql_error());
}
}

我有一张用于多张上传图片 image[] 的表格

任何帮助或建议,我将不胜感激!

我有权在我的数据库中写入

我正在使用MyISAM,*utf8 general_ci*

我表中的字段imagevarchar(500)

谢谢阅读!!!

4

1 回答 1

0

我不确定您要完成什么,$pics.$j但它不会达到您的预期,尤其是当您尝试分配给它时($pics.$j = "projects/projects_past/".$_FILES['image']['name'][$i];)。自己用$pics就行;该变量将在您的 for 循环的每次迭代中被覆盖,因此您无需每次都尝试创建一个新变量。如果您确实想跟踪$pics循环后使用的多个路径,则使 $pics 成为一个数组:

$pics = array();
$j = 0;

for($i=0; $i<$num_images; $i++){
if($_FILES['image']['name'][$i] == "") {
//header('Location:controlpanel.php?insert=2&msg=0');   
}
else {
$pics[$j] = "projects/projects_past/".$_FILES['image']['name'][$i];
move_uploaded_file($_FILES['image']['tmp_name'][$i], $pics[$j]);
$query = mysql_query('INSERT INTO img_projects (id_project,image) VALUES ("'.mysql_real_escape_string($title_project).'","'.mysql_real_escape_string($pics[$j]).'") ') or die(mysql_error());

$j++;
}
}

我还mysql_real_escape_string()为您添加了周围$title_project以及$pics[$i]防止 SQL 注入攻击的路径(黑客可以在 title_project 或文件名中发送的偷偷摸摸的 SQL 代码)。

于 2012-11-23T15:48:55.660 回答