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

2022年12月7日 星期三

如何檢查 mysqli_query() insert,update是否成功

要檢查 mysqli_query() 插入是否成功,可以使用 mysqli_affected_rows() 函數。 此函數返回受查詢影響的行數。 如果插入成功,受影響的行數應該大於 0。如下:
$result = mysqli_query($conn, $query);
if (mysqli_affected_rows($conn) > 0) {
    // insert was successful
} else {
    // insert failed
}
此方法僅適用於insert, update跟delete 的queries查詢。 對於select資料,mysqli_affected_rows() 將始終返回 0。 在這種情況下,可以使用 mysqli_num_rows() 檢查select查詢是否返回任何行。
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
    // query returned one or more rows
} else {
    // query returned no rows
}

2022年4月3日 星期日

mysqli_insert_id() 取得mysql insert後程式新增的那筆資料的id

當使用mysql語法在資料表上insert一筆新資料後想要立即取得該資料的id 可以在insert後立即使用mysqli_insert_id()來取得剛剛insert進去新的那筆資料的id(資料表 AUTO_INCREMENT 產生的id ) 用法: $getId = mysqli_insert_id($link); //$link是自行宣告的連接mysql的參數 取得該id後再使用select * from table wher id = $getID; 就可以撈出最新這筆insert進去的資料 另外一個select last_insert_id(); 的方式

2020年5月26日 星期二

【Linux】如何停止正在運行的crontab排程工作 to see and stop current running crontab tasks.

當 crontab排程已開始執行時,可透過以下方式找出執行緒並將運行中的排程停止

經由下面的語法可讓主機目前執行的排程工作可以容易閱讀
ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"
運行上面程式後會看到類似下面的畫面
1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/accesscronjob.php
4290  4289         \_ /bin/bash /path/to/my/crontab/accesscronjob.php
.
.
.

第一欄是PID、第二欄位是Session ID、第三欄則是被排程啟動執行的程式。
若要刪除已經被排程啟動正在運行中的程式,可以藉由Session ID來kill所有相關的排程運行程式。

所以如下圖,若要停止正在運行的accesscronjob.php可以透過pkill語法來kill他的session ID "4289",如下
pkill -s 4289
參考網址

2019年9月29日 星期日

php輸出錯誤以供偵錯的語法

不方便修改主機php.ini時
在檔案前面加上下列語法,可在頁面上輸出錯誤的資訊以供偵錯
<?php
ini_set("display_errors","On");
error_reporting(E_ALL);
?>

2018年2月9日 星期五

解決php上傳png圖檔如果縮圖就會變黑的問題

png圖檔上傳後縮圖就會變黑圖的問題!
上傳圖檔的程式需加上下列語法存入png的透明部分





2018年1月12日 星期五

php mysql欄位輸入前的過濾檢查,防止sql_injection或xss()等攻擊

除了送出表單前的輸入檢核碼外,建議每個欄位可以做下方三道的過濾

1.strip_tags();
把所有輸入內容內的html語法跟js碼去掉
用法:
strip_tags($mystring);

2.htmlspecialchars();
htmlspecialchars是最基本的防線,在strip_tags過濾後加上htmlspecialchars過濾可以把strip_tags處理不掉的部分,如"或'轉換成文字碼(譬如:" 會變成&quot;)
也有人說strip_tags可以不做但是htmlspecialchars一定要
用法:
htmlspecialchars($mystring);
2.mb_substr();
輸入的字數先砍長度,譬如限制最多只有500或5000,防止mysql欄位的溢位攻擊
建議加上utf-8,以防內容有英數字會造成砍完長度後的尾字變亂碼
ex: mb_substr( $string,0,500,"utf-8");  //只截取500字

3.mysql_real_escape_string:
過濾敏感字元,防sql_injection,加這道前mysql要先建立資料庫連結,有登入的欄位最好加上
例如:
$con=mysqli_connect("localhost","db_userName","db_passWord","dbName");
mysqli_real_escape_string($con, $value);

如果有紀錄ip的話,可多加一道
4.用正規表示式去掉ip非數字跟 . 的部分,防sql_injection跟xss()攻擊,或用php內建的ip檢查函式檢查:
			//取得使用者ip
			if(!empty($_SERVER['HTTP_CLIENT_IP'])){			
			  $i_useripServer = $_SERVER['HTTP_CLIENT_IP'];			
			}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
			 $i_useripServer = $_SERVER['HTTP_X_FORWARDED_FOR'];			
			}else{			
			 $i_useripServer= $_SERVER['REMOTE_ADDR'];
			}
			
			$i_userip = filter_var($i_useripServer, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);


另每個post進來的值最好另命參數後再組合進sql語法內
例:
$myData=$_POST['data'];
$sql="INSERT INTO tableName (t_data) VALUES ('{$myData}')";
sql的陳述式最好參數化處理,以避免SQL injection的風險:
例如原本下面的方式:
$query="SELECT * FROM dbName WHERE t_userid = '$userId'";
$result=mysqli_query($link,$query);
$count=mysqli_num_rows($result);	

最好改為下面的參數化陳述
$query = "SELECT * FROM dbName WHERE t_userid = ?";
$stmt = $link->prepare($query);
$stmt->bind_param('s',$userId); 
$stmt->execute();
$result = $stmt->get_result();

$count=mysqli_num_rows($result);

if($count>0){
	$row=mysqli_fetch_array($result);
    
    $dataOne = $row['data_one'];
    $dataTwo = $row['data_two'];
}

$stmt->free_result();
$stmt->close();

$mysqli->close();


2017年12月31日 星期日

qnap自建網頁主機,調整php.ini ,讓網頁檔案更新後,頁面重整後也會即時refreh

在qnap上自建網頁主機,
在做網頁修改時發生,檔案更新後,但是頁面沒有跟著即時更新(即使強制清除cache跟cookie)還是無效,後來計算時間發現,主機會規律的在60秒後才更新(也就是60秒後按重整頁面,資料才會改變)。

後來在php.ini上的[opcache]項目下看見

opcache.revalidate_freq = 60

這一行設定,上網搜尋一下功能是「在每隔幾秒才檢查 PHP檔案有否更動,上線環境可以設高一點,若是開發環境建議為 0」

於是把這行的值改為0後,果然就正常了,每次修改網頁檔案程式碼後,只要重整頁面
就會馬上看到更新的資料

這裡是有關 OPcache 的介紹

2017年12月19日 星期二

php取出副檔名並比對

//使用字串函式 "pathinfo" 方式取出上傳檔案的副檔名,並用in_array來檢查副檔名

$imgFileExt=pathinfo(strtolower($imgFile), PATHINFO_EXTENSION); //取得副檔名
if(!in_array($imgFileExt,array("jpg","jpeg","peg","png","gif"))) $imgFile="";

以官方的內建函式pathinfo()取得副檔名是效能最好的方式,後方的第二個參數還有下列幾個可選用:
PATHINFO_DIRNAME:取得資料夾路徑
PATHINFO_BASENAME:取得整個檔名(主+副)
PATHINFO_EXTENSION:取得副檔名
PATHINFO_FILENAME :取得主檔名

其他使用方式可參考此篇文章

2017年11月8日 星期三

Mysql 把資料庫的AUTO_INCREMENT自動遞增歸零

在資料庫管理後台上以sql執行下列行即可

ALTER TABLE 表單名稱 AUTO_INCREMENT = 0


2017年10月17日 星期二

php 取得使用者ip

//取得使用者ip
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
  $i_userip = $_SERVER['HTTP_CLIENT_IP'];
}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
 $i_userip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
 $i_userip= $_SERVER['REMOTE_ADDR'];
}

2015年6月18日 星期四

php改變上傳後圖檔的長寬尺寸

<?php


if(is_uploaded_file($upload1))

//upload1為上傳圖檔input 欄位內的name""
          {
          if($_FILES['upload1']!="none")  {      
                //resize 390*250  518×351  2
$uploadedfile = $_FILES['upload1']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
list($width,$height)=getimagesize($uploadedfile);
$newwidth=390 ;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

                $fnsub=explode(".",$_FILES['upload1']['name']);

                if($fnsub[1]!="") {
                $fn1="bbs_".date("Ymdhis").".".$fnsub[1];
                copy($_FILES['upload1']['tmp_name'],$DOCUMENT_ROOT."/upimg/$fn1");
             
                imagejpeg($tmp,$DOCUMENT_ROOT."/upimg/$fn1",100);
                imagedestroy($src);
imagedestroy($tmp);
             }                  

          } 


?>

2014年4月22日 星期二

ckeditor 固定編輯視窗的大小,讓使用者無法拉動區塊改變尺寸

修改config.js檔案:
在CKEDITOR.editorConfig = function( config ){  }
內加上

//設定視窗高度及寬度

config.height = '111px'; //可以這樣寫
config.width = 111; //也可以這樣寫
//關閉尺寸縮放,固定尺寸,讓使用者無法拉動區塊改變尺寸

config.resize_enabled = false;
//也可以不關閉尺寸縮放的功能,但是控制縮放的方向(垂直或水平),以及最大及最小的縮放範圍

config.resize_dir = 'vertical'; //可以設定 (both, vertical,或是 horizontal)





2014年2月16日 星期日

Javascript+PHP簡單的跳出詢問確認視窗語法return confirm

在input標籤或是a標籤裡面加上 onclick="return confirm('yes or no');"
這一段,就會在按下按鈕時跳出是否確定執行的確認視窗

例如:
input type="submit" value="送出" onclick="return confirm('是否確認刪除這筆資料');"

a href="xxxx.php"  onclick="return confirm('使否確定要執行這個動作?');"


2012年12月3日 星期一

獨立的php留言板驗證碼套件

 說明:
因為客戶的需要,為了防止機器人的留言灌水,所以嘗試在網路上找一些可以加在php留言板的驗證碼套件,但是結果是非常令人失望的。
因為找的到檔案,都是要搭配例如PHPBB或是一些大型的論壇所使用的,重點是不能單獨的存在;還有找到一個,不過,所開發的作者並不願意公開分享。
所以,為了能讓廣大的網路使用者,在單純的php留言板,能外掛一個小套件,便能擁有一個圖片驗證碼的功能之情況之下,所以我們整合了這一個小套件,供大家下載使用,並歡迎大家共同分享。
 檔案大小:3kb 

下載檔案: PHPverify.rar    備用下載:PHPverify.rar  
 使用說明:
請先下載 PHPverify.rar 這一個檔案,解壓縮之後,會有 imagebuilder.php 及 settings.php 這2個php檔案,請將這2個檔案放在您php留言板的網站同一層目錄中,接下來在您的php留言板,在您要新增驗證碼的地方插入以下語法。

網頁語法如下:
<td align="left" colspan="2"><font size="2">請輸入驗證碼:</font><img src="imagebuilder.php" border="1">
<input maxlength=8 size=8 name="userstring" type="text" value=""></td>

最後看您的留言板一定是會將留言的資料以POST的方式,看form就可以知道是傳到那一個檔案
在此接收並傳送的php頭頂加上此段:
include "settings.php";
@session_start();
$string = strtoupper($_SESSION['string']);
$userstring = strtoupper($_POST['userstring']);
@session_destroy();
if (($string != $userstring) || (strlen($string) <= 4)) {
echo "<center><br><br><br><br><br><br><br><font color=red size=2>驗証碼錯誤!請輸入正確的驗證碼</font><br><a href=javascript:history.back(1)><font size=2><center>回上一頁</font></a>";
exit();
}

本文轉貼於"一方位網頁設計"

2012年11月26日 星期一

用php導入獨立的網頁檔案,可將共用的選單列單獨一個檔案,方便維護修改

把選單列另外制作為menu.php

在要出現選單列的位置輸入php語法

<?php 
require_once("./menu.php"); 
?>




2009年10月27日 星期二

把php的值傳送到flash上

以下範例為將某個資料夾內的檔案數量經由php統計後,再把統計出來的值傳給flash呈現出來:
php的值 參考php計算資料夾內檔案數量的語法

php上的寫法為:
<?php
$dir="要取得檔案數量的資料夾";
$num=count(glob("$dir/*.*"));
echo "&message1=".$num; //把num變數帶入message1,message1是之後在flash上要抓的參數
?>


flash上的寫法為:(先新建一個flash檔案,在理面新增一個動態文字框並命名為message1)
stop();
response_lv = new LoadVars();
response_lv.onLoad = function(success) {
if(success) {
message1.text=this.message1;
}
}
var my_lv = new LoadVars();
my_lv.sendAndLoad("countfile.php",response_lv);


本篇參考出處http://forums.devshed.com/flash-help-38/php-flash-variable-does-not-display-value-75447.html

php列出特定資料夾內所有檔案名稱的語法

<?php
$dirname="想要讀取的資料夾名稱";
$dh=opendir($dirname);
while ($dave=readdir($dh))
{
if ($dave != "." && $dave != "..") {
echo $dave."<br>"; //"br"讓名稱可以斷行排列出來,不會一直排下去
}
}
closedir ($dh);
?>

2009年10月26日 星期一

php計算資料夾內檔案數量的語法

使用php計算某一個資料夾內的檔案數量的語法

<?php
$dir="要計算的資料夾名稱";
$num=count(glob("$dir/*.*"));
//*.*也可以改為特定的副檔名,如 *.jpg 這樣就只會統計該資料夾內所有副檔名為jpg的檔案數量
echo $num;
?>


2017.12.24更新

上面的語法在資料夾內沒有檔案時也會得到數量1的錯誤資訊
正確數量可用以下語法


<?php

    $i = 0; 
    $dir = '資料夾路徑(相對路徑)';
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false){
            if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) 
                $i++;
        }
    }
    echo "資料夾內有 $i 個檔案";

?>

下面的語法也可計算資料夾內的檔案數量
<?php
$Path = '資料夾路徑(相對路徑)'; 
$files = glob($Path . '*', GLOB_MARK); //files 會取得檔案名稱的陣列
echo count($files);
?>

2009年10月25日 星期日

xoops更改tadnews模組新聞文章的排列由新到舊

使用tadnews模組時,遇到發佈出來的新聞,不管怎麼改文章標題都是由舊而新排列的問題,也就是說,最先打得文章應該是排列在晚打得文章後面,但是結果卻是先反的。
再詢問友人後,才得知修改的地方:

Step 1.
xoops下
進入 modules/tadnews/blocks

Step 2.
打開tadnews_page.php
在大約第123行的地方(標記為"//檢查該類別文章"那一段落)

$sql = "select nsn,news_title,start_day,end_day,enable_group,counter from ".$xoopsDB->prefix("tad_news")." where ncsn='{$show_ncsn}' and enable='1' and start_day < '{$today}' and (end_day > '{$today}' or end_day='0000-00-00 00:00:00') order by start_day";
後面加上一個 desc
$sql = "select nsn,news_title,start_day,end_day,enable_group,counter from ".$xoopsDB->prefix("tad_news")." where ncsn='{$show_ncsn}' and enable='1' and start_day < '{$today}' and (end_day > '{$today}' or end_day='0000-00-00 00:00:00') order by start_day desc";

這樣就可以囉!
如果要反向排列就改為 asc

2009年9月14日 星期一

php Date函數參照

$t=time();
echo date("Y-m-d H:i:s",$t);
第一個參數的格式分別表示:
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位數字,若不足二位則前面補零; 如: "01" 至 "31"
D - 星期几,三個英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小時制的小時; 如: "01" 至 "12"
H - 24 小時制的小時; 如: "00" 至 "23"
g - 12 小時制的小時,不足二位不補零; 如: "1" 至 12"
G - 24 小時制的小時,不足二位不補零; 如: "0" 至 "23"
i - 分鐘; 如: "00" 至 "59"
j - 几日,二位數字,若不足二位不補零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位數字,若不足二位則在前面補零; 如: "01" 至 "12"
n - 月份,二位數字,若不足二位則不補零; 如: "1" 至 "12"
M - 月份,三個英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序數,二個英文字母; 如: "th","nd"
t - 指定月份的天數; 如: "28" 至 "31"
U - 總秒數
w - 數字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位數字; 如: "1999"
y - 年,二位數字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"
其它不在上列的字符則直接列出該字符

strtotime("+1 week")

$tomorrow = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));

$lastmonth = mktime (0,0,0,date("m")-1,date("d"), date("Y"));

$nextyear = mktime (0,0,0,date("m"), date("d"), date("Y")+1);

echo date( "Y-m-d H:i:s", mktime (0,0,0,date("m") ,date("d")-7,date("Y")) );

echo date( "Y-m-d H:i:s", mktime (0,0,0,date("m") ,date("d"), date("Y")) );

echo date("Y-m-d",strtotime($date)));

資料來源:php官網

參考網站 : http://my-web-design.blogspot.com/2008/08/php-date.html