PDA

View Full Version : [Q] Hỏi về PHP



vtv4
29-09-2002, 17:35
Các bạn cho mình hỏi chút

Mình định code một trang nhật ký bằng PHP

Nhưng mình nghĩ thế này, mình sẽ đưa nó lên một server dùng chung với vài người khác nữa.

Như vậy, người ta có thể vào để xem code hoặc database và như thế thì... í ẹ, chẳng còn gì là riêng tư nữa.

Mình muốn xin một đoạn code, để sao cho, mỗi khi vào trang web đó, nó bắt mình phải nhập một password, nó sẽ ko check tính đúng sai của pass này mà sẽ dựa vào pass này để dịch ngược lại data trong database cho mình. Tất nhiên, khi save vào database nó cũng dùng pass này để mã hoá data.

Nếu có ví dụ bằng XOR thì tốt quá, liệu một string có thực hiện xor với một string được không ???

Thanks for all.:)

White_Rose
29-09-2002, 17:59
Hình như PHP hỗ trợ sẵn hàm MD5 để mã hoá 1 chiều, an toàn hơn đó bạn à.

vtv4
29-09-2002, 18:43
Cám ơn bạn đã giúp,
Nhưng mà hàm md5 chỉ mã hoá một chiều thôi, thế thì làm sao mình xem được những gì mình viết :)

Bạn chưa đọc kỹ bài post của mình ???

teekai
29-09-2002, 20:13
Nếu dùng chung database thì thua... cái vấn đề này cần phải hỏi host để nó phân ra... nếu database của bạn là an toàn thì vấn đề tiếp theo là php.

có thể dùng code sau:

Giả sử password thành viên của bạn được mả hoá md5 thì như sau:

Code nay vua viet chua duoc test... ban co the tham khao sau do test du`m...

<?
ob_start(); // buffer

if($_COOKIE[user_code])
{
echo"Phan rieng tu cua thanh vien cua ban";
}
else
{

if(!$_POST[username]||!$_POST[password])
{
?>
<form method="post">
Username: <input type="text" name="username">
<br>
Password: <input type="password" name="password">
<br>
<input type="submit" value="log in">
</form>
<?
{
$password=md5($_POST[password]); // nghia la luc dang ky thanh vien ban phai md5($_POST[password] sau do luu vao database voi field password la VARCHAR(32))
$query=mysql_query("SELECT count(*) AS count FROM tablusercuaban WHERE username='$_POST[username]' AND password='$password' ");
$farr=mysql_fetch_array($query);
if($farr[count]<=0)
{
echo"False";
}
else
{
echo"True";
setcookie("user_code",$password,time()+1800); // luu trong 1800 giay
}
}

}
?>

vuminhphan
29-09-2002, 20:18
hi,

bạn có thể viết 1 function encode decode cho riêng mình (1 function đơn giản thôi, ví dụ linear encryption chẳng hạn). Chuyện này thì dễ thôi, chỉ cần áp dụng 1 linear permutation function nào đó (ví dụ f(x)=a*x+b) chẳng hạn, rồi encode tứng character... Khi lưu vào db thì encode nó. Khi đọc password đúng thì decode nó ra trở lại. Bạn đừng trông chờ vào các hàm encode và decode có sẳn, vì nếu bạn decode được thì người khác cũng làm được.

thân,

teekai
29-09-2002, 20:20
Có thể tạo file logout.php:

<?
setcookie("user_code",0,0); // set cookie user_code bang 0 la empty va gioi han bang 0 nghia la ton tai nhung khong con valid
header("location: url"); //url la dia chi ban muon quay ve thi du trang login chang han...
?>

teekai
29-09-2002, 20:24
Nghĩa là lúc này password được lưu vào database là một đoạn md5.. kể cả admin hay ai đó cũng không biết nó là cái gì chỉ có người user đó biết thôi

BonBon
29-09-2002, 23:11
thì Forum VBB là mã hoá password của member bằng MD5 đó mà.
Admin cũng đâu có biết được password của member đâu.

vtv4
30-09-2002, 09:38
Thanks to Teekai, vuminhphan, and bonbon. Mình sửa Code của Teekai một chút là ứng dụng được rồi :)

vtv4
30-09-2002, 09:51
Các bạn cho hỏi cách lập trình để send được nhiều mail một lúc. Dùng hàm mail() chậm quá, mà có khi còn chẳng đến nơi. Có ai biết cách dùng SMTP không, xin chỉ giáo.
Thanks :)

genuine
30-09-2002, 16:54
send mail ?
dùng vòng lặp for cho loop lênh mail() ... :D

vtv4
30-09-2002, 18:06
Nhưng mà dùng mail() thì lâu đến nơi lắm, làm cách nào để user vừa "Submit" một cái là "bùm" đến nới luôn mới thích :rolleyes: lol

Deathly Smile
30-09-2002, 19:53
Sử dụng FTP để upload lên host.
Dùng phpMyAdmin để quản lý DB

embe
30-09-2002, 22:01
Khi dùng phpMyAdmin nên bảo vệ thư mục đó, nguy hiểm lắm. Còn nếu send mail dùng hàm mail() thì mail chừng 250 lá là server chết ngắc!

teekai
30-09-2002, 22:13
Có cách dùng SMTP... có viết sản một function rồi nhưng để ở nhà gùi.. mai mốt send cho vtv4...

Mai tui gửi vào đây

nettouch
30-09-2002, 22:34
xài SMTP mà dùng cho Newsletter thì tuyệt nhỉ, n Teek biết code mà sao không code cho Newsletter của anh luôn (ver 1.5 anh vẫn xài mail() ) ... Mai dzô coi liền á, n Teek post sớm nhe ... :D

BonBon
01-10-2002, 00:30
Bài viết được gửi bởi embe
Khi dùng phpMyAdmin nên bảo vệ thư mục đó, nguy hiểm lắm. Còn nếu send mail dùng hàm mail() thì mail chừng 250 lá là server chết ngắc!

Nhưng hình như khi đọc code của Forum VBulletin, Bon thấy họ cũng dùng lệnh mail() để gởi mail thông báo cho các thành viên đó.

&nbsp; Cũng chỉ là một vòng lặp thôi à.

embe
01-10-2002, 09:53
bonbon, bon không thấy nó có chế độ send bao nhiêu mail trong 1 lần gửi hả. Mỗi lần nó send 500 lá, sau mỗi nó sẽ delay 1 thời gian timeout nào đó, tui nghĩ vậy đó.

Teekai, nếu rãnh thì send anh cái code admin với cái code SMTP luôn đi, anh cám ơn nhiều.

teekai
02-10-2002, 02:34
OK đọc ở phía dưới cùng của bài này!
////////////////////////////////////////////////////////////////////
<?
function smtp_open($server, $port)
{
global $SMTP_GLOBAL_STATUS;

$smtp = fsockopen($server, $port);
if ($smtp < 0) return 0;

$line = fgets($smtp, 1024);

$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "2") return 0;

return $smtp;
}


function smtp_helo($smtp)
{
global $SMTP_GLOBAL_STATUS;

fputs($smtp, "helo localhost\r\n");
$line = fgets($smtp, 1024);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "2") return 0;

return 1;
}

function smtp_mail_from($smtp, $from)
{
global $SMTP_GLOBAL_STATUS;

fputs($smtp, "MAIL FROM: <$from>\r\n");
$line = fgets($smtp, 1024);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "2") return 0;

return 1;
}

function smtp_rcpt_to($smtp, $to)
{
global $SMTP_GLOBAL_STATUS;

fputs($smtp, "RCPT TO: <$to>\r\n");
$line = fgets($smtp, 1024);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "2") return 0;


return 1;
}

function smtp_data($smtp, $subject, $data)
{
global $SMTP_GLOBAL_STATUS;

fputs($smtp, "DATA\r\n");
$line = fgets($smtp, 1024);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "3") return 0;

fputs($smtp, "Mime-Version: 1.0\r\n");
fputs($smtp, "Subject: $subject\r\n");
fputs($smtp, "$data\r\n\r\n");
fputs($smtp, ".\r\n");
$line = fgets($smtp, 1024);
if (substr($line, 0, 1) <> "2")
return 0;

return 1;
}

function smtp_quit($smtp)
{
global $SMTP_GLOBAL_STATUS;

fputs($smtp, "QUIT\r\n");
$line = fgets($smtp, 1024);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] = substr($line, 0, 1);
$SMTP_GLOBAL_STATUS[$smtp]["LASTRESULTTXT"] = substr($line, 0, 1024);

if ($SMTP_GLOBAL_STATUS[$smtp]["LASTRESULT"] <> "2") return 0;

return 1;
}

// Bắt đầu từ đây nè

$subject = ""; // Tựa đề email
$message = ""; // Nội dung email
$FromUser = ""; // Email của bạn
$ToUser = ""; // Email của người muốn gửi
$SMTPServer = ""; // SMTP server của bạn mai.diendantinhoc.com chẳng hạn :D
$mail = smtp_open($SMTPServer, 25);
smtp_helo($mail);
smtp_mail_from($mail, $FromUser);
smtp_rcpt_to($mail, $ToUser);
smtp_data($mail, $subject, $message);
smtp_quit($mail);
?>

vtv4
02-10-2002, 08:05
Cám ơn anh Teekai code nhé.

Cho em hỏi, cái SMTP ấy thì xem ở đâu thế hay phải gửi e-mail đến thắng hostmaster ???

Cho em hỏi thêm là muốn sử dụng function a() ở trong function b() thì có phải khai báo global function a() không? Và nếu có thì phải khai báo như thế nào ???

Có cách nào để viết một function mà function đó "sinh ra" một biến mới hay không ???
Ví dụ: Trước khi gọi test(); thì biến $a chưa tồn tại, nhưng sau khi gọi test(); thì echo "$a" sẽ cho ra "fdhfghfgxgfgfd" (# '') được không?

vikhoa
02-10-2002, 09:30
Nếu người ta dùng chung cả FTP với bạn thì chắc chỉ có cách mã hóa dữ liệu lưu vào DB mà thôi.

teekai
02-10-2002, 14:41
Yes email đến Hostmaster để biết smtp server address

Là sao bạn hỏi gì teekai vẫn chưa hiểu :D

vtv4
03-10-2002, 08:31
Thanks to Vikhoa

Anh Teekai, em hỏi thế này:

function a(){.... return true; }

function b(){
...
if (a()){...}
...
}

Như vậy thì b() gọi đến a(), như thế có được không? Vì theo như tài liệu nói thì các biến toàn cục muốn dùng trong một function phải báo global. Vậy các hàm thì sao? Có dùng hàm này trong hàm kia được không

teekai
03-10-2002, 16:26
Không được đâu :)

vậy thì được nè:

<?
class func
{
var $in;

function a($e)
{
echo $this->in=$e;
}

function b()
{
func::a("in ra o day ne");
}
}

$func=new func;
$func->b();
?>

vtv4
04-10-2002, 09:27
Thanks to Teekai.

Anh Teekai giảng giải cho em môt chút về foreach được không??? Em vẫn chưa hiểu về cái này lắm.

teekai
04-10-2002, 15:34
foreach? okay!
foreach để dùng lập một mảng dựa trên $key và $value (Biến bạn có thể đặt tùy thích không nhất thiết phải $key hay $value)
<?
$arr=array(
// "key"=>"value",
"vtv_4"=>"hoc php",
"teekai"=>"di choi",
"ai do"=>"dang o dau :P",
);

foreach($arr as $key=>$value)
{
echo "$key: $value<br>\r\n";
}
?>

vtv4
04-10-2002, 17:52
Thanks to anh Teekai (mặc dù em đọc bài post này của anh không hiểu lắm ( :( lol lol lol ), sẽ nghiên cứu thêm ở sau.

Cho em hỏi cái này nhé,

Em viết code login script như sau:




$codelogin=md5($uv.$pv); // <~~ uv, pv la` <input type= ...>

if (findpass($uv)==$codelogin) //Tìm pass của một user có tên $uv
{
$cook="$uv|$codelogin";
setcookie("logined","$cook",time()+360000);
header("location:index.php");
}




Checkcook ở index.php:




list($uc, $pc)=explode("|",$HTTP_COOKIE_VARS["logined"]);
if (findpass($uc)!=$pc) // chưa login or cookie tà đạo
{ header("location:login.php"); }



Thế nhưng không hiểu sao sau khi đã login chuẩn u và p rồi mà vẫn ko vào được index, toàn bị đẩy sang login.php để login lại.

Em đã thêm đoạn code ở login.php, để show cái cookie sau khi login lên và show cái codelogin của user này ở trong Database để so sánh bằng mắt thì thấy hai cái là bằng nhau rồi, thế mà vẫn ko vào index được :( :( :(

vtv4
04-10-2002, 17:57
ở file index.php cũng thêm code để show cái $uc, $pc và $codelogin của $uc ở trong database để so sánh thấy cũng y như nhau luôn, thế mà... chẳng hiểu sao nữa :(

teekai
05-10-2002, 02:05
sao không list cái function findpass($uc) gì đó

coi có lỗi không.. vậy sao anh biết được

tridung
05-10-2002, 11:25
Em làm được rồi, thêm một cái "|" vào cuối, có lẽ vấn đề nằm ở chỗ ký tự kết thúc chuỗi (cũng ko rõ lol ).

Hết cái để hỏi ;) Về code tiếp, rồi có gì không hiểu lại hỏi, thanks anh TK.

tridung
05-10-2002, 11:29
À mà cái user này ko biết của ai, ngại logout quá :D

chilinh
08-10-2002, 13:44
Hỏi về PHP?
Các bạn cho mình hỏi chút: mình có 3 trang web, trang 1 viết bằng html có 2 biến truyền, trang thứ 2 viết bằng php, trang thứ 3 viết bằng php. Trang thứ 1 Submit sang trang thứ 2, trang thứ 2 Submit sang trang thứ 3, làm thế nào để từ trang thứ 3 ta lấy được 2 biến ở trang thứ 1.

chilinh
08-10-2002, 14:33
Hỏi về php?
Làm thế nào để đưa 1 thuộc tính trong database của 1 người nào đó sang địa chỉ email của người đó (viết chương trình đưa 1 cách tự động)

capricorn
08-10-2002, 15:24
Bài viết được gửi bởi chilinh
Hỏi về PHP?
Các bạn cho mình hỏi chút: mình có 3 trang web, trang 1 viết bằng html có 2 biến truyền, trang thứ 2 viết bằng php, trang thứ 3 viết bằng php. Trang thứ 1 Submit sang trang thứ 2, trang thứ 2 Submit sang trang thứ 3, làm thế nào để từ trang thứ 3 ta lấy được 2 biến ở trang thứ 1.

Hello !
Cách nhanh nhất là dùng element "input type=hidden..."
để ghi lại giá trị truyền từ trang 1 vào form của trang 2. Từ trang 2 sang trang 3 thì đâu có vấn đề gì !?!
Có 1 cách khác là khởi tạo session từ trang 2 và truyền các biến lấy được từ trang 1 cho trang 3 qua session.
Và còn nhiều cách khác nữa...

Bye
;)

vtv4
27-10-2002, 16:58
Hi mọi người, giúp mình với

Mình copy một đoạn code ở php.net dùng để creat thumbnail cho image, rồi save as file test.php nhưng mà khi chạy nó báo lỗi:


Fatal error: Call to undefined function: imagecreatefromgif() in /home/hoctro/public_html/longhp/test.php on line 11

Khắc phục thế nào bây giờ :(

Anh teekai có code creat thumbnail không cho em xin với!!!

vtv4
27-10-2002, 16:59
link đây: http://www.thainguyencity.com/longhp/test.php