2010-09-24 25 views
15

Vì vậy, tôi đã tự hỏi liệu có thể lưu trữ dữ liệu đến từ một biểu mẫu dưới dạng biến phiên hay không.Lưu trữ dữ liệu biểu mẫu dưới dạng biến số phiên

Heres những gì tôi có cho đến nay, nhưng tôi không biết phải đặt gì cho Mẫu hành động.

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

<strong>Test Form</strong> 
<form action="" method"post"> 
    <input type="text" name="picturenum"/> 
    <input type="submit" name="Submit" value="Submit!" /> 
</form> 

<? 
    if (isset($_POST['Submit'])) { 
     $_session['picturenum'] = $_POST['picturenum']; 
    } 
?> 

<strong><? echo $_session['picturenum'];?></strong> 
+3

Trả lời

7

Điều đó hoàn toàn ổn và sẽ hoạt động. Nhưng để sử dụng phiên bạn phải đặt session_start(); trên dòng đầu tiên của mã php. Vì vậy, về cơ bản

<?php 
session_start(); 

//rest of stuff 

?> 
+0

# đang hoạt động sẽ tải lại hiện tại trang đó là những gì bạn muốn nó làm như vậy php chạy. –

2

Có điều này là có thể. kizzie là chính xác với các session_start(); phải đi đầu tiên.

khác quan sát tôi làm là bạn cần để lọc dữ liệu mẫu của bạn sử dụng:

strip_tags($value); 

và/hoặc

stripslashes($value); 
+0

Vì vậy, về cơ bản điều này chỉ làm vệ sinh dữ liệu? –

+1

-1 Đây là câu trả lời hoàn toàn vô dụng. 'stripslashes()' là vô ích bây giờ rằng dấu ngoặc kép ma thuật được tắt theo mặc định (và điều này cũng sẽ "khử trùng" dữ liệu của bạn nếu có). Ngoài ra tại sao bạn muốn làm 'strip_tags()' (hoặc 'stripslashes()') trên thông tin bạn lưu vào các phiên? – NullUserException

+1

Bạn không thể được đảm bảo rằng dấu ngoặc kép ma thuật tắt. Tôi đã làm việc với quá nhiều khách hàng sử dụng dịch vụ lưu trữ mà họ không có quyền kiểm soát và báo giá ma thuật đã được bật. Đó là một thực hành tốt nhất để không có gì. Điều gì sẽ xảy ra nếu mã được di chuyển hoặc máy chủ thay đổi cài đặt, v.v ... –

28

Để sử dụng các biến session đó là cần thiết để bắt đầu phiên giao dịch bằng session_start chức năng này sẽ cho phép bạn lưu trữ dữ liệu của mình trong biến toàn cục $_SESSION theo cách liên tục.

do đó, mã của bạn cuối cùng sẽ trông như thế này:

<strong>Test Form</strong> 
<form action="" method"post"> 
<input type="text" name="picturenum"/> 
<input type="submit" name="Submit" value="Submit!" /> 
</form> 

<?php 

// starting the session 
session_start(); 


if (isset($_POST['Submit'])) { 
$_SESSION['picturenum'] = $_POST['picturenum']; 
} 
?> 

<strong><?php echo $_SESSION['picturenum'];?></strong> 

để làm cho nó dễ sử dụng và để tránh quên nó một lần nữa, bạn có thể tạo một session_file.php sẽ được bao gồm trong tất cả các mã của bạn và sẽ bắt đầu phiên cho bạn

session_start.php

<?php 
    session_start(); 
?> 

và sau đó bao gồm nó wher bao giờ bạn thích:

<strong>Test Form</strong> 
<form action="" method"post"> 
<input type="text" name="picturenum"/> 
<input type="submit" name="Submit" value="Submit!" /> 
</form> 

<?php 

// including the session file 
require_once("session_start.php"); 


if (isset($_POST['Submit'])) { 
$_SESSION['picturenum'] = $_POST['picturenum']; 
} 
?> 

đó là cách di chuyển dễ dàng và dễ dàng hơn trong tương lai.

nhận xét khác

  • nếu bạn đang sử dụng Apache phiên bản 2 trở lên, được carefull thay vì
    <?
    để mở thẻ php, sử <?php, nếu mã của bạn sẽ không được giải thích

  • tên biến trong php có phân biệt chữ hoa chữ thường thay vì viết $ _session, viết $ _SESSION ở thủ đô lett ers

làm việc tốt!

+0

Có thể truy xuất các giá trị đầu vào bằng cách sử dụng id của chúng thay vì tên không? – Amyunimus

+0

Câu hỏi ngớ ngẩn. Nếu bạn bắt đầu một phiên làm việc và sau đó thực hiện (vô tình) một 'session_start();' sẽ xóa tất cả dữ liệu của phiên đầu tiên? – BeNice

+1

@OldMauiMan, gọi 'session_start();' (vô tình) hai lần trong cùng một mã sẽ không làm gì sai. Cách duy nhất để xóa sạch tất cả dữ liệu là sử dụng 'session_destroy(); ' –

1

Bạn có thể giải quyết vấn đề này sử dụng mã này:

if(!empty($_GET['variable from which you get'])) 
{ 
$_SESSION['something']= $_GET['variable from which you get']; 
} 

Vì vậy, bạn sẽ có được các biến từ một hình thức GET, bạn sẽ lưu trữ trong $ _SESSION biến [ 'bất cứ điều gì'] chỉ một lần khi $ _GET [' biến mà bạn nhận được '] được đặt và nếu nó trống $ _SESSION [' something '] sẽ lưu trữ thông số cũ

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