我为图片上传创建并验证了for循环。我现在正尝试将这些值添加到数据库中,其他值先前已存储在站点早期部分的会话中。
FOR循环
for($i=1; $i<=$items; $i++) {
$file_size = $_FILES["photo{$i}"]['size'];
$file_name = $_FILES["photo{$i}"]['name'];
$file_extn = strtolower(end(explode('.', $file_name)));
$file_temp = $_FILES["photo{$i}"]['tmp_name'];
$allowed = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($file_extn, $allowed) === false) {
echo '<div class="alert alert-danger">[Photo '.$i.'] Format <strong>NOT</strong> acceptable. ';
echo 'Accepted formats: '. implode(', ', $allowed).'</div>';
} elseif($file_size > 1048576) {
echo '<div class="alert-danger">[Photo '.$i.'] Image is too big. Maximium file size is 1MB.</div>';
} else {
// add values to database
}
}
这就是我打算将所有值插入数据库的方式
$temp_data = array(
'name' => ucwords($_SESSION['name']),
'email' => strtolower($_SESSION['email']),
'delivery' => strtolower($_SESSION['delivery']),
'item' => sanitize($_GET['item']),
'price' => sanitize(($_GET['item'])*4.99),
'time_now' => date('Y-m-d H:i:s'),
'time_end' => date('Y-m-d H:i:s', strtotime("+15 day")),
'photo1' => $file_path
);
insert_temp($temp_data);
这是insert_temp
功能的代码。
function insert_temp($temp_data) {
array_walk($temp_data, 'array_sanitize');
$fields = '`' . implode('`, `', array_keys($temp_data)) . '`';
$data = '\'' . implode('\', \'', $temp_data) . '\'';
mysql_query("INSERT into `temp` ($fields) VALUES ($data)");
}
这就是问题所在。我想插入先前存储为会话的值,但也将图像存储在数据库中的for循环中。如果不使用for循环一遍又一遍地将相同的值插入数据库,我该怎么做?
非常感谢,哈利
答案 0 :(得分:0)
好像你必须改变你的架构。
为照片创建一个单独的表,并使用主键引用数据的重置(将id放入会话数据中)
另外,如果我没有指出mysql_已被弃用并且您确实应该使用预准备语句,那么我会失职。
答案 1 :(得分:0)
据我所知,用户正在“订购”包含数字(“项目”),价格和照片以及他的电子邮件和姓名的订单项。这样一个订单项的标识符是什么?如果是用户电子邮件,请在其上设置主键并执行更新,而不是插入(如果存在)。