2009-08-03 26 views
10

Nếu tôi có một cái gì đó như thế này:

?FormSub=Submit&qty=1&partno=ipod&notes=apple&unitprice=102.99&rowid=1&qty=2&partno=Ear+Buds&notes=Headphones&unitprice=45.99&rowid=2 

Có thể lặp qua GET để trả lại kết quả vào một bảng HTML và cũng thêm vào một bảng SQL?

Hoặc tôi sẽ cần phải thêm rowid để sau đó kết thúc của mỗi $_GET (ví dụ: qty1=1&partno1=ipod ...)?

Cảm ơn bạn đã tìm kiếm.

+1

khử trùng đầu vào của người dùng trước khi thực hiện bất kỳ điều gì với họ – ardsrk

+18

Không ai quên ít Bobby Bàn ... – Skilldrick

+6

@Skilldrick: bắt buộc liên kết đến truyện Little Bobby Tables: http://xkcd.com/327/ – Dinah

Trả lời

36

Mặc dù vậy, bạn có thể lặp qua $_GET. Nó chỉ là một mảng:

foreach ($_GET as $key => $value) { } 

Khi bạn đi qua để thực hiện truy vấn SQL, hãy nhớ vệ sinh tất cả các yếu tố đầu vào của bạn. Tương tự như vậy để hiển thị các giá trị trên trang. Sử dụng htmlentities để vệ sinh cho hiển thị HTML. Giả sử cơ sở dữ liệu của bạn là MySQL, hãy sử dụng mysql_real_escape_string cho SQL.

+0

[Một số người nói] (https://stackoverflow.com/questions/46483/htmlentities-vs-htmlspecialchars) rằng 'htmlspecialchars' là tốt hơn' htmlentities', sự lựa chọn cho người đọc. – reallynice

6

$ _GET là một mảng .. vì vậy bạn chỉ có thể lặp trên nó sử dụng foreach

foreach($_GET as $query_string_variable => $value) { 
    echo "$query_string_variable = $value <Br />"; 
} 

bạn cũng có thể làm extract($_GET) để làm cho tất cả chúng như biến .. nhưng tôi sẽ không đề nghị nó.

Nếu bạn muốn lưu nó vào db, bạn nên xem xét mysql_real_escape_string($value).

Để in bảng HTML .. bạn có muốn một cái gì đó như thế này không ??

$count = count($_GET); 
if($count > 0) { 
    echo "<table>"; 
    foreach($_GET as $query_string_variable => $value) { 
     echo "<tr><td>$query_string_variable</td><td>$value</td></tr>" 
    } 
    echo "</table>"; 
} 

hy vọng điều này sẽ hữu ích.

+1

+1, nhưng '$ query_string_variable' hơi dài và khó sử dụng. Một cái gì đó như '$ key' hoặc' $ param' dễ đọc hơn nhiều. – DisgruntledGoat

1

Xem FAQ How do I create arrays in a HTML <form>?

Vì vậy, trong trường hợp của bạn một yêu cầu của:

?FormSub=Submit&qty[]=1&partno[]=ipod&notes[]=apple&unitprice[]=102.99&rowid[]=1&qty[]=2&partno[]=Ear+Buds&notes[]=Headphones&unitprice[]=45.99&rowid[]=2 

sẽ tạo ra một mảng có dạng:

array(
    'FormSub' => 'Submit', 
    'qty' => array(
     0 => '1', 
     1 => '2' 
    ), 
    'partno' => array(
     0 => 'ipod', 
     1 => 'Ear Buds' 
    ), 
    'notes' => array(
     0 => 'apple', 
     1 => 'Headphones' 
    ), 
    'unitprice' => array(
     0 => '102.99', 
     1 => '45.99' 
    ), 
    'rowid' => array(
     0 => '1', 
     1 => '2' 
    ) 
) 

Nhưng tôi hy vọng bạn không chấp nhận những các giá trị không có xác thực hoặc thậm chí sử dụng nó cho một thứ tự thực tế.

Ngoài GET is intended to be used for data retrieval only:

Đặc biệt, quy ước đã được thành lập rằng GET và ĐẦU phương pháp KHÔNG NÊN có tầm quan trọng của thi một hành động khác hơn so với hồi.

Đối với các yêu cầu có phản ứng phụ (thay đổi dữ liệu trên máy chủ), bạn nên sử dụng POST.

6

xem! ai đó có thể dễ dàng thay đổi này và nộp:

?FormSub=Submit&qty=1&partno=ipod&notes=apple&unitprice=0.99&rowid=1&qty=2&partno=Ear+Buds&notes=Headphones&unitprice=0.05&rowid=2 

lưu ý: "unitPrice" là 102,99 và 45,99, nhưng đã được thay đổi để 0,99 và 0,05, tôi đoán họ đang ở trên bán tại một mức giá tuyệt vời!

+1

Cuộc gọi tốt! Amazon từng có một lỗ hổng trong mã của họ không quá tiên tiến hơn thế này. Thực sự có một số người có một số mặt hàng với giá rất cao. – Dinah

+0

Vâng, cảm ơn vì sự quan tâm của bạn - đây là một hệ thống trích dẫn nội bộ ... không phải cho Joe Public ..... –

+1

@Bifter, ngay cả khi điều này là để sử dụng "nội bộ", nó vẫn không phải là một cách rất tốt làm việc đó –

Các vấn đề liên quan