iT邦幫忙

0

php寫檔問題

img- echo ($row_RecProduct["imgjavascript"])
假如從MySQL抓出 imgjavascript的值 而顯示出img-1~100 之間的值
但是我想要將這項值利用fwrite寫入一個txt檔裡面

"img-" 想加入echo ($row_RecProduct["imgjavascript"])
讓寫入資料裡面都是經由 img-1.img-2 到100的值
但是""裡面沒辦法寫入echo這項php指令 請問需要怎麼解決?

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 6 級 ‧ 2017-10-03 17:09:08 檢舉
$data = "img-{$row_RecProduct["imgjavascript"]}";
file_put_contents("file.name", $data);
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 18:18:55 檢舉
如果需要儲存五筆資料,請問需要怎麼解決
$filename = fopen("nfu.txt","w+"); for($i=0;$i<5;$i++){
$data = "img-{$row_RecProduct["imgjavascript"]},";
file_put_contents("nfu.txt",$data,FILE_APPEND);}
現在會出現 img-1, img-1, img-1, img-1, img-1, 如果想要寫檔成 img-1, img-2, img-3, img-4, img-5, 這樣需要怎麼解決
weiclin iT邦高手 6 級 ‧ 2017-10-03 19:38:45 檢舉
你到底是想要從資料庫讀資料, 還是用 for 迴圈產生資料?
你想用 fopen 還是 file_put_contents?
沒有那種頭抄一半尾抄一半的..
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 19:57:06 檢舉
抱歉,我是希望用file_put_contents來寫,利用資料庫的1-100 與原本設定好的img-做搭配,再來把img1-100做寫檔動作,目前像剛剛所說的現在問題出在能出現5個img-1重複5次,現在是想到是否是用資料庫寫出一個迴圈讓1累加到5?
weiclin iT邦高手 6 級 ‧ 2017-10-03 20:05:58 檢舉
你知道資料庫要怎樣讀取下一筆資料嗎?
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 20:34:16 檢舉
使用mysqli_fetch_assoc($MySQL)呼叫自己定義的變數 假如是 $MySQL= "SELECT * FROM `product` WHERE `imgjavascript` > 0 AND `imgjavascript` < 7";
weiclin iT邦高手 6 級 ‧ 2017-10-03 21:04:21 檢舉
ok, 那我隨手打一打, 不能跑的話你就照這個邏輯去修一下 bug
$data = "";
while ($row = mysql_fetch_assoc($result))
{
$data .= "img-{$row["imgjavascript"]}\n";
}
file_put_contents("file.name", $data);
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 21:16:40 檢舉
如果是程式的話:
if(isset($_GET["cid"])&&($_GET["cid"]!=""))
{
$query_RecProduct = "SELECT * FROM `product` WHERE `categoryid`=".$_GET["cid"]." ORDER BY `productid` DESC";

}
elseif(isset($_GET["keyword"])&&($_GET["keyword"]!=""))
{
$query_RecProduct = "SELECT * FROM `product` WHERE `Singername` LIKE '%".$_GET["keyword"]."%' OR `description` LIKE '%".$_GET["keyword"]."%' ORDER BY `productid` DESC";

}
else
{
$query_RecProduct = "SELECT * FROM `product` ORDER BY `productid` DESC";
}
$query_limit_RecProduct = $query_RecProduct." LIMIT ".$startRow_records.", ".$pageRow_records;

$RecProduct = mysqli_query($kon,$query_limit_RecProduct);
上面是搜尋之後會限制資料的筆數
$row_RecProduct=mysqli_fetch_assoc($RecProduct);
while($row_RecProduct=mysqli_fetch_assoc($RecProduct)){
<img id = img- $row_RecProduct["imgjavascript"] >
}
while迴圈內會依序一張圖片對應一個img-1,我是希望把這img-1~100的id,當友圖片出現的時候將圖片的id寫在一個txt檔裡面
weiclin iT邦高手 6 級 ‧ 2017-10-03 21:40:56 檢舉
嗯, 如果你有看懂我上面那一段, 你應該就有辦法完成了
另外提醒一下你的 while 前面這一行會害你少讀一筆資料: $row_RecProduct=mysqli_fetch_assoc($RecProduct);
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 21:42:34 檢舉
我現在有做出來,但是現在少了3筆資料
pigs0231 iT邦新手 5 級 ‧ 2017-10-03 21:52:06 檢舉
現在是有一點搞不太懂為什麼會缺少3筆資料,
當我前面使用while($row_RecProduct=mysqli_fetch_assoc($RecProduct)){
}的時候 能夠抓取前4筆的圖片,連結,編號
但是當寫了while ($row= mysqli_fetch_assoc($RecProduct))
{ $data .= "img-{$row["imgjavascript"]} ";}
之後卻只能顯示出一筆資料 ,這邊搞不太懂
小魚 iT邦研究生 4 級 ‧ 2017-10-04 00:37:49 檢舉
我猜,你跑了4次但只有1個變數,所以一直覆蓋那個變數
(但是看起來你有用.啊)
newkevin iT邦高手 1 級 ‧ 2017-10-04 07:31:19 檢舉
請教 有無錯誤 或其他可能
複習
印象中以前列印時
B覆蓋A
列印變數時 B在覆蓋之前 就列印出來
就是同一個變數 A
列印變數時 B在覆蓋之後 但讀不到覆蓋的變數
也是同一個變數 A
聯想
列印變數時 當變數存入資料庫 也沒覆蓋
但永遠讀同一筆資料沒讀下一筆
newkevin iT邦高手 1 級 ‧ 2017-10-04 10:03:56 檢舉
喔 還有一種 只讀到最後一筆

1 個回答

1
weiclin
iT邦高手 6 級 ‧ 2017-10-03 23:34:21
最佳解答

你把你能抓到四筆的程式, 跟只能顯示一筆的程式都貼出來看看
我還是用回答的好了, 討論沒辦法用程式碼語法...

看更多先前的回應...收起先前的回應...
pigs0231 iT邦新手 5 級 ‧ 2017-10-04 03:07:52 檢舉

預設每一頁6筆數目
$pageRow_records = 6;
預設頁數
$num_pages = 1;
若有翻頁將頁數更新
if (isset($_GET['page']))
{
$num_pages = $_GET['page'];
}
此頁開始記錄筆數
$startRow_records = ($num_pages -1) * $pageRow_records;
分類關鍵字未限制顯示筆數
if(isset($_GET["cid"])&&($_GET["cid"]!=""))
{
$query_RecProduct = "SELECT * FROM product WHERE categoryid=".$_GET["cid"]." ORDER BY productid DESC";
}
有關鍵字為加限制線是筆數
elseif(isset($_GET["keyword"])&&($_GET["keyword"]!=""))
{
$query_RecProduct = "SELECT * FROM product WHERE Singername LIKE '%".$_GET["keyword"]."%' OR description LIKE '%".$_GET["keyword"]."%' ORDER BY productid DESC";
}
預設狀況下為加限制顯示筆數
else
{
$query_RecProduct = "SELECT * FROM product ORDER BY productid DESC";
}加上限制顯是筆數
$query_limit_RecProduct = $query_RecProduct." LIMIT ".$startRow_records.", ".$pageRow_records;
查詢限制資料
$RecProduct = mysqli_query($kon,$query_limit_RecProduct);
取出資料
$row_RecProduct=mysqli_fetch_assoc($RecProduct);


while($row_RecProduct=mysqli_fetch_assoc($RecProduct)){ ?>

超連結>>" echo ($row_RecProduct["description"]);
顯示圖片
if($row_RecProduct["productimages"]==""){
src="images/nopic.png" alt="暫無圖片" width="120" height="120" border="0"
}
else{
圖片位置: img src="singer/ echo $row_RecProduct["productimages"];
圖片編號:
id="img- echo ($row_RecProduct["imgjavascript"])
onclick="imghotkey()" width="135" height="135" border="0"
}
超連結:echo ($row_RecProduct["description"]);
圖片歌手編號 $row_RecProduct["productid"];?>">
圖片歌手名子 echo $row_RecProduct["Singername"];
圖片歌手取名 $row_RecProduct["singersongname"];?>
--
存取資料的
$data = "img-{$row_RecProduct["imgjavascript"]} ";
while ($row_RecProduct = mysqli_fetch_assoc($RecProduct))
{
$data .= "img-{$row_RecProduct["imgjavascript"]}\n";
}
file_put_contents("nfu.txt", $data);


當寫了
while ($row_RecProduct = mysqli_fetch_assoc($RecProduct))
{
$data .= "img-{$row_RecProduct["imgjavascript"]}\n";
}
原本有4筆資料的圖片就會指出現1筆資料的

因為有配合Javascript的應用,所以需要將幾筆資料的圖片都顯示出來

weiclin iT邦高手 6 級 ‧ 2017-10-04 09:46:53 檢舉

回應這邊底下有個 Markdown 常用語法可以參考
你要貼程式的時候前後加上:
```
你的程式
```

會是這個效果:

while ($row_RecProduct = mysqli_fetch_assoc($RecProduct))
{
    $data .= "img-{$row_RecProduct["imgjavascript"]}\n";
}

回過頭來, 你這裡是錯的, 這點上面已經跟你提過了:

// 取出資料
$row_RecProduct=mysqli_fetch_assoc($RecProduct);
// 忽略上面取出的資料, 繼續取出下一筆資料???
while($row_RecProduct=mysqli_fetch_assoc($RecProduct)){ ?>

然後你在這個 while 迴圈裡已經把資料跑完了, 底下用來寫資料的 while 迴圈當然什麼都沒有跑到, 所以你就只拿到最後一筆資料了

你應該要好好的搞清楚每一行程式是在做什麼的, 像你這樣撞牆式的寫程式, bug 會多到數不清

pigs0231 iT邦新手 5 級 ‧ 2017-10-04 10:03:53 檢舉

也就是說當我把原本的While迴圈要將圖片、編號那些寫出來時

while($row_RecProduct=mysqli_fetch_assoc($RecProduct)){ ?>

超連結>>" echo ($row_RecProduct["description"]);
顯示圖片
if($row_RecProduct["productimages"]==""){
src="images/nopic.png" alt="暫無圖片" width="120" height="120" border="0"
}

但是又在內部寫一個存取資料但是已經將整個資料跑完的過程,所以才只會顯示出一筆資料嗎?

$data = "img-{$row_RecProduct["imgjavascript"]} ";
while ($row_RecProduct = mysqli_fetch_assoc($RecProduct))
{
$data .= "img-{$row_RecProduct["imgjavascript"]}\n";
}
file_put_contents("nfu.txt", $data);
weiclin iT邦高手 6 級 ‧ 2017-10-04 10:14:14 檢舉

你少打一個 `, 右上有預覽可以看

你的問題是這樣:

while ($row_RecProduct = mysqli_fetch_assoc($RecProduct)) {
    // 輸出網頁...
}

while ($row_RecProduct = mysqli_fetch_assoc($RecProduct)) {
    // 寫資料到檔案...
    //但是資料早就被讀完了所以 while 不會跑
}

你在第一個 while 已經把資料都讀完了, 所以第二個 while 就是空的完全不會執行

你應該這樣做:

$data = "";// 空字串, 別再塞東西給他了
while ($row_RecProduct = mysqli_fetch_assoc($RecProduct)) {
    // 輸出網頁
    // 略..
    
    // 紀錄資料
    $data .= $row_RecProduct["....."];
}

// 寫檔案
file_put_content("file", $data);
pigs0231 iT邦新手 5 級 ‧ 2017-10-04 10:34:45 檢舉

恩 經過你的指點,我已經知道為什麼會出現這問題了,謝謝

weiclin iT邦高手 6 級 ‧ 2017-10-04 15:46:58 檢舉

你這程式要上線, 至少還得改掉 SQL Injection 的漏洞

froce iT邦新手 2 級 ‧ 2017-10-05 00:13:19 檢舉

我只能說,請愛用框架...
用框架至少該注意的基本安全性問題都會幫你解決。

我要發表回答

立即登入回答