обхождане на ред със for ..

vasilev

Registered
здравейте ,
имам следната заявка :

Код:
if($arr_seats['1_1']==$cinemaid){$seat1_1='1';}else{$seat1_1=$arr_seats['1_1'];};
if($arr_seats['1_2']==$cinemaid){$seat1_2='1';}else{$seat1_2=$arr_seats['1_2'];};
if($arr_seats['1_3']==$cinemaid){$seat1_3='1';}else{$seat1_3=$arr_seats['1_3'];};
if($arr_seats['1_4']==$cinemaid){$seat1_4='1';}else{$seat1_4=$arr_seats['1_4'];};
if($arr_seats['1_5']==$cinemaid){$seat1_5='1';}else{$seat1_5=$arr_seats['1_5'];};
if($arr_seats['1_6']==$cinemaid){$seat1_6='1';}else{$seat1_6=$arr_seats['1_6'];};
if($arr_seats['1_7']==$cinemaid){$seat1_7='1';}else{$seat1_7=$arr_seats['1_7'];};
if($arr_seats['1_8']==$cinemaid){$seat1_8='1';}else{$seat1_8=$arr_seats['1_8'];};
if($arr_seats['1_9']==$cinemaid){$seat1_9='1';}else{$seat1_9=$arr_seats['1_9'];};
....
if($arr_seats['11_27']==$cinemaid){$seat11_27='1';}else{$seat11_27=$arr_seats['11_27'];};

и ъпдейта :

Код:
 $str_query = "update `cinema_events` set 1_1='$seat1_1' ,1_2='$seat1_2' ,1_3='$seat1_3' ,1_4='$seat1_4' ,1_5='$seat1_5' ,1_6='$seat1_6' ,1_7='$seat1_7' ,1_8='$seat1_8' ,1_9='$seat1_9' ,1_10='$seat1_10' ,1_11='$seat1_11' ,1_12='$seat1_12' ,1_13='$seat1_13' ,1_14='$seat1_14' ,1_15='$seat1_15' ,1_16='$seat1_16' ,1_17='$seat1_17' ,1_18='$seat1_18' ,1_19='$seat1_19' ,1_20='$seat1_20' ,1_21='$seat1_21' ,2_1='$seat2_1' ,2_2='$seat2_2' ,2_3='$seat2_3' ,2_4='$seat2_4' ,2_5='$seat2_5' ,2_6='$seat2_6' ,2_7='$seat2_7' ,2_8='$seat2_8' ,2_9='$seat2_9' ,2_10='$seat2_10' ,2_11='$seat2_11' ,2_12='$seat2_12' ,2_13='$seat2_13' ,2_14='$seat2_14' ,2_15='$seat2_15' ,2_16='$seat2_16'



може ли и как това да се направи с един ред с цикъл ?
 
Аз имам два въпроса:

1.Относно ключовете на масива $arr_seats имапш цифри разделени с долна черта - цифрите след долната черта до колко се увеличават за да може цифрите преди долната черта да се увеличат с единица и до колко се увеличават те и винаги ли тези зависимости са едни и същи на брой и ако не от какво зависи ? Доколкото виждам това е код за резервиране на места в киносалон.

2.Не мислиш ли че имаш прекалено много колонки в таблицата, това може да значи само едно - не си структурирал правилно нещата в бази данни.Нещо куца.
 
еми .. направил съм матрица със места в театър примерно .
има 11 реда и 22 места на ред - от тук идва 1_1 - първо място .. 11_22 - 22 място 11 ред .

всичкото това е в един ред на таблицата , не се сетих за друга идея :)
защото пък в този ред има потребител , ден час и id на представление .
 
vasilev каза:
еми .. направил съм матрица със места в театър примерно .
има 11 реда и 22 места на ред - от тук идва 1_1 - първо място .. 11_22 - 22 място 11 ред .

всичкото това е в един ред на таблицата , не се сетих за друга идея :)
защото пък в този ред има потребител , ден час и id на представление .

Добре това е най-сбития вариянт за който се сещам:

PHP:
$str_query = 'UPDATE `cinema_events` SET ';
for($row=1;$row<=11;$row++)
	 for($place=1;$place<=22;$place++) {
                ${'seat'.$row.'_'.$place} = $arr_seats[$row.'_'.$place] == $cinemaid ? '1' : $arr_seats[$row.'_'.$place];
                $str_query .= $row.'_'.$place.' = "'.${'seat'.$row.'_'.$place}.'", ';
         }
$str_query = rtrim($str_query,", ");
echo $str_query;

"Ако нямате картина то проблема е във Вашият телевизор" (тоест как тествах аз тъй като има неизвестни като $cinemaid и масива $arr_seats си създадох собствени такива примерни за да видиш че работи):


PHP:
$str_query = 'UPDATE `cinema_events` SET ';
$cinemaid = 1;
for($i=1;$i<=11;$i++) for($f=1;$f<=22;$f++)  $arr_seats[$i.'_'.$f] = 'value'; 
for($row=1;$row<=11;$row++)
        for($place=1;$place<=22;$place++) {
                ${'seat'.$row.'_'.$place} = $arr_seats[$row.'_'.$place] == $cinemaid ? '1' : $arr_seats[$row.'_'.$place];
                $str_query .= $row.'_'.$place.' = "'.${'seat'.$row.'_'.$place}.'", ';
        }

$str_query = rtrim($str_query,", ");
echo $str_query;
 
$cinemaid - това е едно число което се записва на мястото което е избрано - checkbox е всичко :)
и идеята е с този ъпдейт да се обходи - където полето е равно на подаденото $cinemaid - то се сменя на 1 - тоест одобрена е заявката или празно - отказана .

ето цялата заявка но нещо не променя данните на "1" ако полетата са равни на $_POST["cinemaid"];:

Код:
$str_query = 'select * from restaurant_events where user="'.$_POST["clientname"].'" and date="'.$_POST["date"].'"';
  $obj_result = mysqli_query($obj_db, $str_query);
  $arr_seats = mysqli_fetch_array($obj_result, MYSQLI_ASSOC);
  $cinemaid=$_POST["cinemaid"];
$str_query = 'UPDATE `cinema_events` SET ';
for($row=1;$row<=8;$row++)
         for($place=1;$place<=8;$place++) {
                ${'seat'.$row.'_'.$place} = $arr_seats[$row.'_'.$place] == $cinemaid ? '1' : $arr_seats[$row.'_'.$place];
                $str_query .= $row.'_'.$place.' = "'.${'seat'.$row.'_'.$place}.'" where user="'.$_POST["clientname"].'" and date="'.$_POST["date"].'", ';
         }
  $str_query = rtrim($str_query,", ");
  $obj_result = mysqli_query($obj_db, $str_query);


всичко това е във функция която се вика с ajax request ...
 
От това което виждам че си направил разбирам че изобщо си нямаш и на идея какво прави кода.Ще се опитам да ти обясня с пример:

1.Вземи горния пример с който аз съм тествал(втория код от предишния ми пост) в един отделен файл и го стартирай и виж какво ще покаже на екран.
2.Замени го с този(тоест, това което си направил ти):

PHP:
$str_query = 'UPDATE `cinema_events` SET ';
$cinemaid = 1;
for($i=1;$i<=11;$i++) for($f=1;$f<=22;$f++)  $arr_seats[$i.'_'.$f] = 'value'; 
for($row=1;$row<=11;$row++)
        for($place=1;$place<=22;$place++) {
                ${'seat'.$row.'_'.$place} = $arr_seats[$row.'_'.$place] == $cinemaid ? '1' : $arr_seats[$row.'_'.$place];
                $str_query .= $row.'_'.$place.' = "'.${'seat'.$row.'_'.$place}.'" where user="username" and date="22/22/2012", ';
        }
$str_query = rtrim($str_query,", ");
echo $str_query;

Сега виждаш ли колко грешно си направил заявката ? Толкова, че дори и папата да и се помоли да тръгне пак няма да стане.

Това което си искал да направиш:

PHP:
$str_query = 'UPDATE `cinema_events` SET '; 
for($row=1;$row<=8;$row++) 
         for($place=1;$place<=8;$place++) { 
                ${'seat'.$row.'_'.$place} = $arr_seats[$row.'_'.$place] == $cinemaid ? '1' : $arr_seats[$row.'_'.$place]; 
                $str_query .= $row.'_'.$place.' = "'.${'seat'.$row.'_'.$place}.'", '; 
         } 
$str_query = rtrim($str_query,", "); 
$str_query .= ' WHERE `user` = "'.$_POST["clientname"].'" AND `date` = "'.$_POST["date"].'"';
$obj_result = mysqli_query($obj_db, $str_query);

Също така научи се да обграждаш колоните и имената на таблиците с апострофи `колона`,`таблица` за да нямаш проблеми с резервирани думи от mysql в случая като името на колоната ти date.
 
ясно ми е какво прави кода но както и предполагах - объркал съм кавичките . По принцип слагам `` .

благодаря работи :)
 
vasilev каза:
ясно ми е какво прави кода но както и предполагах - объркал съм кавичките . По принцип слагам `` .

Това беше другят проблем (резервираната дума), основният е че беше сложил WHERE клаузата в цикъла и така след всяко ъпдейтване на единична колонка се добавяше и самата клауза, което автоматично прави заявката невалидна.
 

Горе