Hỏi - Đáp

Giáo viên trả lời:
Trong trường hợp này thì trong lúc gắn link bạn không link trực tiếp tới các trang bt2_091.php hay bt2_092.php nữa mà phải link tới trang index.php vì nội dung là bạn muốn hiện ra ở phần nội dung của trang chủ. Nhưng do ta có nhiều trang muốn hiện nội dung ở trang chủ do đó trang nào muốn hiện ở trang chyu3 thì phải gửi về cho trang chủ một tham số ví dụ ta gọi là action=search hay action=detail. Trong đó action bằng search thì sau này trang chủ sẽ gọi trang bt2_091.php vào phần nội dung của trang chủ còn action=detail thì trang chủ sẽ gọi trang bt2_092.php vào.

Trong trang chủ bạn có thể áp dụng cấu trúc chọn lựa switch ...case dựa vào các tham số action này để gôi trang nào vào thôi.

Ví dụ trong phần nội dung của trang chủ ta dùng cấu trúc chọn lựa như sau:
<div class="content">
<?php
if(isset($_GET['action'])){
switch($_GET['action']){
case "search":
require "bt2_091.php";
break;
case "detail":
require "bt2_092.php";
break;
}
}
?>
</div>

Còn trong các link ở các trang của bạn bạn hãy link về trang chủ và truyền thêm tham số action vào

+ tại Form search link sẽ là <form id="form1" name="form1" method="post" action="index.php?action=search">
+ Trong trang bt2_091.php link truyền sẽ là 
echo "<td colspan='2' align='center' class='tieudephu'><a href='index.php?action=detail&ten_sua=".$ten_sua."'>$ten_sua</a> </td>";

Giáo viên trả lời:
Có thể do trình duyệt hay windows máy bạn bị lỗi, tôi chạy trên tất cả các trình duyệt của tôi đều OK cả. Bạn kiếm máy khác đem source qua chạy thử đi xem nó có bị lỗi này không, chứ tôi test thử trên 2 cái laptop khác nhau của tôi thấy chạy rất OK.

Hàm eregi_replace chỉ chạy trên PHP 5.2.x nếu bạn dùng PHP 5.3.x sẽ gặp báo lỗi. Bạn dùng 2 tập tin mà bạn gửi cho tôi đợt trước đã sửa lại rồi đó, test thử trên máy khác đi, code thì chỉ có vậy thôi. Tôi chạy 2 file của Bạn gửi cho tôi và kết quả tôi có chụp hình minh hoạ cho bạn rồi đó, nó đánh dấu được mà.


Giáo viên trả lời:
2 file bạn gửi cho tôi thấy chạy lên tìm kiếm được bình thường mà

Xem hình
tao highlight search

Giáo viên trả lời:
Trong ví dụ cơ bản tìm phần tử trong mảng này có sử dụng hàm array_search. Đối với hàm này nó sẽ trả về khoá của phần tử đã tìm được nếu tìm thấy, ngược lại trả về false (tìm không thấy). Và trong bài này ta cũng không có duyệt qua hết tất cả các phần tử trong mảng để tìm hết các phần tử muốn tìm.

Trong bài này ta có thể chỉnh lại chút để tìm chính xác vị trí của số cần tìm.

foreach($arr as $k=>$v)
{
if($v==$socantim)
{
$vitri=$k;
$vitri=$vitri+1;
$temp.= "$vitri;";
}
}
if($temp=="")
$ketquatim="Không tìm thấy số $socantim trong mảng";
else
$ketquatim.="Tìm thấy số $socantim tại vị trí số ".$temp." trong mảng";

Giáo viên trả lời:
Địa chỉ http://project43.vietchuyen.org đã được chuyển sang địa chỉ http://project43.hocwebonline.info/

Còn link download này http://hoconline.vietchuyen.edu.vn/softweb/googlemap.rar dã được chuyển sang địa chỉ http://hocwebgiare.com/softweb/googlemap.rar
Bạn thử vào lại các địa chỉ này xem.

Giáo viên trả lời:
Trong code của Bạn thấy đặt tên nút và gọi nút không giống nhau nên nó không phản ứng.

<input name="btn_tinh" type="submit" class="button blue" value="Phát sinh và tính toán"/>
 Sửa lại cho đúng nên nút chỗ dòng này

if(isset($_POST['btn_tinh']) && $_POST['sopt'] > 0){

Giáo viên trả lời:
Trong classnv_sx có một vài chỗ bạn set sai và return sai

Sửa lại ớ các dòng này
function set_socon($v)
{
if(is_numeric($v) && $v>=0)
$this->socon=$v; //fixed
}

function set_gioitinh($v)
{
if($v==0||$v==1)
$this->gioitinh=$v; //fixed
else
$this->gioitinh=0; //fixed
}

function set_sosanpham($v)
{
if(is_numeric($v)&&$v>0)
$this->sosanpham=$v; //fixed
}

Lưu ý lại cách khởi tạo đối tượng trong class theo trình tự các tham số như thế nào thì khi gọi các phương thức này ta phải truyền các tham số đúng như trình tự đã tạo bên trong class

Trong trang vidu_qlnv sửa lại dòng này

$ob=new nv_sx($hovaten,$ngayvaolam,$ngaysinh,$socon,$gioitinh,$sosp); //Fixed

Chú ý: trình tự các tham số trong này phải truyền đúng như đã tạo bên trong class, và các biến này là các biến tạm mà bạn đã lấy từ phương thức $_POST

Kiểm tra mail và sửa và test lại thử đi






Giáo viên trả lời:
Bộ DWCC chỉ hỗ trợ mạnh làm HTML5/CSS3/RWD và làm web chạy trên di động, còn làm về web động PHP & MYSQL thì nó rất dỡ, chỉ có bảng DWCS3 và DWCS4 là hỗ trợ làm web động PHP & MySQL tốt thôi.

Mặc định thì DWCC không hỗ trợ bảng Toolbox chỉ có DWCS3 và DWCS4 hỗ trợ thôi bạn.
Một máy tính cài bao nhiêu phần mềm DW cũng được, phần mềm DWCS3 tương đối rất nhẹ, chỉ cần RAM 256 là dư sức dùng rồi.
Máy bạn chỉ cần cài DWCS3 là đủ rồi, bảng DWCS3 bạn cài thêm HTML5/CSS3 vào nữa là tương đương DWCC rồi thậm chí chạy ngon hơn nhiều và làm được nhiều chuyện hơn thằng DWCC.
Bảng DWCC nếu bạn thấy nặng thì có thể gỡ bỏ cũng được, chúng ta cài nhiều bản DW khác nhau là để trãi nghiệm cách dùng nhưng sau này bảng nào ổn định và chạy ngon làm được nhiều việc là ta chọn dùng thôi Bạn và DW cũng chỉ là bộ soạn thảo web thôi, quan trọng là khi chúng ta đứng trong DW ý tưởng làm web của ta là dùng nó để làm ra sản phẩm gì thì đó mới là quan trọng.


Giáo viên trả lời:
Nếu Bạn dùng DWCC thì không cần cài đặt. Để dùng bộ này Bạn nên dùng DWCS3 là chạy ổn định nhất. 

Extension này có thể chạy trên DWCS4 và DWCS3 nhưng DWCS3 là chạy ổn định nhất. 
Do đó bạn nên cài thêm bộ DWCS3 vào máy và cái bộ này Plugin vào nó để làm.

Giáo viên trả lời:

Sửa lại những chỗ đánh dấu màu vàng

hightlight search

Bạn vào phần thư viện tài nguyên web của tôi có rất nhiều mẫu form kiểm tra lỗi bằng Jquery, bạn hãy download về và áp dụng vào thử đi

Giáo viên trả lời:
Trong trang bt2_09.php bạn xử lý như sau:


<?php
function highlight($text, $words) {
preg_match_all('~\w+~', $words, $m);
if(!$m)
return $text;
$re = '~\\b(' . implode('|', $m[0]) . ')\\b~';
return preg_replace($re, '<span style=background-color:yellow><b>$0</b></span>', $text);
}
?>
<!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>
<link href="dd.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="711" border="1" align="center">
<tr>
<td class='tieude'>TÌM KIẾM THÔNG TIN SỮA</td>
</tr>
<tr>
<td align="center"><form id="form1" name="form1" method="post" action="bt2_09.php">
Tên sữa :
<input name="ten_sua" type="text" id="ten_sua" value="<?php if(isset($_POST["ten_sua"])) echo $_POST["ten_sua"];?>" />
<input type="submit" name="button" id="button" value="Tìm kiếm" />
</form></td>
</tr>
</table>
<p align="center">
<?php
$db = mysql_connect("localhost","root","123456");
if (!$db)
{
echo "Không thể kết nối CSDL";
exit;
}
$db_select = mysql_select_db("ql_ban_sua");
if (!$db_select)
{
die ("Không tồn tại CSDL ". mysql_error());
}
if (isset($_POST['ten_sua']) && $_POST['ten_sua'] != "")
{
$ten_sua = trim($_POST['ten_sua']);
$result = mysql_query("SELECT * FROM sua, hang_sua where sua.Ma_hang_sua=hang_sua.Ma_hang_sua and Ten_sua like '%$ten_sua%'");
if (mysql_num_rows($result)<>0)
{
$n = mysql_num_rows($result);
echo "<p align='center'><b>Có $n sản phẩm được tìm thấy</b></p>";
echo "<table align='center' width='600' border='1'>";
while ($row = mysql_fetch_object($result))
{
$ten_sua = highlight($row->Ten_sua,$ten_sua);
$hang_sua = $row->Ten_hang_sua;
$hinh = "hinh_sua/".$row->Hinh;
$hinh = "<img src='$hinh' alt = '$ten_sua'>";
$tpdd = nl2br($row->Tp_dinh_duong);
$loi_ich = nl2br($row->Loi_ich);
$trong_luong = $row->Trong_luong;
$don_gia = number_format($row->Don_gia,0,'.','.');
echo "<tr>";
echo "<td colspan='2' align='center' class='tieudephu'>$ten_sua - $hang_sua</td>";
echo "</tr>";
echo "<tr>";
echo "<td width='128' align='center'>$hinh</td>";
echo "<td width='437' align='left'>";
echo "<table width='395' border='0' align='left'>";
echo "<tr><td width='389'><b>Thành phần dinh dưỡng:</b><br />$tpdd</td></tr>";
echo "<tr><td><b>Lợi ích:</b><br />$loi_ich</td></tr>";
echo "<tr><td align='right'><b>Trọng lượng :</b> $trong_luong gr - <b>Đơn giá:</b> $don_gia VNĐ</td></tr>";
echo "</table>";
echo "</td>";
echo " </tr>";
}
echo "</table>";
}
else
echo "Không tìm thấy sản phẩm này!";
}
?>
</p>
 

</body>
</html>

Giáo viên trả lời:

Trong trang xuất ra kết quả tìm bạn lấy từ người dùng nhập vào bằng phương pháp GET
<?php $searchstring=trim($_GET[' keyword']); ?>

Viết một hàm PHP để tô nền từ khoá

<?php
function search_highlight($needle, $replace, $haystack)
{
$haystack = eregi_replace($needle,$ replace,$haystack);
return $haystack;
}
?>

Chỗ xuất ra tiêu đề bài viết gọi hàm tô nền ví dụ như mẫu code bên dưới

<?php echo search_highlight($ searchstring,"<span style='background-color: yellow'><b>$searchstring</b></ span>",$row_rs_ketquaimkiem[' tieudetin']); ?>

Giáo viên trả lời:
Bạn hãy dùng phần mềm này http://sinhvienit.net/ forum/navicat-8-for-mysql- crack.232610.html

Convert file Excel sang dạng SQL, xuất ra .SQL rồi mới Import được vào phpmyadmin

Giáo viên trả lời:
Tôi đã kiểm tra source của bạn và đã sửa lại như theo ý muốn của Bạn rồi đó. hãy kiểm tra mail download về làm thử đi, có gì không hiểu cứ trao đổi.

Giáo viên trả lời:
hoc thiet ke web chuan seo


Khi chèn Flash trong DW CS3 nó sẽ tạo ra một thẻ <object></object>
Xung quanh thẻ này nó lại có một đoạn script va noscript. Bạn hãy xoá đoạn script và noscript này đi chỉ để lại đoạn màu xanh <object>... </object> thôi

Giáo viên trả lời:
Sản phẩm nào mà chưa có hình thì có nghĩa là tại phần tử đó giá trị của nó sẽ bằng rỗng, vậy khi duyệt mãng xuất ra trong trang list thì bạn thử kiểm tra nếu tại phần tử có khoá chứa hình mà bị rỗng thì xuất ra thông báo còn ngược lại thì xuất ảnh.


<tbody>
<?php
foreach($arr_sanpham_2_chieu as $arr_sub):
?>
<tr>
<td><?php echo $stt?></td>
<td><?php echo $arr_sub[0]?></td>
<td><?php echo $arr_sub[1]?></td>
<td>
<?php if($arr_sub[2]!="") {?>
<img src="images/<?php echo $arr_sub[2]?>" width="100" height="180" alt="<?php echo $arr_sub[1]?>">
<?php } else { echo "Chưa có hình";}?>
</td>
<td><?php echo number_format($arr_sub[3])?> VND</td>
<td><a href="edit_sanpham.php?masp=<? php echo $arr_sub[0]?>"><img src="images/edit.png"></a></ td>
<td><a href="delete_sanpham.php?masp= <?php echo $arr_sub[0]?>" onClick="return xacnhan();"><img src="images/delete.png"></a></ td>
</tr>
<?php $stt++; endforeach ?>
</tbody>


Nếu vẫn chưa làm được bạn gửi source ví dụ của bạn qua để tôi kiểm tra cho bạn.

Giáo viên trả lời:

$hoten="";
$ho ="";
$tendem = "";
$ten ="";
if(isset($_POST['btn_tach'])){
$hoten = $_POST['hoten'];
$arr = explode(" ",$hoten);
print_r($arr);
$ho = $arr[0];
//echo $ho;
$sopt = count($arr);
//echo $sopt;
$ten = $arr[$sopt-1];
//echo $ten;
for($i=1; $i<=$sopt-2 ;$i++){
$tendem.=$arr[$i]. " ";
//echo $tendem;
}
em chưa hiểu phần giải thích của thầy về phần $i<=$sopt-2.
ở đây theo ý hiểu của em thì $sopt-2 tức là $sopt - $arr[0] (họ) và $arr[$sopt-1] (tên)
có đúng ko ạ?

======================================================

Trong ví dụ tách họ và tên này ví dụ người dùng nhập vào chuỗi Nguyễn Huỳnh Thuý Phượng
=> hoten sẽ là Nguyễn Huỳnh Thuý Phương và đây là một chuỗi do đó muốn lấy ra ho, tendem và ten ta phải dùng hàm tách chuỗi thành mảng explode có nghĩa là mỗi phần tử trong chuỗi này ta sẽ tạo thành các phần tử trong mảng arr
=> mảng arr của chúng ta là 1 mảng tự động có 4 phần tử
trong đó

$arr[0]="Nguyễn"
$arr[1]="Huỳnh"
$arr[2]="Thuý"
$arr[3]="Phượng"

Ở đây ta có dùng hàm count đế đếm số phần tử trong mảng arr nà và sau khi đếm được ta lưu vào trong biến số phần tử
$sopt và trong trường hợp này mảng arr của chúng ta có 4 phần tử do đó biến $sopt=4

Nhìn vào mảng $arr này ta thấy để lấy ra ho thì ta chỉ cần vào mảng lấy ra phần tử có khoá là 0 (là phần tử đầu tiên trong mảng vì do mảng này là mảng tự động do đó khoá được đánh số là 0)

=> $ho=$arr[0]

Còn để lấy ra được tên thì ta sẽ vào trong mảng arr lấy ra phần tử có khoá bằng số phần tử của mảng - đi 1
Ở đây tại sau là ta phải trừ đi 1 ? Bạn thấy số phần tử của mảng của chúng ta là 4 do hàm count nó đếm được, vậy sopt-1 sẽ là 4-1=3
Mảng cùa ta là mảng tự động luôn đánh số đi từ 0 do đó phần tử cuối sẽ là sopt-1
$ten = $arr[$sopt-1];
Trong đây sopt=4 , ta trừ đi 1 còn 3, do đó biến ten sẽ lưu được giá trị của phần tử cuối trong mảng $arr[3]
Còn để lấy ra được tên đệm thì ta phải duyệt qua các phần tử còn lại của mảng $arr (có nghĩa là chúng ta sẽ duyệt từ phần tử thứ 2 tới phần tử kế cuối trong mảng $arr thôi vì phần tử đầu và phần tử cuối chúng ta đã lấy ra rồi.

Do đó trong vòng lặp for bạn thấy chúng ta đặt biến đếm $i=1 (có nghĩa là chúng ta sẽ duyệt từ phần tử thứ 2 bên trong mảng $arr đó là $arr[1] => chính là phần tử thứ 2) và chúng ta sẽ duyệt tới phần tử kế cuối trong mảng $arr (đó là phần tử $arr[2]) do đó giới hạn trong vòng lặp for ta đặt là$i<=$sopt-2 . Trong đây sopt=4 mà ta trừ cho 2 => $i<=2. vậy ta ta chỉ duyệt qua các phần tử là $arr[1] và $arr[2]
Ở lần duyệt đầu tiên $i=1 => ta duyệt qua phần tử có khoá là 1 $arr[1] và lấy giá trị của nó ra lưu vào biến $tendem
Sau đó biến $i tăng lên 1 đơn vị vậy $i=2 ta sẽ duyệt qua phần tử có khoá là 2 $arr[2] sau đó ta cộng dồn giá trị của 2 phần tử này lại và nối thêm khoảng trắng$tendem.=$arr[$i]. " ";
.= là ta cộng dồn chuỗi lại và chúng ta cộng dồn giá trị của phần tử thứ i đang duyệt lại và cộng thêm khoảng trắng

Ở đây$i<=$sopt-2 là chúng ta phải tính là phải duyệt từ đâu tới đâu để lấy ta được tên đệm
Còn$arr[$sopt-1] => thì chỗ này lấy ra tên đúng rồi
Còn bạn hiểu $sopt-2 tức là $sopt - $arr[0] (họ) là sai $sopt là 4 là số nguyên còn $arr[0] đang chứa giá trị là 1 chuỗi (Nguyễn) thì không thể trừ với nhau được bạn

Giáo viên trả lời:
Mỗi thằng mình đặt id khác nhau cho nó thôi, sau đó đoạn script mình gọi đúng id đó là được


vd trong trang chủ index.php mình có 2 đoạn gọi 2 cái everslider khác nhau

<script type="text/javascript">
$(document).ready(function(){
/* Fullwidth slider */
$('#fullwidth_slider').everslider({ => gọi đúng id của everslider trong trang tinanh.php
mode: 'carousel',
moveSlides: 1,
slideEasing: 'easeInOutCubic',
slideDuration: 700,
navigation: true,
keyboard: true,
nextNav: '<span class="alt-arrow">Next</span>',
prevNav: '<span class="alt-arrow">Next</span>',
ticker: true,
tickerAutoStart: true,
tickerHover: true,
tickerTimeout: 2000
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
/* Fullwidth slider */
$('#fullwidth_slider_1').everslider({ => gọi đúng id của everslider trong trang tinanh_1.php
mode: 'carousel',
moveSlides: 1,
slideEasing: 'easeInOutCubic',
slideDuration: 700,
navigation: true,
keyboard: true,
nextNav: '<span class="alt-arrow">Next</span>',
prevNav: '<span class="alt-arrow">Next</span>',
ticker: true,
tickerAutoStart: true,
tickerHover: true,
tickerTimeout: 2000
});
});
</script>

==========================================================================

<div id="fullwidth_slider" class="everslider fullwidth-slider"> => vd cái này trong trang tinanh.php


<div id="fullwidth_slider_1" class="everslider fullwidth-slider"> => vd cái này trong trang tinanh_1.php

Giáo viên trả lời:
Đây là một thư viện hiệu ứng Jquery do người ta tự viết ra và họ tự đặt tên các thuộc tính thôi. Trong thư viện jquery của họ sẽ gọi và truy xuất tới các thuộc tính này.

sb là Storybox vậy nhìn vào là biết source này nguồn ở đâu. Giống như khi bạn viết thẻ html bạn tạo các id cho các thẻ của Bạn để sau này nhìn vào source biết đó là của mình làm ngay
<section id="hocwebgiare">
     
</section>

Vậy mở source lên sẽ biết source này mã nguồn của hocwebgiare.
Nếu có thời gian thì Bạn nghiên cứu thêm về lập trình Jquery nữa thì sẽ hiểu kỹ hơn về nó.

Giáo viên trả lời:
Bạn hãy copy đoạn code js sắp lộn xộn này, mở website http://jsbeautifier.org/

Dán đoạn vừa mới copy vào đây sau đó nhấn Ctrl + Enter , sau đó copy dán ngược đè vào đoạn lộn xộn rồi tìm hiểu xem người ta làm gì trong đó thôi.