ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingช่วยดูโค้ด php ให้ผมทีครับ จะโพสบทความแล้วเก็บใน mysql มันมีปัญหากับการเก็บ "หมวดหมู่" ครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ช่วยดูโค้ด php ให้ผมทีครับ จะโพสบทความแล้วเก็บใน mysql มันมีปัญหากับการเก็บ "หมวดหมู่" ครับ  (อ่าน 1246 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
fogza
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 97
ออฟไลน์ ออฟไลน์

กระทู้: 1,307



ดูรายละเอียด
« เมื่อ: 06 สิงหาคม 2011, 22:32:25 »


administrator_post.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>Tour THAI | แหล่งท่องเที่ยวของไทย</title>
<link rel="stylesheet" href="css/constant.css" type="text/css" />
<link rel="stylesheet" href="css/template_admin.css" type="text/css" />
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>

</head>
<!-- /////////////////////////////////////////////////////////////// -->
<body>
<?
include("config.inc.php");

$strSQL = "SELECT category FROM category ORDER BY 1";
$objQuery = mysql_query($strSQL) or die(mysql_error());
?>
<div id="wrapper">
<!-- Header -->
<div id="header">header</div>
<!-- /Header -->

<!-- Main Content -->
<div id="main-content">
<div id="sidebar-left"><!-- Sidebar Left -->
<h2>เมนู</h2>
<div class="menu">
<ul>
<li><a href="administrator.php">หน้าหลัก</a></li>
<li><a href="index.php" target="_blank">ชมเว็บไซต์</a></li>
<li><a href="administrator_post.php">โพสบทความ</a></li>
<li><a href="administrator_category.php">เพิ่มหมวดหมู่</a></li>
</ul>
</div>
<!-- /Sidebar Left -->
</div>
<div id="content"><!-- Content -->
<form method="POST" action="check_article.php">
<table>
เรื่อง: <input name="title" type="text" style="width:500px;" /><br />
หมวดหมู่ : <select name="category" style="width:100px;">
<?
while($categoryResult = mysql_fetch_array($objQuery)){
echo "<option value=$categoryResult[category]>$categoryResult[category_article]</option>";
}?>
</select>
เพิ่มหมวดหมู่ใหม่ : <input name="categoryNew" type="text" maxlength="20"/><br />
เนื้อหา:
<textarea id="details" name="details" class="ckeditor"></textarea><br />
แท็ก: <input name="tag" type="text" style="width:500px;" /><br /><br />
<input name="userid" type="hidden" />

<input name="submit" type="submit" value="ตกลง" style="width:80px; height: 30px;"/>
<input name="reset" type="reset" value="เริ่มใหม่" style="width:80px; height: 30px;"/>
</table>
</form>
</div>
<!-- /Content -->
</div><!-- /Main Content -->

<!-- Footer -->
<div id="footer">footer</div>
<!-- /Footer -->
</div><!-- /Wrapper -->
</body>
<!-- /////////////////////////////////////////////////////////////// -->
</html>

check_article.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>Tour THAI | แหล่งท่องเที่ยวของไทย</title>
</head>
<!-- /////////////////////////////////////////////////////////////// -->
<body>
<?
include("config.inc.php");
$category = $_POST['category'];

$strSQL = "SELECT category_id FROM category WHERE category = $category"; //เรียก category_id
$objQuery = mysql_query($strSQL) or die(mysql_error());
$num_rows = mysql_num_rows($objQuery); //ดึงจำนวนแถวทั้งหมด

$date_post=date('l, j-m-Y, H:i:s A'); // วันเดือนปี เวลาที่โพสบทความ

if(empty($_POST['category']) && empty($_POST['categoryNew'])){ //ถ้าที่หมวดหมู่เดิม และ หมวดหมู่ใหม่ ไม่มีข้อมูล
echo "<SCRIPT>alert('กรุณาระบุข้อมูลให้ครบ');history.back(-1);</script>";
return false;

} elseif($_POST['category'] != null && empty($_POST['categoryNew'])) { //ถ้าใน linklist มีข้อมูล และ หมวดหมู่ใหม่ ไม่มีข้อมูล
//เพิ่มข้อมูลการโพสใหม่ในตาราง article
if($num_rows == 1){ //ถ้ามีแถว = 1
$category_id = mysql_fetch_assoc($objQuery);
$strArticle = "INSERT INTO article (post_id, user_id, category_id, post_title, post_details, post_datetime, tag) VALUE ('NULL', '$_POST['userid']', $category_id['category_id'], '$_POST['title']', '$_POST['details']', '$date_post', '$_POST['tag']')";
$objArticle = mysql_query($strArticle) or die ("ไม่สามารถติดต่อฐานข้อมูลเพื่อเพิ่มข้อมูลการโพสได้");
}

if($objCategory && $objArticle){
echo "บันทึกข้อมูลเรียบร้อย <br> กรุณารอซักครู่ ระบบกำลังพาท่านไปยังหน้าที่ผ่านมา...";
} else {
echo "!!!Error Save [".$strCategory."] <br> [".$strArticle."]";
exit();
}

} elseif(empty($_POST['category']) && $_POST['categoryNew'] != null) { //ถ้าใน linklist ไม่มีข้อมูล และ หมวดหมู่ใหม่มีข้อมูล
$strSQL = "SELECT category FROM article WHERE category='$_POST['category'] ";
$objQuery = mysql_query($strSQL) or die("ติดต่อฐานข้อมูลเพื่อตรวจสอบหมวดหมู่ไม่ได้");
$numrow = mysql_num_rows($objQuery);

if($numrow != 0){ //ตรวจสอบความซ้ำกันของหมวดหมู่
echo "<SCRIPT>alert('"$_POST['category']" หมวดหมู่ซ้ำ!');history.back(-1);</script>";
exit();
}
//เพิ่มหมวดหมู่ใหม่ในตาราง category
$strCategory = "INSERT INTO category (category_id, category) VALUE ('NULL', '$_POST['categoryNew']')";
$objCategory = mysql_query($strCategory) or die ("ไม่สามารถติดต่อฐานข้อมูลเพื่อเพิ่มหมวดหมู่ได้");
//เพิ่มข้อมูลการโพสใหม่ในตาราง article
if($num_rows == 1){
$category_id = mysql_fetch_assoc($objQuery);
$strArticle = "INSERT INTO article (post_id, user_id, category_id, post_title, post_details, post_datetime) VALUE ('NULL', '$_POST['userid']', $category_id['category_id'], '$_POST['title']', '$_POST['details']', '$date_post')";
$objArticle = mysql_query($strArticle) or die ("ไม่สามารถติดต่อฐานข้อมูลเพื่อเพิ่มข้อมูลการโพสได้");
}

if($objCategory && $objArticle){
echo "บันทึกข้อมูลเรียบร้อย <br> กรุณารอซักครู่ ระบบกำลังพาท่านไปยังหน้าที่ผ่านมา...";
} else {
echo "!!!Error Save [".$strCategory."] <br> [".$strArticle."]";
exit();
}
}
mysql_close($objConnect);
?>
</body>
<!-- /////////////////////////////////////////////////////////////// -->
</html>
มันขึ้นเออเร่อแบบนี้ครับ
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:AppServwwwtourthaicheck_article.php on line 28

คือตอนโพส ถ้าใส่ข้อมูลตรง "หมวดหมู่ใหม่" ระบบก็จะเพิ่ม "หมวดหมู่ใหม่" ลงในตารางของ category และเก็บ category_id ไว้ในตาราง article

มันมีอยู่ 3 เงื่อนไขคือ
อ้างถึง
1. if(empty($_POST['category']) && empty($_POST['categoryNew'])) //ถ้าหมวดหมู่เดิม และ หมวดหมู่ใหม่ ไม่มีข้อมูล

2. elseif($_POST['category'] != null && empty($_POST['categoryNew'])) //ถ้าใน linklist มีข้อมูล และ หมวดหมู่ใหม่ ไม่มีข้อมูล

3. elseif(empty($_POST['category']) && $_POST['categoryNew'] != null) //ถ้าใน linklist ไม่มีข้อมูล และ หมวดหมู่ใหม่มีข้อมูล

แต่ผมลองใส่ข้อมูลลงไปใน "หมวดหมู่ใหม่" มันดันเข้าเงื่อนไขที่ 2 ซึ่งจริงๆ มันสมควรที่จะเข้าเงื่อนไขที่ 3 นะครับ
ช่วยดูให้ทีนะครับ ว่ามันผิดที่ line 28 มันผิดที่อะไรนะครับ
ขอบคุณมากๆ ครับ wanwan017
บันทึกการเข้า

:: สังคมจะดีได้ อยู่ที่เราทุกคน ไม่ใช่แค่ใครคนใดคนหนึ่ง ::
marknary
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 273
ออฟไลน์ ออฟไลน์

กระทู้: 1,134



ดูรายละเอียด
« ตอบ #1 เมื่อ: 06 สิงหาคม 2011, 22:36:15 »

น่าจะเป็นที่ตัวนี้ครับ
$_POST['userid']
$category_id['category_id']
$_POST['title']
$_POST['details']
ใน statment นี้
$strArticle = "INSERT INTO article (post_id, user_id, category_id, post_title, post_details, post_datetime, tag) VALUE ('NULL', '$_POST['userid']', $category_id['category_id'], '$_POST['title']', '$_POST['details']', '$date_post', '$_POST['tag']')";

วิธีแก้ให้เก็บไว้ค่านี้ไว้ที่ตัวแปรอื่นก่อนแล้วค่อยนำมาใช้
$uid=$_POST['userid'];
$catid=$category_id['category_id'];
$tt=$_POST['title'];
$detail=$_POST['details'];
$tag=$_POST['tag'];

คือ ' เป็นอักษระพิเศษครับ เวลาจะเอาไปใส่ใน '' จะได้ต้องมี \' นำด้วย

« แก้ไขครั้งสุดท้าย: 06 สิงหาคม 2011, 22:41:26 โดย marknary » บันทึกการเข้า
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #2 เมื่อ: 06 สิงหาคม 2011, 22:48:05 »

ใช้ {ครอบ} เอาก็ได้คับ

โค๊ด:
<?php

$strArticle 
"INSERT INTO article (post_id, user_id, category_id, post_title, post_details, post_datetime, tag) VALUE ('NULL', '{$_POST['userid']}', {$category_id['category_id']}, '{$_POST['title']}', '{$_POST['details']}', '$date_post', '{$_POST['tag']}')";



แต่ เอา $_POST ใส่ใน query สดๆแบบนี้จะดีหรือ
บันทึกการเข้า

fogza
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 97
ออฟไลน์ ออฟไลน์

กระทู้: 1,307



ดูรายละเอียด
« ตอบ #3 เมื่อ: 06 สิงหาคม 2011, 22:54:21 »

อ๋อ คือถ้าไม่กำหนดตัวแปร เราก็ต้องเขียนประมาณนี้หรือปล่าวครับ
$strArticle = "INSERT INTO artile(xxx) VALUE ('\"$_POST['category']\")"; แบบนี้ใช่ไหม๋ครับ

ผมเคยเขียนแบบนี้ครับ
foreach($_POST as $Arrs => $value){
	
	
$m[$Arrs] = $value;
	
}
แล้วเก็บค่าแบบนี้
.....VALUES ('$m[username]')";
ไม่ทราบว่าเขียนแบบนี้เหมาะสมไหมครับ พอดีผมคิดว่า ถ้ามีค่าที่ส่งมาเยอะ เราก็ต้องมานั่งกำหนดตัวแปรกันจนตาลายแน่เลย รบกวนช่วยแนะนำด้วยครับ  wanwan012

ใช้ {ครอบ} เอาก็ได้คับ

โค๊ด:
<?php

$strArticle 
"INSERT INTO article (post_id, user_id, category_id, post_title, post_details, post_datetime, tag) VALUE ('NULL', '{$_POST['userid']}', {$category_id['category_id']}, '{$_POST['title']}', '{$_POST['details']}', '$date_post', '{$_POST['tag']}')";


แต่ เอา $_POST ใส่ใน query สดๆแบบนี้จะดีหรือ
เอา $_POST ใส่ใน query แบบนี้ไม่ดีหรอครับ? ช่วยอธิบายให้ผมเข้าใจอีกนิดนะครับ แล้ววิธีที่คุณบอกมา ผมจะลองใช้ดูแล้วจะมาบอกอีกทีครับ  wanwan017
ปล. ทำไมต้องใส่ {xxx} ด้วยหรอครับ?
« แก้ไขครั้งสุดท้าย: 06 สิงหาคม 2011, 22:55:57 โดย fogza » บันทึกการเข้า

:: สังคมจะดีได้ อยู่ที่เราทุกคน ไม่ใช่แค่ใครคนใดคนหนึ่ง ::
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #4 เมื่อ: 06 สิงหาคม 2011, 23:15:53 »

มันเสี่ยงต่อการโดน sql injection คับ

ปล. มั่นช่วยให้่ php เข้าใจว่าภายใน {} คือตัวแปร มะใช่ส่วนใดส่วนหนึ่งของข้อความคับ
บันทึกการเข้า

fogza
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 97
ออฟไลน์ ออฟไลน์

กระทู้: 1,307



ดูรายละเอียด
« ตอบ #5 เมื่อ: 06 สิงหาคม 2011, 23:20:02 »

มันเสี่ยงต่อการโดน sql injection คับ

ปล. มั่นช่วยให้่ php เข้าใจว่าภายใน {} คือตัวแปร มะใช่ส่วนใดส่วนหนึ่งของข้อความคับ
วิธีที่เหมาะสมคือการประกาศตัวแปรให้กับทุกๆ ค่าที่ส่งมาหรือปล่าวครับ?
ปล. ผมลองวิธีที่พี่บอกว่าให้ใส่ {xxx} แล้วขึ้นแบบนี้ครับ
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
บันทึกการเข้า

:: สังคมจะดีได้ อยู่ที่เราทุกคน ไม่ใช่แค่ใครคนใดคนหนึ่ง ::
หน้า: [1]   ขึ้นบน
พิมพ์