顯示具有 php 標籤的文章。 顯示所有文章
顯示具有 php 標籤的文章。 顯示所有文章

2021年3月5日 星期五

php 同時傳送超過1000個變數時的做法


php 同時傳送超過1000個變數時,比方
<form id="myForm">
<?php
for ($i=0; $i <1200 ; $i++) {
  echo '<button type="submit">送出</button>';
}
?>
<form>
此時會報錯誤
PHP Warning:  Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini.
雖然可以照它說的去更改 max_input_var 的數字,但終歸無法一牢永逸(因為我的變數一直在增加)
所以上網找到這個解法:將1000個變數的值集中到一個變數中,接收後再拆開來使用


在 html 的部份,加上一變數,在送出前集中所有變數的值到此一變數
<input name="storeids" type="hidden" />
<button type="submit" onclick="changeidstostring();">送出</button>

在 js 的部份這樣寫
function changeidstostring() {
  $('#myForm').submit(function() {
    var storeids = $("input[name='ids[]']").map(function(){return $(this).val();}).get();
    $("input[name='storeids']").val(storeids);
    $("input[name='ids[]']").attr("disabled","disabled");	// 將原來會產生很多變數的元素disabled 掉,就不會傳送了 
  });
}
在接收的部分這樣寫
$ids = explode(",", $_POST['storeids']);  // 因為參數太多(超過1000個,所以改成先集中到某個參數,傳送過來再拆解)

2019年8月27日 星期二

PHP PDO IN 條件

使用PHP PDO 在組合查詢語法時若有 IN 條件,通常會用此方法
$myArray = array(1,2,3);
$in = trim(str_repeat('?,', count($myArray)),',');
$stm = $conn->prepare("SELECT * FROM table WHERE id IN ($in)");
$stm->execute($myArray);
萬一遇上 $myArray 的個數很多時,會造成語法太長,無法執行怎麼辦?
試試下面這個方法
$myArray = array(1,2,3);
$in = implode(',', $myArray);
$stm = $conn->prepare("SELECT * FROM table WHERE FIND_IN_SET(id, :inArray) ORDER BY name");
$stm->bindParam('inArray', $in);
$stm->execute();
如果是 not in,就加上一驚嘆號,變成 !FIND_IN_SET 就可以了
$myArray = array(1,2,3);
$in = implode(',', $myArray);
$stm = $conn->prepare("SELECT * FROM table WHERE !FIND_IN_SET(id, :inArray) ORDER BY name");
$stm->bindParam('inArray', $in);
$stm->execute();

2019年3月28日 星期四

php 將接收 POST 來的資料放到 html 元素中要注意的地方

事情是這樣的,因為某些因素,要 POST 的資料包含 HTML 中的 TAG 符號,如下
$str = "<option value="1">student</option><option value="2">teacher</option><option value="3">teachers' office</option>";
在接收資料時,要將它還原成一下拉選單,如下
<select id="select_1">
<option value="1">student</option>
<option value="2">teacher</option>
<option value="3">teachers' office</option>
</select>
但是因為文字中有特殊符號  ' ,造成只能顯示
<select id="select_1">
<option value="1">student</option>
<option value="2">teacher</option>
<option value="3">teachers

上網 google 了一下後,修改方式:
在 POST 前用 htmlentities 將資料包起來,這樣接收時就可以正常了


[PHP] HTML特殊字元轉換