iT邦幫忙

0

<問題>php連接不到

  • 分享至 

  • xImage

(更新回覆一下)
1.php最好包在body中,
回覆:是這樣改嗎?
https://ithelp.ithome.com.tw/upload/images/20210605/20137743nbe6UJAUno.png
2.(1) 建議你留意一下 Coding Style,還有 html 規範。
(2) 網頁原始碼建議直接貼上來,不要用截圖。MySql 也是不要用截圖,改匯出成 .sql
檔案貼上來。
回覆:第一點:我有點不太清楚是什麼意思
第二點:的話我有匯出檔案但在這我不太清楚怎麼附上來。
3.(1)IDE建議選用Sublime Text,裝個phpfmt,可以有效的對齊你的代碼
(2)查詢密碼的時候不需要查出所有紀錄再做匹配,可以直接"select * from login
where id = $id and pwd = $pwd"
(3)能打開login.php,說明伺服器沒有問題,出問題的應該是代碼,看上去像是數據庫沒有紀
錄或者數據庫連接失敗導致的,MAMP 基礎版默認的MYSQL端口是8889,不知道你有沒有更
換,如果沒有更換,建議更換一下,具體見圖片,如果不想改的話,可以修改第21
行:mysql_connect('localhost:8889','root','root');
(4)建議打開PHP的錯誤日誌,方便Debug,具體不贅述
回覆:第一點:我有安裝了phpfmt了,但實體上我不太清楚怎麼使用...
第二點:是這樣修改嗎?
https://ithelp.ithome.com.tw/upload/images/20210605/20137743CEvHQoaW13.png
第三點:我有修改了port了,但是好像還是沒有解決
https://ithelp.ithome.com.tw/upload/images/20210605/20137743x0oJLfdP0a.png
https://ithelp.ithome.com.tw/upload/images/20210605/20137743ugqFO1J0Q6.png
第四點:是這裡嗎?
https://ithelp.ithome.com.tw/upload/images/20210605/201377431OtWQgOa0Q.png

以上謝謝各位大大的回覆,我會盡我所能嘗試。因為本身有點菜,所以能理解的不太多...


我是學校專題製作,以下東西在windows底下都可以正常運作。但是本身服役的筆電是Mac,所以想嘗試把東西放在Mac底下使用。

我的問題是以下:
我使用的後端是MAMP(版本:6.3)
https://ithelp.ithome.com.tw/upload/images/20210524/20137743N7Gh8t9Ykd.png
https://ithelp.ithome.com.tw/upload/images/20210524/20137743iQVHqsbzjv.png
這是我前段的樣子,問題在是我右下的網頁。
我有打php的程式在網頁底下,但是無法連接到我的php
https://ithelp.ithome.com.tw/upload/images/20210524/20137743f8Dbssgewu.png
我資料庫也有我放的資料庫跟表在系統裡面
https://ithelp.ithome.com.tw/upload/images/20210524/20137743sIEswwf6x3.png

RayLiu iT邦新手 2 級 ‧ 2021-05-24 09:13:52 檢舉
php最好包在body中
haward79 iT邦研究生 1 級 ‧ 2021-05-25 17:36:40 檢舉
(1) 建議你留意一下 Coding Style,還有 html 規範。
(2) 網頁原始碼建議直接貼上來,不要用截圖。MySql 也是不要用截圖,改匯出成 .sql 檔案貼上來。
hsing iT邦新手 5 級 ‧ 2021-06-05 22:48:03 檢舉
我有回應在上面了,不好意思麻煩了~~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
akss5768
iT邦新手 5 級 ‧ 2021-05-24 10:13:06
最佳解答

1.IDE建議選用Sublime Text,裝個phpfmt,可以有效的對齊你的代碼
2.查詢密碼的時候不需要查出所有紀錄再做匹配,可以直接"select * from login where id = $id and pwd = $pwd"
3.能打開login.php,說明伺服器沒有問題,出問題的應該是代碼,看上去像是數據庫沒有紀錄或者數據庫連接失敗導致的,MAMP 基礎版默認的MYSQL端口是8889,不知道你有沒有更換,如果沒有更換,建議更換一下,具體見圖片,如果不想改的話,可以修改第21行:mysql_connect('localhost:8889','root','root');
4.建議打開PHP的錯誤日誌,方便Debug,具體不贅述
https://ithelp.ithome.com.tw/upload/images/20210524/20137685KFnWlMbJWO.png

hsing iT邦新手 5 級 ‧ 2021-06-05 22:45:27 檢舉

3.(1)IDE建議選用Sublime Text,裝個phpfmt,可以有效的對齊你的代碼
(2)查詢密碼的時候不需要查出所有紀錄再做匹配,可以直接"select * from login
where id = $id and pwd = $pwd"
(3)能打開login.php,說明伺服器沒有問題,出問題的應該是代碼,看上去像是數據庫沒有紀
錄或者數據庫連接失敗導致的,MAMP 基礎版默認的MYSQL端口是8889,不知道你有沒有更
換,如果沒有更換,建議更換一下,具體見圖片,如果不想改的話,可以修改第21
行:mysql_connect('localhost:8889','root','root');
(4)建議打開PHP的錯誤日誌,方便Debug,具體不贅述
回覆:第一點:我有安裝了phpfmt了,但實體上我不太清楚怎麼使用...
第二點:是這樣修改嗎?
https://ithelp.ithome.com.tw/upload/images/20210605/20137743CEvHQoaW13.png
第三點:我有修改了port了,但是好像還是沒有解決
https://ithelp.ithome.com.tw/upload/images/20210605/20137743x0oJLfdP0a.png
https://ithelp.ithome.com.tw/upload/images/20210605/20137743ugqFO1J0Q6.png
第四點:是這裡嗎?
https://ithelp.ithome.com.tw/upload/images/20210605/201377431OtWQgOa0Q.png

0
haward79
iT邦研究生 1 級 ‧ 2021-06-06 15:13:16

html 規範

你可以試著這樣理解:html 的語法是被制定出來的,隨著時代的演進,html 可能也會有所變動,因此會有許多不同的「版本」。目前最新也是最流行的是 html 5(html 第五版)。

可以參考: html5 vs html4

建議你遵循 html 已經制定好的語法規範來撰寫網頁,雖然很多時候不按照語法規範來寫網頁,網頁還是會正常呈現,但是事後卻常常衍生出更多問題,因此建議養成遵循既定規範來寫 html。甚至是 css、JavaScript、php 等都有各自的語法規範,因此建議你都可以找時間了解看看。

舉個例子來說好了,以下是一個遵循 html 5 規範的網頁基本要有的東西:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>首頁</title>
    </head>
    
    <body>
        <p>
            哈囉,世界<br />
            世界,哈囉
        </p>
    </body>
</html>

MySQL 資料庫匯出

既然已經把資料庫的東西匯出成 .sql 檔案,你可以傳到雲端再放分享連結到這邊來。
也可以選擇把 .sql 檔案中的 SQL syntax 直接複製貼上到這邊,但是別忘了放到程式碼的區域。

看更多先前的回應...收起先前的回應...
hsing iT邦新手 5 級 ‧ 2021-06-06 15:26:42 檢舉

html 規範
我會在花時間了解看看!!
謝謝~~

MySQL 資料庫匯出
雲端:
https://drive.google.com/file/d/1zn4UkhjPvxN3liUrdt-NTva2wlQm347s/view?usp=sharing

.sql 檔案中的 SQL syntax:

-- phpMyAdmin SQL Dump
-- version 2.11.0
-- http://www.phpmyadmin.net
--
-- 主機: localhost
-- 建立日期: May 14, 2021, 08:41 AM
-- 伺服器版本: 5.0.45
-- PHP 版本: 5.2.4

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- 資料庫: `infonet`
--
CREATE DATABASE `infonet` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `infonet`;

-- --------------------------------------------------------

--
-- 資料表格式: `login`
--

CREATE TABLE `login` (
  `id` varchar(12) NOT NULL,
  `pwd` varchar(12) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- 列出以下資料庫的數據: `login`
--

INSERT INTO `login` (`id`, `pwd`) VALUES
('admin', '123123'),
('root', 'root'),
('123', '123');

-- --------------------------------------------------------

不好意思再麻煩了~~

haward79 iT邦研究生 1 級 ‧ 2021-06-06 15:49:28 檢舉

所以你之前發問的問題還沒解決嗎?
如果還沒的話,你網頁的 code 再貼一下吧!

hsing iT邦新手 5 級 ‧ 2021-06-06 16:54:25 檢舉

對的
網頁的 code:

<html>
<meta charset="utf-8">
<body bgcolor=#8C4ABC text=#5A2F7A>
	<font size = +3>
		<marquee behavior=alternate width=800> 即時資訊網登入系統 </marquee>
	</font>
	<form method ="post" action=""><br>
		帳號:<br>
		<input type = "text" name = "id" size = "16" maxlength = "12"><br>
		密碼:<br>
		<input type = "password" name = "pwd" size = "16" maxlength = "8"><br>
		<input type = "submit" name = "sub" value = "登入">
		<input type = "submit" name = "sub" value = "註冊"><br>
	</form>
 	<?php
error_reporting(0);
$id = $_POST['id'];
$pwd = $_POST['pwd'];
$sub = $_POST['sub'];
if ($sub == "註冊") {
    echo "<script> window.open('register.php','rf') </script>";
}
mysql_connect('localhost:8889', 'root', 'root');
$r = mysql_db_query(infonet, "select * from login where id = $id and pwd = $pwd");
$test = 0;
while ($row = mysql_fetch_array($r)) {
    if ($id == $row['id'] && $pwd == $row['pwd']) {
        $test = 1;
    }
}
if ($id == "" || $pwd == "") {
    echo "請輸入帳號或密碼";
} elseif ($test > 0) {
    echo "<script type='text/javascript'>";
    echo "window.open('left1.html','lf')";
    echo "</script>";
    echo "<script type='text/javascript'>";
    echo "window.open('0.html','rf')";
    echo "</script>";
} else {
    echo "帳號或密碼錯誤!!!";
}
?>
 </body>
</html>

不好意思再麻煩了~~

hsing iT邦新手 5 級 ‧ 2021-06-06 16:57:41 檢舉

對了,我剛剛有去看一下參考網頁的老師他YouTube影片。那個老師是用Visual Studio Code 在寫網頁的,那想問一下說那個App也可以使用後端嗎?我有看到他有插件有php的,那是一樣可以建後端的嗎?

haward79 iT邦研究生 1 級 ‧ 2021-06-07 01:23:00 檢舉

hsingli0328
是的 vscode 也能做後端,基本上前後端都可以,支援很多程式語言,只是要裝一下擴充套件。我自己也是慣用 vscode 來寫網頁前後端!

haward79 iT邦研究生 1 級 ‧ 2021-06-07 02:03:57 檢舉

hsingli0328

Overview

有些部份是我看不太順眼,所以順手修正,並不是造成錯誤的主因(但是還是建議修正,理由就是之前提過的規範等)。

以下是修正後的 code,我實際測試是能夠執行的。

<!doctype html>

<html>
    <head>
        <meta charset="utf-8" />
        <title>TEST</title>
    </head>

    <body bgcolor=#8C4ABC text=#5A2F7A>
        <font size=+3>
            <marquee behavior=alternate width=800> 即時資訊網登入系統 </marquee>
        </font>

        <form method="post" action="test.php">
            <br>

            帳號:<br>
            <input type="text" name="username" size="16" maxlength="12"><br>

            密碼:<br>
            <input type="password" name="password" size="16" maxlength="8"><br>

            <input type="submit" name="login" value="登入">
            <input type="submit" name="signup" value="註冊"><br>
        </form>

        <?php
            error_reporting(0);

            $username = $_POST['username'];
            $password = $_POST['password'];

            if(isset($_POST['signup']))
            {
                echo '<script>alert("導向註冊頁面 ......");</script>';
                // echo "<script> window.open('register.php', 'rf') </script>";
            }
            else if(isset($_POST['login']))
            {
                if($username == '' || $password == '')
                {
                    echo "請輸入帳號或密碼";
                }
                else
                {
                    $dbCon = mysqli_connect('hostname', 'username', 'password', 'infonet');
                    $dbResult = mysqli_query($dbCon, "SELECT * FROM login WHERE id = '$username' AND pwd = '$password';");

                    if(mysqli_num_rows($dbResult) > 0)
                    {
                        echo '<script>alert("登入成功 ......");</script>';

                        /* echo "<script type='text/javascript'>";
                        echo "window.open('left1.html','lf')";
                        echo "</script>";
                        echo "<script type='text/javascript'>";
                        echo "window.open('0.html','rf')";
                        echo "</script>"; */
                    }
                    else
                        echo "帳號或密碼錯誤!!!";
                }
            }
        ?>
    </body>
</html>

Problems

基本上你的 code 有一些嚴重的問題導致你的程式不如你想的執行。

  1. SQL 語法中,字串應該用單引號或雙引號包起來,但是你沒有包。
  2. 你原本使用的 mysql_db_query() 用法有誤,所就改用我自己慣用的 mysqli_query() 來取代了。如果你堅持要用 mysql_db_query 也可以,不過你要再去搞清楚語法,php 官方有 reference 可以去看。
  3. 你從 SQL 取帳號密碼的資料回來後,只需要判斷是否有回傳結果(回傳的 row 數量有沒有大於 0 就好),如果有就表示有匹配的帳號密碼,如果沒有就表示沒有匹配的帳號密碼。所以不需要再像你原本的 code 裡面去把回傳的資料一筆一筆抓出來檢查,那其實是多此一舉,因為 SQL 早就幫你判斷過了,那些都是匹配的帳號密碼!

Suggesstions

針對你的 code 有一些建議,你可以參考。

  1. html 和 css 的規範你自己再研究一下,不再多談。
  2. SQL 語法基本上是 case-insensitive,所以你原本用小寫是可以的,只是我習慣用大寫,所以我的 code 裡面是寫大寫。你關鍵的錯誤是字串值的地方沒用引號!
  3. php 的 mysql_xxxx() 已經被 php 官方棄用,建議直接改用 mysqli_xxxx() 來取代。
  4. 你原本登入成功後、點選註冊後會執行一段 js,不過我偷懶所以用 alert() 來做測試,那邊你再自己處理吧!
  5. 善用 php 的 isset 檢查變數是否已經設定,不然之後在某些情況下會噴很多 error,你可能會抓狂。
  6. 開發程式時 error_reporting() 建議打開,因為當程式出錯時才能直接看到錯誤,你把他關掉的話,每次程式出錯你都看不到錯誤訊息,我不太清楚這樣你要如何 debug。
  7. 你的資料庫應該是你自學的吧?有興趣的話可以研究一下 encoding、data type、key .....。還有,如果之後要登大檯面,密碼請不要使用明碼儲存。

我要發表回答

立即登入回答