2016-11-18 2 views
-2

У меня есть следующие таблицы Mysql и PHP-код.My php loop не заполняет мою базу данных MYsql

MySQL: Я выбираю из таблицы Store количество магазинов. Который возвращает мой список магазинов.

У меня также есть таблица cashup с информацией

PHP: петля имеет место, где для NumberOfDays, предполагают, чтобы быть дней в месяц.

В цикле while я выбираю SQl, который возвращает мои значения из таблицы оплаты в соответствии с датой и хранилищем.

В цикле я увеличиваю свои дни, чтобы разрешить цикл через все мои магазины в течение 31 дня, чтобы вернуть значения суммы денежных сумм.

//loop days 
$numberofdays = 31; 
$monthyear = NOV_2016; 
$x = 1; 
     //loop days 
     do { 
      //string days info 
      $thedate = $x . '_' . $monthyear; 

      if (strlen($thedate) == 10){ 
        $thedate = '0' . $thedate; 
        } 
       //Do select 
       mysql_select_db($database_localhost, $localhost); 
       $query_showr = "select sum(cashup_cash) from cashiercashdata where cashup_date LIKE '$thedate' and cashup_store = '$store'"; 
       $showr = mysql_query($query_showr, $localhost) or die(mysql_error()); 
       while ($row_showr = mysql_fetch_assoc($showr)) 
         { 
          //loop through record rows 
          foreach($row_showr as $row) 
           { 
           ///////$insertday = "recon_d" . $x . "_received"; 
           echo " Store : " . $store . " Counter : " . $x . ' : ' . gettype($x) . ' : ' . $row . ' : ' . gettype($row) . '<br>'; 
          mysql_query(" 
          update bankrecon 
          set recon_d10_received = '$row' 
          WHERE recon_store = '$store' 
          and recon_month = '$monthyear' 
          "); 
        } 
         } 
$x++; 
     } while ($x <= $numberofdays); 

PHP: петля имеет место, где для NumberOfDays (целое число), предполагают, чтобы быть дней в месяц.

В цикле while я выбираю SQl, который возвращает мои значения из таблицы оплаты в соответствии с датой и хранилищем.

В цикле я увеличиваю свои дни, чтобы разрешить цикл через все мои магазины в течение 31 дня, чтобы вернуть значения суммы денежных сумм.

Эта эхо-информация корректно отображается на дисплее, но мое обновление в цикле только вставляет информацию, если для параметра numberofdays установлено значение static 10;

Store : centralpark Counter : 10 : integer : 56277.40 string 
Store : ficksburg Counter : 10 : integer : 42698.14 string 
Store : kroonstad Counter : 10 : integer : 28486.70 string 
Store : maitland Counter : 10 : integer : 55988.40 string 
Store: od Counter : 10: integer 41412.10 string 

Он работает корректно на дисплее, но не обновляет таблицу адресатов. Может ли кто-нибудь объяснить мне, почему цикл информации о номере дня не вызывает обновление для столбца, но если число дней является статическим, оно обновляется.

enter image description here

+0

в печать SQL запросов, вы получите сообщение об ошибке. –

+0

К сожалению, распечатать sql и повторить значение дает те же результаты. Информационное эхо правильно со значениями. это означает, что мой запрос правильный. Обновление во внутреннем цикле корректно обновляет таблицу адресатов, но только если для параметра numberofdays var установлено значение static 10 int. Итерация с циклом while или циклом for, который динамически изменяет значение по какой-либо причине, заставляет оператор update не отвечать правильно. –

ответ

0

Теперь, это трудно точно знать, не зная, что ваша таблица назначения выглядит, но я предполагаю, что это что-то делать с UPDATE заявление.

update bankrecon 
    set recon_d10_received = '$row' 
    WHERE recon_store = '$store' 
    and recon_month = '$monthyear' 

Конкретно этот бит: set **recon_d10_received** = '$row'

Это, возможно, говорит таблицу, чтобы обновить только день 10?

+0

В настоящее время я тестировал свое обновление до recon_d10_received. Цель выбора - заполнить сетку для 30 магазинов с информацией об оплате за каждый день месяца. Приращение $ x будет динамически изменяться на каждой итерации цикла. Обновление отлично работает, когда статическое целое число 10 присваивается числу дней. Но когда цикл повторяется над тем, где $ x = 10 с циклом, информация по-прежнему эхо корректно, но обновление игнорирует значение ti insert в столбце norlan varchar в таблице адресатов. –

+0

Для более четкого понимания найдите вставку таблицы и файлы на сервере. ДБ для вставки в это называется cashup. https://www.dropbox.com/s/0rlsm73uqy7p42o/bankrecon.sql?dl=0 https://www.dropbox.com/s/bh6srw7wic4y89k/cashiercashdata.sql?dl=0 https: // www.dropbox.com/s/55nyzuu9i2vhlv1/store.sql?dl=0 https://www.dropbox.com/s/9ly02qoyw88f51r/gridtest.php?dl=0 –

0

два примера таблицы SQL:

CREATE TABLE `bankrecon` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `recon_d10_received` varchar(45) DEFAULT NULL, 
    `recon_store` varchar(45) DEFAULT NULL, 
    `recon_month` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `data and store` (`recon_store`,`recon_month`,`recon_d10_received`) 
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 


CREATE TABLE `cashiercashdata` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `cashup_cash` int(11) DEFAULT NULL, 
    `cashup_date` varchar(45) DEFAULT NULL, 
    `cashup_store` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

и сам PHP:

session_start(); 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

$mysqli = new mysqli("localhost", "someuser", "somepass", "somedb"); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

    $store = 'somestrome'; 
    $numberofdays = 31; 
    $monthyear = 'NOV_2016'; 
    $x   = 1; 
    //loop days 
    do { 
     //string days info 
     $thedate = $x.'_'.$monthyear; 

     if (strlen($thedate) == 10) { 
      $thedate = '0'.$thedate; 
     } 
     $showr = $mysqli->query("select sum(cashup_cash) as cashup_cash from cashiercashdata where cashup_date LIKE '$thedate' and cashup_store = '$store'")->fetch_assoc(); 
     if(!is_null($showr['cashup_cash'])){ 
      $sql = " INSERT INTO bankrecon (recon_d10_received,recon_store,recon_month) VALUES ('".$showr['cashup_cash']."','$store','$monthyear') ON DUPLICATE KEY UPDATE recon_d10_received='".$showr['cashup_cash']."'"; 
      $mysqli->query($sql); 
      echo " Store : ".$store." Counter : ".$x.' : '.gettype($x).' : '.$showr['cashup_cash'].' : '.gettype($showr['cashup_cash']).'<br>'; 
     } 


     $x++; 
    } while ($x <= $numberofdays); 

Имейте в виду:

  • Изменение $ магазин вар
  • Держите УНИКАЛЬНЫЙ КЛЮЧ на колонках recon_store, recon_month, recon_d10_received при использовании insert-on-duplicate.
  • Изменить код подключения к БД

также использовать этот PHP код, чтобы увидеть больше ошибок:

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
Смежные вопросы