台灣最大程式設計社群網站
線上人數
1109
 
會員總數:243964
討論主題:188408
歡迎您免費加入會員
討論區列表 >> PHP >> echo 出來的資料是空的 ??
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
echo 出來的資料是空的 ??
價值 : 30 QP  點閱數:201 回應數:11

樓主

阿南
門外漢
0 38
598 55
發送站內信

大家好 新年快樂
最幾天趁過年假日 一直在實作一個新聞系統
自己想要把php 弄成mvc架構
讓設計端跟程式碼都分開

但我遇到的問題 是在
我若是把下面這一段再包個function content() html碼部份 就一直讀不出資料來
$query_RecBoard = "SELECT `news_id`,`news_title`,`news_content`,`news_hit`,`news_date` FROM `news` WHERE `news_id`=?";

但我拿掉 不包function content() 就可以了
但我往後 一直很想包個function 來作 很多個 controller
請問大家以下 是有何問題嗎?

在我自己的localhost端
http://localhost/news/news_content.php?op=content&news_id=31

輸入後 會出現
Notice: Undefined variable: news_title

但我很確定的是 function content 有被執行
因為更新閱讀次數都有被增加
唯讀 html碼的 資料 印不出來 不曉得是發生何問題
先謝謝大家!


完整程式碼 如下:





html碼部份:



搜尋相關Tags的文章: [ php ] ,
本篇文章發表於2019-02-07 22:07
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

clouding
捐贈 VP 給 clouding 檢舉此回應
不太確定為什麼會這樣

沒看到你這個檔案有 require html 之類的

不過有幾點我覺得可以改善

1. 不要使用 @ 符號,把所有狀況好好判斷處理吧

2. 不要使用 $_REQUEST,用 $_GET 或 $_POST 讓來源變更明確

3. 不要使用 global,這會讓你程式碼變得很混亂

4. 不要使用 bind_result,直接 fetch 放到一個變數裡面吧,$rows = $stmt->fetch();

可以一行一行註解掉,並 var_dump() 去 debug

另外想學 MVC 可以參考這個影片,對你應該會有很大的幫助
https://laracasts.com/series/php-for-beginners
本篇文章回覆於2019-02-08 01:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

阿南
檢舉此回應
clouding 您好 謝謝您的回覆阿 新年快樂

以下是 require這支檔案原始碼 它其實只是一個連結資料庫 的部份
其實主要是 我發現用 switch case 來搭配 function 好像可以比較接近mvc的概念
但用了 function 之後 原本的讀出連線成功後的資料 反而讀不出來 不曉得是哪裡出了問題

謝謝您的幾點建議:

您的第一點 我在自己的本機上有拿掉@
第二點 $_REQUEST 全改成 _GET

第三點 不要用GLOBAL 其實這一點我原本不用GLOBAL的 就是我最近看了一本書 才開始來用 switch case 來搭配 function

而它就是用GLOBAL 來置入 資料庫連線來源 其實我有把 global $db_link; 拿掉 但反而會出錯 找不到連線資源 於是我又放上去了
後來想想 它只是單純連資料庫來源 不寫一些其它雜七雜八的程式 應該是還好

第四點 不要用 bind_result ===> 咦這個語法 是用mysqli prepare 預備語法 然後去綁定多個參數 接著我只要 在html碼 只要echo $xxx 資料就出來了
超好用 所以就一直沿用至今

謝謝您提供影片喔 :)

以下是

本篇文章回覆於2019-02-08 11:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

阿南
檢舉此回應
大家好:
最新情況 發現值 在function 內都可以被讀出來
我若是在 function 括號內的最後面

直接 echo $news_id; 讀出來31
echo $news_title; 讀出來 test
echo $news_content; 讀出來 測市測市123456

但我將 它搬到 html碼 裡卻發生找不到值 請問這是缺乏甚麼呢?
例如在下面這段 卻是找不到值?


本篇文章回覆於2019-02-08 13:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

clouding
捐贈 VP 給 clouding 檢舉此回應


3. 不確定你是買什麼書,不過現在網路上很多很舊的教學,所以所教的不一定就是好的做法,試著別用 global,可以先從簡單的把 $db_link 帶入 content() 之類的解決,進階一點可能就會把這些連線的邏輯封裝在類別裡面,可以看看這個網站,https://phptherightway.com/,裡面也有繁體中文,不過很久沒更新了,或是可以買歐萊里的 現代 PHP 這本書,跟這個網站也是同一個作者。

4. 抱歉我看錯了,以為是 pdo,mysqli 好像是 get_result,就看情況用吧,這邊沒什麼問題。

我在你的 news_content.php 沒有看到哪邊有 html碼耶,你是怎麼顯示這個 html 的?
本篇文章回覆於2019-02-08 14:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

阿南
檢舉此回應
clouding 您好 謝謝您的回覆
您的推薦都好棒:)

html碼 其實就是簡單又單純的html碼
裡面有個table之類
然後echo那個值而已
(但一直沒有資料出來 但echo寫在 function 裡 可以印出來)

html碼:


本篇文章回覆於2019-02-08 22:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

clouding
捐贈 VP 給 clouding 檢舉此回應
哈哈我的意思是說

你的 html 跟 php 是怎麼連上關係的

比如說我有兩個檔案 index.php view.html





本篇文章回覆於2019-02-08 23:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
我看完還是有點搖頭。

1.那個,不要認為將程式碼與樣板分開就是mvc了。

2.不要用狗腿的方式。回答重點問題的答案才是最要緊的。

3.再三強調不要用global。那叫找死的行為,如果你真的要用mvc的話。更是不能用global。

4.學習一下程式縮排處理。


其實你目前看你寫的,都還與mvc扯不上邊的。因為你並未處理好view的輸出方式。還有參數傳送或是繼承方式。
clouding 就是在問你,你的view處理的方式是如何。不過我想你可能還不太明白何由view處理。
你可能是直接用連結然後global來繼承參數值。這樣根本已經不是所謂的mvc了。
本篇文章回覆於2019-02-11 14:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

阿南
檢舉此回應
浩瀚星空 clouding 您們好
我的確是第一次想用mvc來作 php
如有不懂之處 還請您多多見諒阿阿阿阿

1.上面提到的case function 都是我第一次用在一個簡易的新聞單元寫法 主要是在測試 是否這樣的邏輯可以 再用來在其它單元上
2.另外 我本身沒有用global來傳遞參數 是因我偶然看到一本php 書它裡面的 case + Function 原來可以有這樣子不一樣的寫法 才會興起分離測試的念頭

於是 我想用此書的 case 判斷 流程 ==>用它來當 controller
再用 function 去 執行 sql語法 新增 修改 刪除 ==>用它來當 model

而上面提到的global它只是去連線資料庫的部份 因為那本書的function 是有用到global 才會寫到global
可是重點是 此書把所謂的輸出html碼的部份 全都存進一個$變數 再將這個$變數echo 吐出來 這是我想改善它的地方

不過後來 我在想是否 在這個新聞頁面 其實不太需要用到case function 因為感覺它 多了很多寫法
而我也只是想剛好 利用它的case 來當controller function來當model 所以才會衍生岀 提出這個問題

以下是我調整過後的 也其實又回歸到以前了作法 使用 isset $_GET 或 $_POST 來判別 再去對應執行
如果有其它前輩的建議 再麻煩告知 謝謝大家阿

ps:下面的html碼 測試 我是都習慣用table去排版
本身執行時 是用div+css的






本篇文章回覆於2019-02-11 22:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
那,就先教你一下最基本的。
include

相信你對他不陌生才對。

一般來說view的輸出方式,如在mvc的搭配上,不外乎是以下幾種方式

1.include方式:
這是很早期最古老的view的應用方式。因為它有個好處,就是他可以直接繼承程式內的參數。無需將變數值另外存放。


2.eval應用方式:
這算是一種讀檔方式。再利用eval的特性自動去載入變數應用處理。

3.物件緩存接入:
目前大多數的mvc及偽mvc框架,大多都是用物件的方式來做控制。
基本上再效能上,是不會比inlcude的方式要好。(但也相差不大)
但重點是他程式碼容易讀取。為何會這樣說。


如我有一支view.php是屬於樣板的檔

我用
include view.php

跟用
$class->load->view("view.php");

前者我只知道,它插入了一支php。但是function、class還是view則完全不知。
後者我會一目了然明白他是view。

再程式判讀上很容易造成誤解。

上面的你思考一下看看。我是建議你下載個php 框架來學習會比較快。
要自創自已的框架是很好。只是比較不切實際就是了。
(因為我也曾經幹過這種事過)
本篇文章回覆於2019-02-13 17:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
最有價值解答

迷路
捐贈 VP 給 迷路 檢舉此回應
我也來多嘴一下
樓主最初的問題
為什麼把查詢的部分包進function中就無法讀到資料
因為function內外的變數是不共通的
簡單的例子

這就是樓主最初寫法的問題
版上的大大們為何一再強調別用global
因為global是最初的解決方案
簡單的例子

只是加上global就能解決剛剛的問題
這看起來很方便對吧
但是只要程式一多,變數的關係就會因為global而變得十分複雜
讓追蹤變數這件工作變成一場惡夢
所以現在的作法多半是這樣

將變數作為函數的參數傳入
然後將處理後的結果以return傳出
那如果需要傳出多個變數怎麼辦?
偷懶一點可以將所有要傳出的變數包成一個陣列
例如

但是如果想要學好PHP,讓程式將來更有擴充性
建議用class的方式

最後弱弱的說一句
以上這一大堆的內容,都和MVC無關
本篇文章回覆於2019-02-15 09:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

阿南
檢舉此回應
迷路您好
你真的回覆的超棒阿阿阿阿阿
完全解決我心中 一開始的疑惑
非常感恩 高級專家 不藏私的教導
謝謝您 :)
本篇文章回覆於2019-02-15 19:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.