PDA

View Full Version : Dùng isset trong PHP


changtraivungbien
21-08-2011, 09:50
Chưa rỏ về (isset va $_POST).
Em đã dùng isset kiểm tra biến như đoạn code "tính cạnh huyền " dưới đây, ko biết đúng chưa mà khi chạy lại báo lỗi ở lần chạy đầu tiên. Xin anh em diễn đàn giúp em hiểu rỏ vấn đề. Và nếu có thể thì cho em tham khảo thêm các cách viết kiểm tra khác của (isset và $_POST). Em cảm ơn rất nhiều.



<!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>Untitled Document</title>
</head>

<body>
<?php
if (isset($_POST["txta"]) && $_POST["txtb"]!="")

{
$a=$_POST["txta"];
$b=$_POST["txtb"];
$a2=pow($a,2);
$b2=pow($b,2);
$ch=sqrt($a2+$b2);
$ch2=round($ch,2);
}
?>

<blockquote>
<blockquote>
<blockquote>
<form action="tinhcanhhuyen.php" method="post">
<table bgcolor="#B1D8B4" align="center">
<tr bgcolor="#009933">
<td colspan="2" align="center" > <strong>Tính cạnh huyền </strong></td>
</tr>
<tr>
<td>Cạnh a</td>
<td> <input type="text" name="txta" value="<?php echo $a;?>"/></td>
</tr>
<tr>
<td>Cạnh b</td>
<td> <input type="text" name="txtb" value="<?php echo $b;?>"/></td>
</tr>
<tr>
<td>Cạnh huyền </td>
<td> <input type="text" name="txtch" value="<?php echo $ch2;?>" style="background-color:#FFCCCC"/></td>
</tr>
<tr>
<td><input type="submit" value="Tính"/></td>
</tr>
</table>
</form>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>

anhhuy9900
22-08-2011, 17:26
if (isset($_POST["txta"]) && isset($_POST["txtb"]!=""))
bạn sửa thành như vậy thử xem sao

changtraivungbien
24-08-2011, 09:24
Cảm ơn bạn mình thử rồi nhưng ko được. huhuhu. Vấn đề ở đây là mình chưa hiểu rỏ cách biên dịch từng dòng của PHP.
Nếu bạn hoặc anh em nào biết thì giúp mình với nhé.(Lỗi biên dịch ở lần chạy đầu tiên).

freewind1012
24-08-2011, 12:31
Báo lỗi gì ở lần chạy đầu tiên? Undefined Index hử?

Thử sửa thế này xem: <input type="submit" name="tinh" value="Tính" /> và

if(isset($_POST['tinh'])) { //Khi nào nhấn Tính mới làm những hành động phía sau, thế cần gì phải kiểm tra trước?
if($_POST['txta']!="" && $_POST['txtb']!="") { //Lúc này chắc chắn có $_POST['txta'] và $_POST['txtb'] rồi, kiểm tra rỗng là đủ
$a=$_POST['txta'];
$b=$_POST['txtb'];
$a2=pow($a,2);
$b2=pow($b,2);
$ch=sqrt($a2+$b2);
$ch2=round($ch,2);
}
}

changtraivungbien
24-08-2011, 14:42
Mình thử rồi mà ko được freewind1012 ơi.
Mà mình thấy ngạc nhiên một điều là. Mình đã xem một video trên mạng hướng dẫn làm thì chạy rất là ok, mình cũng làm giống như vậy mà ko hiểu sao ko chạy được nữa.

Đây là video hướng dẫn:http://www.mediafire.com/?oec33g96r1621ng
Còn bài của mình làm thì đã POSt ở trên
Mời mọi người xem và cho y kiến giúp đỡ. Em xin cảm ơn.

DeTu_ThayKhoa
24-08-2011, 16:56
Bạn ơi !copy thông báo lỗi thử xem bạn.
Bạn đang xài web server có giống trong video hướng dẫn ko ? wamp,xampp hay appserv ?
Mình đang xài wamp , copy đoạn code của bạn chạy ok :laugh:

changtraivungbien
24-08-2011, 17:37
Mình cũng dùng "wamp server" . Mà bạn ơi. Đoạn code đó chạy lần thứ 2 thì ok. Tuy nhiên chạy lần đầu tiên thì sẽ báo lỗi. Bản kiểm tra lại thử ở lần chạy đầu tiên xem. Cảm ơn bạn nhiều.

Hình báo lỗi: http://www.mediafire.com/?28ng5mum3dmmodj
Trang mình đặt tên là "test.php" và action của form tại chính trang đó

DeTu_ThayKhoa
24-08-2011, 17:57
Bạn mở file php.ini , cấu hình lại dòng sau :

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Save lại .

->Xong bạn chọn Restart All Service.

changtraivungbien
24-08-2011, 21:27
Sửa kiểu sao hả bạn.Trong file php.ini trên máy mình chỗ đó là:

; error_reporting
; Default Value: E_ALL & ~E_NOTICE
; Development Value: E_ALL | E_STRICT
; Production Value: E_ALL & ~E_DEPRECATED

Có phải thay toàn bộ cái này bằng dòng lệnh của bạn gửi ko?

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Mình làm thử như vậy rồi mà ko được, vẫn báo lỗi như vậy.
Nhờ bạn hướng dẫn kỹ hơn giúp mình. Cảm ơn bạn nha.

DeTu_ThayKhoa
25-08-2011, 09:20
B1 : Bạn mở file php.ini

B2 : Ctrl + F để search. Bạn gõ vào error_reporting

B3 : Bạn bấm next , đến khi nào tìm thấy chữ error_reporting mà trước nó không có dấu chấm phẩy ( ; )

B4 : Thay dòng đó bằng :

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

freewind1012
25-08-2011, 11:07
Mình thử rồi mà ko được freewind1012 ơi.
Mà mình thấy ngạc nhiên một điều là. Mình đã xem một video trên mạng hướng dẫn làm thì chạy rất là ok, mình cũng làm giống như vậy mà ko hiểu sao ko chạy được nữa.

Video trên mạng khác bạn là do họ sử dụng một gói server khác (AppServ, XAMPP, VertrigoServ...) hay cũng có thể là chính WAMP nhưng mức độ khắt khe với các lỗi logic ko bằng. Trước khi sửa đổi php.ini (can thiệp mạnh vào thông báo lỗi có thể dẫn đến việc bạn chẳng biết mình sai chỗ nào vì chả ai bắt lỗi), bạn nên thử 2 giải pháp này trước:

+ Định nghĩa $a, $b và $ch2 trước. Ngay đầu trang bạn quy định: $a = ""; $b = ""; $ch2 = "";
+ Sử dụng @. Tham khảo thêm tại http://www.php.net/manual/en/language.operators.errorcontrol.php.

$value = @$cache[$key]; //This will not issue a notice if the index $key doesn't exist.


Nếu ko đc nữa thì là thôi, làm theo cách của bạn DeTu_ThayKhoa để nó im lặng luôn cho phẻ.

katkid
25-08-2011, 11:40
ui.. vẫn chưa giải quyết dc ah. Nếu bí quá add nick mình: yukid_angel@yahoo.com. Mình sẽ teamviewer vào máy bạn xem giúp cho :)

changtraivungbien
25-08-2011, 15:42
Theo hướng dẫn chi tiết của detu_thayKhoa mình đã làm được rồi. Cảm ơn detu_thaykhoa rất nhiều. Mà bạn ơi cho mình hỏi. Dòng lệnh đó cỏ ý nghĩa gì vậy?
Đó là dòng lệnh để sửa lổi của wamp hay là dòng lệnh chỉ che lỗi thôi hay là gì khác? Và nếu mình viết theo cách đó khi up lên web thì có chạy được ko, có chạy ổn định ko.Một lần nữa nhờ bạn giải thích giúp mình.

DeTu_ThayKhoa
26-08-2011, 14:36
Chào bạn!
- Đây không phải là dòng lệnh sửa lỗi của wamp và cũng không phải để che lỗi .
Cái mà bạn thấy ở lần chạy đầu tiên là những thông báo của PHP khuyến cáo bạn nên sửa đổi code của mình cho đúng với chuẩn PHP (do bạn khai báo biến không rõ ràng - chưa khai báo mà đã echo).
-Bạn up lên host thì vẫn chạy bình thường nếu host của bạn đã cấu hình lại file php.ini(thường thì có sẵn cho bạn).
-Khi điều chỉnh thông số này thì khi code của bạn có lỗi (sai hoàn toàn - ko chạy) thì php vẫn hiện thông báo lỗi bình thường.
-PHP chỉ ko hiện thông báo lỗi khi bạn cấu hình lại display_errors = Off trong file php.in.

Trình độ mình còn yếu ,có gì không đúng xin các thầy và các bạn sửa lại và giải thích giùm để mọi ngừoi được hỉêu rõ vấn đề. Cảm ơn các thầy và các bạn.

changtraivungbien
26-08-2011, 19:07
Bạn nói cái lỗi đó ko phải lỗi của wamp mà cũng ko phải để che lỗi trong PHP mà đó chỉ là thông báo cách viết chưa chuẩn của PHP. Biến không rỏ ràng chưa khai báo mà lại echo nó ra .
Vậy theo bạn đúng chuẩn của PHP thì viết như thế nào để ko bị lỗi đó.Rất cảm ơn bạn.

DeTu_ThayKhoa
26-08-2011, 19:56
freewind1012 đã hướng dẫn cho bạn ở phía trên rồi đó bạn !

Ngay đầu trang bạn khai báo 3 biến :

$a = ""; $b = ""; $ch2 = "";

changtraivungbien
27-08-2011, 08:29
Theo cách viết của freewind1012 là khai báo các biến đó rỗng ngay đầu trang và cả cách chỉnh sửa nội dung file php.ini như cách của Detu_ThayKhoa thì mình làm đều chạy tốt cả. Cảm ơn các bạn rất nhiều vì đã giúp mình cũng như các bạn trong diễn đàn hiểu rỏ hơn vấn đề.

Ủa sao cái bài POSTREPLAY của mình đâu ko thấy hiển thị trên diễn đàn nhỉ, mà mình phải Postreplay thì mới thấy bài postrelay trước đó vậy ta.

nghiinfo
16-07-2012, 18:47
Chưa rỏ về (isset va $_POST).
Em đã dùng isset kiểm tra biến như đoạn code "tính cạnh huyền " dưới đây, ko biết đúng chưa mà khi chạy lại báo lỗi ở lần chạy đầu tiên. Xin anh em diễn đàn giúp em hiểu rỏ vấn đề. Và nếu có thể thì cho em tham khảo thêm các cách viết kiểm tra khác của (isset và $_POST). Em cảm ơn rất nhiều.



<!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>Untitled Document</title>
</head>

<body>
<?php
if (isset($_POST["txta"]) && $_POST["txtb"]!="")

{
$a=$_POST["txta"];
$b=$_POST["txtb"];
$a2=pow($a,2);
$b2=pow($b,2);
$ch=sqrt($a2+$b2);
$ch2=round($ch,2);
}
?>

<blockquote>
<blockquote>
<blockquote>
<form action="tinhcanhhuyen.php" method="post">
<table bgcolor="#B1D8B4" align="center">
<tr bgcolor="#009933">
<td colspan="2" align="center" > <strong>Tính cạnh huyền </strong></td>
</tr>
<tr>
<td>Cạnh a</td>
<td> <input type="text" name="txta" value="<?php echo $a;?>"/></td>
</tr>
<tr>
<td>Cạnh b</td>
<td> <input type="text" name="txtb" value="<?php echo $b;?>"/></td>
</tr>
<tr>
<td>Cạnh huyền </td>
<td> <input type="text" name="txtch" value="<?php echo $ch2;?>" style="background-color:#FFCCCC"/></td>
</tr>
<tr>
<td><input type="submit" value="Tính"/></td>
</tr>
</table>
</form>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>




Xin phép "bốc mộ" nhé. :JFBQ00153070129A:

Sao ko dùng thế này bạn nhỉ: if (isset($_POST["txta"], $_POST["txtb"])!="")