есть документ excel, в нем есть данные, я их добавляю в базу данных.
Номер | Тариф1 | Тариф2
23 | 130,7 | 0
24 | 22,6 | 33,08
Так вот, если в тарифе2 стоит 0 , то в бд попадает одна запись, иначе 2, в каком виде, должны попасть данные:
id | numb | tar | i
1 | 23 | 130,7 | 1
2 | 24 | 22,6 | 1
3 | 24 | 33,08 | 2
Переменная $val это массив из трех значений как я понимаю: Номер, Тариф1, Тариф2
Если у вас там заведомо известно что он всегда будет из трех заначений то ваш цикл while не нужен, надо использовать лишь пару условий, иначе проще будет использовать foreach php.net/manual/ru/control-structures.foreach.php
Deexter: да $val это массив из столбцов файла excel , который я парщу в бд) но я просто не могу понять, как мне сделать. Если на 1 номере 2 тарифа, 2 записи в бд, где в первой записи будет 1 тариф, а во второй 2 тариф. Цикл while я делаю для того, что бы просто проставить 1 и 2 тариф(нумерацию).
Deexter: если это не рассматривать на тарифах, а на чем нибудь другом, то будет выглядеть так:
Миша имеет 2 мяча, один 5кг, другой 10. Маша имеет 1 мяч 3 кг.
Получаем три записи в бд с тремя полями.
Имя. Кг. Кол-во мячей
Миша 5. 1
Миша. 10. 2
Маша. 3. 1
Deexter: хотя он работает, если
if ($t1 != 0) {
$query="INSERT INTO arm_pyramid (numb_count_excel,name_canal,tar1,summ,date_removal) VALUES ('$count','".addslashes($name)."','$t1','$summ','$date_removal')";
$connection = Doctrine_Manager::connection();
$statement = $connection->execute($query);
}
if ($t2 != 0) {
$query="INSERT INTO arm_pyramid (numb_count_excel,name_canal,tar1,summ,date_removal) VALUES ('$count','".addslashes($name)."','$t2','$summ','$date_removal')";
$connection = Doctrine_Manager::connection();
$statement = $connection->execute($query);
}
Но я не уверенна, что правильно, коннектиться к базе на каждом условии..
if (preg_match("/^[0-9]+$/",$t2)) { // собственно проверка на 0 на тариф2
$i=2; $t2 = $t1;
}
else
{
$i=1;
}
В этом куске кода у тебя определяется чему будет равен $i. А дальше цикл по $i, т.е. если у тебя 0 (вернее цифры) то $i = 2 и цикл выполняется 1 раз, а если у тебя есть не только цифры (в твоем случае это запятая), то $i = 1 и цикл выполняется 2 раза. Поправь регулярку (самый простой вариант добавь запятую "/^[0-9,]+$/", но не совсем корректно), хотя я не знаю, чего ты хочешь добиться.
все просто, сейчас вид записи :
номер тариф1 тариф2
23 22 23
мне надо просто сделать из этого 2 записи
23 22
23 23 --> чтобы запись из тарифа2 ушла во вторую запись
Ирина: сложная у тебя проверка на ноль )))). Делай проще. Проверяй если тариф2 != 0, то записывай его в БД, а тариф1 всегда записывай. Цикл тут неуместен.
Ирина: Предложу костыль. Замени цикл на тот что ниже
while($i <= 2)
{
$tarname = 't'.$i;
$query="INSERT INTO mid (numb,tar,i) VALUES ('".addslashes($numb)."','".$$tarname."','$i')";
$connection = Doctrine_Manager::connection();
$statement = $connection->execute($query);
$i++;
}