ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => หัวข้อเริ่มโดย: Tricker ใน 17 มกราคม 2013, 01:28:17

ชื่อเรื่อง: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: Tricker ใน 17 มกราคม 2013, 01:28:17
ผมลองศึกาาการเขียนระบบล้อกอินจากเว็บนี้

http://www.thaicreate.com/community/php-mysql-login-form-check-username-password.html

ผมลองเขียนไฟล์ connect.php เพื่อเรียกใช้งานง่ายๆ

<?php
$dbhost "localhost";
$dbuser "root";
$dbpass "1234";
$dbname "sa";

if(!(
$conn mysql_connect($dbhost,$dbuser,$dbpass)))
{
die("Couldn't establish connection to Mysql,database!");
}

if(!
mysql_select_db($dbname))
{
die("Couldn't connect to database $dbname!");
}
mysql_query("SET NAMES UTF8");
?>


ปรากฏว่าไม่ได้ครับ  :wanwan031:

ไม่ทราบว่าเป็นที่เพราะอะไรครับ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: Freedomlover ใน 17 มกราคม 2013, 01:33:36
ที่บอกว่า ไม่ได้  มี error ว่ายังไงบ้างครับ

จาก code  ถ้าไม่มีปัญหาอะไร คือ ไม่แสดงอะไร  เพราะเป็นแค่การเชื่อมต่อเฉยๆ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: dekmv ใน 17 มกราคม 2013, 01:48:14
งมไปเรื่อยๆ.. ถ้ามันเยอะก็ลบแล้วทำที่ละขั้นเลยครับ ...  :wanwan012:
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: Tricker ใน 17 มกราคม 2013, 01:53:55
เออเร่อแบบนี้ครับ
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\sa\connect.php:1) in C:\AppServ\www\sa\check_login.php on line 21

ไฟล์ที่ผมเขียน จะใช้ include(connect.php); แทนในส่วน

mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");

ของแต่ละไฟล์ครับ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: navico ใน 17 มกราคม 2013, 03:37:25
ไฟล์ check_login.php ลองดูว่า session_start(); อยู่บรรทัดไหนครับแล้วเช็คว่า มีการ output ก่อนที่จะมีการเรียกใช้ ฟังก์ชัน sesstion_start() หรือเปล่า
หรือแก้ง่ายๆ โดยเอา session_start(); ไปไว้บรรทัดแรกซะเลย

ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: gubaaball ใน 17 มกราคม 2013, 07:30:10
โค้ดไฟล์นี้ connect.php เอามาให้ดูหมดแล้วหรอครับ error อย่างนี้ไม่ session ก็ cookies หรือคำสั่ง header ครับ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: aunkanbin ใน 17 มกราคม 2013, 07:47:21
เอา session_start ไปไว้บรรทัดแรกแล้ว save ทุกไฟล์เป็น utf-8
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: Tricker ใน 17 มกราคม 2013, 11:47:30
ผมเอา session_start ไปไว้บรรทัดแรกหมดทุกไฟล์แล้วครับ

connect.php

<?php
$dbhost "localhost";
$dbuser "root";
$dbpass "1234";
$dbname "sa";

if(!(
$conn mysql_connect($dbhost,$dbuser,$dbpass)))
{
die("Couldn't establish connection to Mysql,database!");
}

if(!
mysql_select_db($dbname))
{
die("Couldn't connect to database $dbname!");
}
mysql_query("SET NAMES UTF8");
?>


login.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<link rel="stylesheet" type="text/css" href="bootstrap.css" />
</head>

<body>

<form  name="form1" method="post"  action="check_login.php" class="form-search">
  <br><center>Login</center><br>
  <table border="0" style="width: 300px" align="center">
    <tbody>
      <tr>
        <td> &nbsp;Username</td>
        <td>
          <input name="txtUsername" type="text" id="txtUsername" class="input-medium search-query">
        </td>
      </tr>
      <tr>
        <td> &nbsp;Password</td>
        <td><input name="txtPassword" type="password" id="txtPassword" class="input-medium search-query">
        </td>
      </tr>
    </tbody>
  </table>
  <br>
  <center><input type="submit" name="Submit" value="Login" class="btn"></center>
</form>
</body>
</html>


check_login.php
<?
session_start();
require_once("connect.php");
$strSQL = "SELECT * FROM member WHERE Username = '".trim($_POST['txtUsername'])."'
and Password = '".trim($_POST['txtPassword'])."'";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);

echo $strSQL;
if(!$objResult)
{
echo "Username and Password Incorrect!";
}
else
{
$_SESSION["UserID"] = $objResult["UserID"];
$_SESSION["Status"] = $objResult["Status"];

session_write_close();

if($objResult["Status"] == "ADMIN")
{
header("location:admin_page.php");
}
else
{
header("location:user_page.php");
}
}
mysql_close();
?>


admin_page.php
<?
session_start();
if($_SESSION['UserID'] == "")
{
echo "Please Login!";
exit();
}

if($_SESSION['Status'] != "ADMIN")
{
echo "This page for Admin only!";
exit();
}

require_once("connect.php");
$strSQL = "SELECT * FROM member WHERE UserID = '".$_SESSION['UserID']."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
?>
<html>
<head>
<title></title>
</head>
<body>
  Welcome to Admin Page! <br>
  <table border="1" style="width: 300px">
    <tbody>
      <tr>
        <td width="87"> &nbsp;Username</td>
        <td width="197"><?=$objResult["Username"];?>
        </td>
      </tr>
      <tr>
        <td> &nbsp;Name</td>
        <td><?=$objResult["Name"];?></td>
      </tr>
    </tbody>
  </table>
  <br>
  <a href="edit_profile.php">Edit</a><br>
  <br>
  <a href="logout.php">Logout</a>
</body>
</html>
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: aommiez ใน 17 มกราคม 2013, 11:52:25
ตอนนี้ error อะไรอยุ่บ้างครับ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: Tricker ใน 17 มกราคม 2013, 12:08:03
error แบบนี้ครับ

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\sa\connect.php:1) in C:\AppServ\www\sa\check_login.php on line 23
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: pkake2000 ใน 17 มกราคม 2013, 12:11:10
ลองเซฟเป็นแบบ UTF-8+BOM ดูครับ

ผมใช้โปรแกรม Notepad++
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: kobkung ใน 18 มกราคม 2013, 06:28:59
ก็ใส่ @session_start(); ไปแทน

จริงๆ ให้เอา session start เนี่ย ไปวางใน connect.php ส่วนที่อยู่ในไฟล์อื่นก็ลบทิ้งไปสิ
แล้วก็สร้าง head.php ขึ้นมาเพื่อ include connect.php เข้าไปนะ
แล้วหน้าเพจทั่วไป เราก็ include head.php เข้าไปอีกที ยังไง head มันก็ต้องแทรกทุกหน้า

ที่นี้หน้าไหนมีเรียก head.php มันก็เปิดใช้ session ให้เลย
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: aommiez ใน 18 มกราคม 2013, 10:23:58
include ไฟล์ แล้ว session_start มันไปทับกัน หรือเปล่าครับ ถ้าไป start ไฟล์ไหนแล้ว include ไฟล์ที่มัน start อีก ก็จะ error
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: kobkung ใน 18 มกราคม 2013, 21:52:05
ก็ถึงเอาออกไงที่อยู่ไฟล์อื่น เอามาใส่ใน connect ทีเดียวเลย
อีกอย่าง include ให้ใช้ include_once แทน มันจะไม่เรียกซ้ำ
อันนี้เบสิคมากๆ นะ ต้องหาพื้นฐานอ่านเอาแล้ว ไม่ใช่ไล่ทำไปก็ดูเฉพาะที่ทำ
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: tongboss ใน 18 มกราคม 2013, 23:04:49
จาก error แรก
ไม่ทราบว่า ชื่อ db ที่คุณสร้างขึ้นกับที่ สั่งให้ connect เหมือนกันหรือไม่
เพราะ จาก

อ้างถึงจาก: Tricker ใน 17 มกราคม 2013, 01:28:17
<?php
   $dbuser = "root";
   $dbpass = "1234";
   $dbname = "sa";

แต่จาก error แจ้งว่า

อ้างถึงจาก: Tricker ใน 17 มกราคม 2013, 01:53:55
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
ชื่อเรื่อง: Re: ถามเรื่องการเขียนไฟล์ติดต่อกับฐานข้อมูล
โพสต์โดย: lojoman ใน 19 มกราคม 2013, 12:56:30
สาเหตุที่พบบ่อยของ error นี้ คือ
มีการเว้นบรรทัด ก่อนการ session_start
ลงตรวจเช็ค ไฟล์  ทุกไฟล์ที่มี session_start
ว่ามีการเว็นบรรทัดหรือไม่
เช่น


<?php
session_start
();

ถ้ามีการเว้นบรรทัดก่อน <?php --> error แน่นอน

ข้อผิดพลาดประการที่สอง คือ save โดยมี BOM (Byte Order Mark) ติดมาด้วยทำให้จำเป็นต้องเอาออก วิที่การเอาออกคือ
SAVE แบบ เอา bom ออก
โดยการใช้โปรแกรม notepad++
กด Format->Encode in UTF-8 without BOM
หรือถ้าใช้ dream ก่อ ไปหาเอาในส่วนของ Page properties จะมีให้เลือกว่าจะบันทึกแบบไหนอยู่