09/10/2018, 23:36

Cần giúp đỡ viết web PHP...

Em đang tìm hiểu về lập trình PHP , mong các cao thủ giúp đỡ.

Em muốn viết 1 trang web php về game ( trang web chơi game flash trực tuyến nhưng không cần hệ thống lưu điểm như trochoiviet.com ... )

Những phần em muốn làm là :
1. Menu : tất cả các game được lưu trong database sẽ được hiển thị trên 1 trang.
VD: em tạo table Game (id,name,description,url) , làm thế nào để cho tất cả các 'name' trong table này hiện ra ở trang web menu.php , kể cả các game mình vừa add thêm ?

2. Search : bộ máy tìm kiếm các game trong table Game đó, có lẽ sử dụng câu query
Code:
SELECT * Game WHERE 'name' LIKE '%$tukhoa%'
đúng không nhỉ ?
Sau đây là code search người quen em viết ra ( có chỉnh sửa 1 chút ) :
Máy tìm kiếm sẽ có 2 file : timkiem.php và ketqua.php
Trong file timkiem.php :
Code:
<form name="search" method="post" action="ketqua.php">
<input type=text name="keyword">
<input type=submit value="Tìm">
</form>
Trong file ketqua.php :
Code:
// Lấy giá trị nhập trong textbox , $_POST sẽ nhận giá trị của textbox với tên là keyword
// còn $_GET sẽ lấy giá trị trên thanh URL . 

$keyword = $_POST['keyword'] ;
$strSQL = "SELECT * FROM Game WHERE name LIKE '%$keyword%'"; // PHP cho phép để tên biến trực tiếp trong string luôn, ko cần phải dùng phép nối chuỗi . Hay nhỉ 
$result = mysql_query(strSQL);

if (!$result) 
{
    echo 'Không thể kết nối : ' . mysql_error();
    exit;
}

echo "<table><tr><td>Tên games</td><td>Link</td>";

while( $row = mysql_fetch_row($result) )
{
echo "<tr>";
echo "<td>$row[1]</td><td>$row[3]</td>";   // Row[0] là id, 1 la tengame, 2 la chú thích, 3 là link , thích xuất cái gì tùy em
echo "</tr>";
}
echo "</table>";
Code xong rồi ,nhưng em không dùng được ( Cài trên Localhost , khi chạy nó báo là "Access Denied for user 'ODBC'@'localhost' on line... , mặc dù em không hề thiết lập một cái user nào tên 'ODBC' cả ! )

3. Add : công cụ add game . Cái này em dựa vào code search trên mà viết ra. Theo em là dùng query
Code:
INSERT INTO Game('id', 'name', 'description', 'url') values ('%$id%', '%$name%', '%$description%', '%$url%')
Tóm lại code add sẽ gồm 2 file : add.php và added.php
Trong file add.php :
Code:
<html><body>
<form name="addgame" method="POST" action="added.php">
ID : <input type=text name="id"><br>
Tên game : <input type=text name="name"><br>
Chú thích :<input type=text name="description"><br>
URL :<input type=text name="url"><br>
<input type=submit value="ADD">
</form>
</body></html>
Trong file added.php :
Code:
<html><body>
<?php
include ('add.php');
$id = $_POST['id'] ;
$name = $_POST['name'] ;
$description = $_POST['description'] ;
$url = $_POST['url'] ;

$strSQL = "INSERT INTO 'game'('id', 'name', 'description', 'url') values ('%$id%', '%$name%', '%$description%', '%$url%')"; // Em thay lệnh SELECT bằng lệnh INSERT INTO để thêm dữ liệu vào DB
$result = mysql_query(strSQL);

if (!$result) 
{
    echo 'Không thể kết nối CSDL : ' . mysql_error();
    exit;
}

echo "Game $name đã được thêm !"; // Cái này không biết có cho ko nhỉ ? đặt biến vào echo luôn ( $name ) ^_^
?>
</body></html>
~~~~~~~~~~~~
Về phần code em nghĩ là ổn rồi , nhưng em chưa biết cách kết nối website với database!
Khi chạy các file trên localhost nó toàn báo không kết nối được với database vì chưa thiết lập thông tin kết nối như database name, user,password, ... Làm thế nào để thiết lập đây ?

*Mong các bác chỉ rõ tận tình ...
heo mọi viết 01:51 ngày 10/10/2018
Lạ thật, đây là một trong nh~ điều đầu tiên phải biết khi học PHP chứ.
Trước tiên dùng phpMyAdmin để tạo một user mới, tạo database mới.
Tạo một file đặt tên là dbconnect.php như vầy:
PHP Code:
$dbserver 'tên_server';
$dbname "tên_database";
$dbuser "username_gì_đó";
$dbpasswd "password_của_user_trên";
@
mysql_connect($dbserver,$dbuser,$dbpasswd) or
 die (
"Can't connect database.");
@
mysql_select_db ($dbname) or
 die (
"Can't select database"); 
Rồi trong mỗi file kia, include nó vào ở đầu như thế này:
PHP Code:
require_once "dbconnect.php"
heo mọi viết 01:50 ngày 10/10/2018
Ở file ketqua.php, cần phải viết lại:
PHP Code:
if (!$result
{
    echo 
'Không thể kết nối : ' mysql_error();
    exit;
}
else
{
    echo 
"<table><tr><td>Tên games</td><td>Link</td>";
    
// dưới đây, nếu làm như em thì lỡ query thất bại thì làm sao mysql_fetch_row được?
    
while( $row mysql_fetch_row($result) )
    {
        echo 
"<tr>";
        echo 
"<td>$row***91;1***93;</td><td>$row***91;3***93;</td>";   // Row***91;0***93; là id, 1 la tengame, 2 la chú thích, 3 là link , thích xuất cái gì tùy em
        
echo "</tr>";
     }
     
mysql_free_result($result); // Giải phóng bộ nhớ

anhtuannd viết 01:39 ngày 10/10/2018
Đã exit; rồi thì có cần else đằng sau nữa không?
amida viết 01:48 ngày 10/10/2018
Quote Được gửi bởi anhtuannd View Post
Đã exit; rồi thì có cần else đằng sau nữa không?
Vậy nếu condition trong if() sai thì lúc đó có cần else kô? Exit trong if() đâu ảnh hưởng tới else vì cơ bản 2 cái đó trái ngược nhau, không đụng tới nhau mà.
binhvn viết 01:45 ngày 10/10/2018
hơ hơ, cái else ở đằng sau đó là không cần thiết rồi. Nếu cái if nó đúng thì show msg rùi hàm exit nó sẽ dừng xử lý rồi, đâu có chạy đoạn ở dưới nữa đâu mà else làm chi
heo mọi viết 01:47 ngày 10/10/2018
Cậu nói đúng, tôi đã đọc không kỹ đoạn code!
gaulucky92 viết 01:52 ngày 10/10/2018
Cảm ơn sự giúp đỡ của mọi người ! Em có xem ebook và chỉnh code lại rồi , bây giờ đã làm được trang tìm kiếm , trang kết quả , trang play game ( dùng $_GET ) , trang thêm game ( add ) , ...Tuy nhiên còn 1 số vấn đề ...
- Trang add game : các input em không ghi " vào được ( vì query được quy định là $query = "INSERT INTO..."; ) , muốn ghi thì phải thêm dấu \ vào trước ". Làm thế nào để mình có thể ghi dấu " hay ' vào thẳng luôn , khi submit nó sẽ tự thêm dấu \ vào trước mỗi " hay ' .. ? Em có hỏi 1 anh kia cũng có biết php , ảnh nói là "SQL Inject... Prevention" gì gì đó rồi kêu search trên google ... ko hiểu gì luôn !
- Trang xóa game : em muốn xóa 1 game ( 1 row trong table ) thì làm sao ? Dùng phpmyadmin để lấy code ko được vì nó cho code dạng như thế này :
Code:
DELETE FROM `game` WHERE CONVERT(`id` USING utf8) = 'game-id' AND CONVERT(`name` USING utf8) = 'Game name' AND CONVERT(`description[/b]` USING utf8) = '[b]Game Description' AND CONVERT(`url` USING utf8) = 'game url' LIMIT 1;
Chẳng lẽ muốn xóa game nào thì phải ghi lại nguyên văn tất cả thông tin của game đó sao ?? Em muốn xóa kiểu chỉ cần ghi ID hoặc tên game vào thì nó sẽ dò ra row nào có tên game đó và xóa cả row ấy luôn ... Em thử query "DELETE FROM 'game' WHERE 'id' = "$id" " nhưng không được ...
- Tự động thêm id : trang add game của em mỗi lần thêm game phải tự điền ID vào , làm thế nào để mỗi lần mình add 1 game mới nó tự động add ID lớn hơn ID hiện tại ko ? VD: trong DB có 9 game , tức ID lớn nhất là 9 , add thêm game mới nó sẽ tự thêm vào cột id là 10.
- ORDER BY : trong trang kết quả , em dùng ORDER BY để sắp xếp dữ liệu xuất hiện , nhưng phải có yêu cầu dạng ORDER BY 'column name' để nó xếp theo column name đó , làm sao để nó chỉ xếp dạng ASC hay DESC mà không yêu cầu 'column name' ( giống như các guestbook hay forum : bài viết mới sẽ được xếp lên trên cùng , bài cũ sẽ xếp xuống dưới.. ---> DESC ).
- dùng $_GET : khi làm 1 trang web động em dùng $_GET để nó có dạng play.php?gameid=1 , để làm điều đó em dùng if () elseif... có cách nào khác không dùng if vẫn làm được trang web động không ? ( dùng if thấy nó rối quá ! ).
- sử dụng Cookie : em đang viết trang admin.php cho game để quản lý như sửa game , xóa game , ... dùng cách cơ bản để set user và password admin ( if ( $user = ... && $pass= ... ) {}.. ) , nếu dùng như vậy hình như không an toàn. Nghe nói phải dùng đến Cookie và Session ... em không hiểu về cookie và session , mong được hướng dẫn.
--------------------------------------------------------

* Trên đây là các vấn đề em đang gặp phải, mong được giúp đỡ.
doangia viết 01:37 ngày 10/10/2018
Quote Được gửi bởi gaulucky92 View Post
- Trang add game : các input em không ghi " vào được ( vì query được quy định là $query = "INSERT INTO..."; ) , muốn ghi thì phải thêm dấu \ vào trước ". Làm thế nào để mình có thể ghi dấu " hay ' vào thẳng luôn , khi submit nó sẽ tự thêm dấu \ vào trước mỗi " hay ' .. ? Em có hỏi 1 anh kia cũng có biết php , ảnh nói là "SQL Inject... Prevention" gì gì đó rồi kêu search trên google ... ko hiểu gì luôn !
- Trang xóa game : em muốn xóa 1 game ( 1 row trong table ) thì làm sao ? Dùng phpmyadmin để lấy code ko được vì nó cho code dạng như thế này :
Code:
DELETE FROM `game` WHERE CONVERT(`id` USING utf8) = 'game-id' AND CONVERT(`name` USING utf8) = 'Game name' AND CONVERT(`description[/b]` USING utf8) = '[b]Game Description' AND CONVERT(`url` USING utf8) = 'game url' LIMIT 1;
Chẳng lẽ muốn xóa game nào thì phải ghi lại nguyên văn tất cả thông tin của game đó sao ?? Em muốn xóa kiểu chỉ cần ghi ID hoặc tên game vào thì nó sẽ dò ra row nào có tên game đó và xóa cả row ấy luôn ... Em thử query "DELETE FROM 'game' WHERE 'id' = "$id" " nhưng không được ...
- Tự động thêm id : trang add game của em mỗi lần thêm game phải tự điền ID vào , làm thế nào để mỗi lần mình add 1 game mới nó tự động add ID lớn hơn ID hiện tại ko ? VD: trong DB có 9 game , tức ID lớn nhất là 9 , add thêm game mới nó sẽ tự thêm vào cột id là 10.
- ORDER BY : trong trang kết quả , em dùng ORDER BY để sắp xếp dữ liệu xuất hiện , nhưng phải có yêu cầu dạng ORDER BY 'column name' để nó xếp theo column name đó , làm sao để nó chỉ xếp dạng ASC hay DESC mà không yêu cầu 'column name' ( giống như các guestbook hay forum : bài viết mới sẽ được xếp lên trên cùng , bài cũ sẽ xếp xuống dưới.. ---> DESC ).
- dùng $_GET : khi làm 1 trang web động em dùng $_GET để nó có dạng play.php?gameid=1 , để làm điều đó em dùng if () elseif... có cách nào khác không dùng if vẫn làm được trang web động không ? ( dùng if thấy nó rối quá ! ).
- sử dụng Cookie : em đang viết trang admin.php cho game để quản lý như sửa game , xóa game , ... dùng cách cơ bản để set user và password admin ( if ( $user = ... && $pass= ... ) {}.. ) , nếu dùng như vậy hình như không an toàn. Nghe nói phải dùng đến Cookie và Session ... em không hiểu về cookie và session , mong được hướng dẫn.
--------------------------------------------------------

* Trên đây là các vấn đề em đang gặp phải, mong được giúp đỡ.
Hình như cậu chưa nắm những vấn đề cơ bản về PHP lắm nhĩ . Tui cũng ko khá mấy về PHP nhưng những vấn đề bạn hỏi tui đều thấy quá cơ bản
- Thứ nhất về cái dấu " .. đơn giản cứ dùng hàm addslashes() khi insert vào database , nó sẽ tự thêm dấu \ phía trước " . Tất nhiên khi lấy dữ liệu ra để trình bày thì phải dùng hàm stripslashes() để bỏ những dấu \ đã thếm vào . Nếu sever đã magic_quotes_gpc thì ko cần phải làm như thế , nó sẽ tự làm lấy
- Xóa 1 row ra khỏi table thì cần gì phải khai báo hết tất tần tật đâu , chỉ cần cung cấp cái ID như của bạn là xon rồi
"DELETE FROM table*** WHERE id='$id'" . Nếu nó không chạy bạn nên kiểm tra syntax lại.
- Vấn đề ID tự tăng thì khi thiết kế xây dựng datbase bạn sẽ gán thuộc tính auto_increment , nó sẽ tự tăng lên
- Oder by nhất định phải có tên feild rồi, nếu ko nó order dựa vào đâu , thông thường cứ order by id
- Vấn đền$_GET của bạn mình không hiểu lắm, nếu như bạn muốn điều hướng hành động cho trang web không dùng if ..else thì có thể dùng switch ... case
Tốt nhất là xem lại Php Manual
amida viết 01:44 ngày 10/10/2018
dùng $_GET : khi làm 1 trang web động em dùng $_GET để nó có dạng play.php?gameid=1 , để làm điều đó em dùng if () elseif... có cách nào khác không dùng if vẫn làm được trang web động không ? ( dùng if thấy nó rối quá ! ).
Có gì mà rồi. Vậy dùng switch đi, nhìn cho nó có cấu trúc 1 tí.
sử dụng Cookie : em đang viết trang admin.php cho game để quản lý như sửa game , xóa game , ... dùng cách cơ bản để set user và password admin ( if ( $user = ... && $pass= ... ) {}.. ) , nếu dùng như vậy hình như không an toàn. Nghe nói phải dùng đến Cookie và Session ... em không hiểu về cookie và session , mong được hướng dẫn.! ).
Học lập trình web mà không chịu học session/cookies thì sao mà làm site đc?
Bài liên quan
0