2

私はこの機能を持っていますUtils.php

function GenerateMonthlyReport($connection, $month, $year, $objSheet)
 {     
     $months = array("Enero", "Febero", "Marzo", "Abril", "Mayo", "Junio" ,"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");       
     $fromDate = $year . "-" . $month . "-01";
     $toDate = "";

   if ($month != 12)
    $toDate = $year . "-" . ($month+1) . "-01";
  else
   $toDate = ($year+1) . "-01-01";

 etc..
}

次に、別のファイルで、このようなパラメーターcreateReport.phpを使用してこの関数を呼び出します$_POST

 include "Utils.php";
 include "Connect.php";
 require_once('PHPExcel/Classes/PHPExcel.php');

 checkLogin();

 // Connect to Db
 $connection = openDb(); 

 // Input Data
 $month =  mysqli_real_escape_string($connection, $_POST["month"]);
 $year =  mysqli_real_escape_string($connection, $_POST["year"]);

 $objPHPExcel = CreateEmptyWorkbook();
 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); // create the writer
 $objSheet = $objPHPExcel->getActiveSheet();

 GenerateMonthlyReport($connection, $month, $year, $objSheet);

問題: パラメータ$year$month、GenerateMonthlyReport 関数に渡すパラメータが関数null内にあります。

しかし、私がこのようなことをすると:

 GenerateMonthlyReport($connection, "3", "2013", $objSheet);

それらは正しく渡されます。

$yearと変数のエコーを行うと$month、値が表示されます!!

また、この奇妙な動作は、モバイル デバイスからフォームを送信した場合にのみ発生します。PCブラウザからは発生しません。

編集: フォームの HTML コードは次のとおりです。

    <form id="reportForm" action="/service/createMonthlyReport.php"  method="post">
   <table border="1">
   <tr>
   <td>
     Seleccione Per&iacute;odo
   </td>
   <td>
      <label>Mes</label><br/>
       <select id="monthM" name="month" > 
             <?php for ($i=1; $i<=12; $i++) :?>
               <option value="<?php echo $i; ?>"   <?php echo date("n") != $i ? "" : "selected" ?>>
                 <?php echo $monthName = date("M", mktime(0, 0, 0, $i, 10)); ?>
               </option>          
             <?php endfor; ?>
            </select>
            </td>

        <td>
        <label>Anio</label><br/>
            <select id="yearM" name="year" > 
             <?php for ($i=-5; $i<=5; $i++) :?>
                 <?php $yearData = (date("Y") + $i); ?>
               <option value="<?php echo $yearData; ?>"  <?php echo date("Y") != $yearData ? "" : "selected" ?>>
                 <?php echo $yearData; ?>
               </option>
             <?php endfor; ?>
            </select>                   
        </td>
        <td>    

            <input type="submit" value="Descargar Reporte Mensual" id="submitBtn" class="crearBtn" />
            </td>
    </tr>
    </table>
   </form>

openDB コード:

function openDb() {
 $sever = "myserver";
 $database_name = "dbname";
 $user = "user";
 $pass = "mypass";

 $connection = new mysqli($server, $user, $pass, $database_name) or die("DB connection failed!");;
 $connection->set_charset("utf8");
 mysqli_query($connection, 'SET NAMES utf8');
 mysqli_query($connection, 'SET CHARACTER SET utf8');

 return $connection;
}
4

1 に答える 1

1

DB エンコーディングは UTF-8 ですが、&iacute;. UTF-8 ワークフローの一部の ISO 8859-1 が、PHP またはその拡張機能の 1 つを壊している可能性があるのではないかと思います。header()UTF-8 に適切であること、およびすべて (非表示のフォーム変数など) が適切に UTF-8 でエンコードされていることを確認してください。

nullとにかく、あるべきではない変数(あなたの場合は2つ)は、間違った参照カウントの結果である可能性があります。参照は、変数の値が別の変数に割り当てられたときにコピーされない低レベルのメカニズムですが、両方の変数が参照カウントが 2 (またはそれ以上) の同じ値を指しています。たとえば、参照カウントが割り当て時にインクリメントされず、変数がスコープ外になったときにデクリメントされる場合、1 になるはずの参照カウントが 0 になり、値が誤って解放されます。

私はすでに参照カウントのバグを見たと思います。データベースの拡張機能に含まれていた可能性があります (おそらくsybase拡張機能ですが、よくわかりません)。もしそうなら、それはおそらく*_fetch_*()関数にありました。

コードの一部を取り出してみてください。問題のある関数 ( ) に到達する前に、DB 呼び出し ( を含むcheckLogin()と思います)、および/またはその部分、および/またはその他を除外してみてください。PHPExcelGenerateMonthlyReport()

コードにPHP 参照 ( &) があるかどうかを確認します。もしそうなら、それらなしでやってみてください (それら自体は悪くありませんが、低レベルでは複雑であるため、上記の種類のバグを引き起こす可能性が高くなります)。

名前の競合を排除するために、次のことも試してください: renameyearmonthtoyear0month0in フォームと in $_POST、to$yearとin メイン、andとtoとin 。$month$year1$month1$year$month$year2$month2GenerateMonthlyReport()

于 2013-03-31T00:31:09.903 に答える