PHP for循环向数据库添加值

时间:2014-01-28 21:17:43

标签: php mysql for-loop

我为图片上传创建并验证了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循环一遍又一遍地将相同的值插入数据库,我该怎么做?

非常感谢,哈利

2 个答案:

答案 0 :(得分:0)

好像你必须改变你的架构。

为照片创建一个单独的表,并使用主键引用数据的重置(将id放入会话数据中)

另外,如果我没有指出mysql_已被弃用并且您确实应该使用预准备语句,那么我会失职。

答案 1 :(得分:0)

据我所知,用户正在“订购”包含数字(“项目”),价格和照片以及他的电子邮件和姓名的订单项。这样一个订单项的标识符是什么?如果是用户电子邮件,请在其上设置主键并执行更新,而不是插入(如果存在)。

熟悉“insert ... on duplicate key