2009-08-12 39 views
48

Tôi có biểu mẫu mà người dùng điền vào, trên biểu mẫu có nhiều trường giống nhau, như "tên dự án", "ngày dự án", "catagory", v.v. Dựa trên số lượng người dùng gửi:Nguyên nhân: "Thông báo: Không bù đắp chuỗi bù đắp" xuất hiện?

mục tiêu của tôi là:

  1. vòng lặp trong số các hình thức
  2. tạo câu lệnh SQL chèn cá nhân

Tuy nhiên, PHP ném cho tôi một thông báo rằng tôi dường như không hiểu:

Chú ý:

Chú ý: string uninitialized offset: 1 ... dataPasser.php trên đường dây 90

PHP

$myQuery = array(); 

if ($varsCount != 0) 
{ 
    for ($i=0; $i <= $varsCount; $i++) 
    { 
    $var = "insert into projectData values ('" . $catagory[$i] . "', '" . $task[$i] . "', '" . $fullText[$i] . "', '" . $dueDate[$i] . "', null, '" . $empId[$i] ."')"; 
    array_push($myQuery, $var);  
    } 
} 

Có tài liệu tham khảo này vấn đề tôi đang gặp nhưng chúng không chính xác và tôi đang gặp khó khăn khi suy luận xem vấn đề thực sự bắt nguồn từ đâu. Tôi sẽ đánh giá cao bất kỳ sự giúp đỡ nào trong việc hiểu những gì đang gây ra mảng không khởi tạo đúng cách.

+0

bạn để lại rất nhiều ra khỏi ví dụ này, nhưng đầu ra của var_dump ($ myQuery) là gì? – koen

+0

Đường dây 90 ở đâu và thông báo đầy đủ là gì? –

+1

Tôi chỉ muốn thêm rằng bạn không cần phải sử dụng array_push ở đây cả. Chỉ cần làm điều này. $ myQuery [] = $ var; – calumbrodie

Trả lời

53

Lỗi này có thể xảy ra nếu bất kỳ của các biến sau đây đã thực sự chuỗi hoặc null thay vì mảng, trong trường hợp truy cập chúng với một cú pháp mảng $var[$i] sẽ như thế nào cố gắng truy cập vào một nhân vật cụ thể trong một chuỗi:

$catagory 
$task 
$fullText 
$dueDate 
$empId 

Tóm lại, mọi thứ trong truy vấn chèn của bạn.

Có lẽ biến số $catagory bị viết sai chính tả?

+0

người đàn ông, tôi chỉ muốn đá chính mình vào đầu. TẤT NHIÊN! Chỉ có 1 $ empId duy nhất. Tôi đã tập trung vào mảng $ myQuery mà tôi không chú ý đến những người khác. Cám ơn rất nhiều! Tôi đã thay đổi $ empID [$ i] thành $ empId và thông báo biến mất vì $ empId KHÔNG phải là một mảng. –

+0

Tôi nghĩ một phần của sự nhầm lẫn ở đây là khi lập chỉ mục '$ var [$ i]' nó có thể là một chuỗi hoặc một mảng ... –

+0

+1 Đối với Perfect Ans (Y) ...! –

13

Điều đó có nghĩa là một trong các mảng của bạn không thực sự là một mảng.

Nhân tiện, nếu séc của bạn là không cần thiết. Nếu $ varsCount là 0 thì vòng lặp for sẽ không thực thi.

+0

yea, tôi đã nhìn thấy nhận xét này trước đây. Thật không may, tôi không hiểu làm thế nào nó không phải là một mảng? Tôi xuất dữ liệu vào FirePHP và tôi thấy nó thông qua POST và sau đó trong các biến là tốt. –

+0

ok cảm ơn, tôi chỉ đăng một phần mã để dễ đọc hơn. Cảm ơn một lần nữa! –

2

Hãy thử để kiểm tra và khởi tạo mảng của bạn trước khi bạn sử dụng chúng:

if(!isset($catagory[$i])) $catagory[$i] = '' ; 
if(!isset($task[$i])) $task[$i] = '' ; 
if(!isset($fullText[$i])) $fullText[$i] = '' ; 
if(!isset($dueDate[$i])) $dueDate[$i] = '' ; 
if(!isset($empId[$i])) $empId[$i] = '' ; 

Nếu $catagory[$i] không tồn tại, bạn tạo (chưa được khởi tạo) một ... đó là tất cả; => PHP cố gắng đọc trên bảng của bạn ở địa chỉ $i, nhưng tại địa chỉ này, không có gì, địa chỉ này không tồn tại => PHP trả lại cho bạn một thông báo và không đưa bạn vào chuỗi nào. Vì vậy, mã của bạn không phải là rất sạch sẽ, nó sẽ đưa bạn một số tài nguyên mà xuống hiệu suất máy chủ của bạn (chỉ là một rất ít).

chăm sóc mất khoảng MySQL giá trị bảng mặc định của bạn

if(!isset($dueDate[$i])) $dueDate[$i] = '0000-00-00 00:00:00' ; 

hoặc

if(!isset($dueDate[$i])) $dueDate[$i] = 'NULL' ; 
+0

phải, nhưng nếu nó được coi là một mảng, 'if (! Isset ($ myarray [$ i])) $ myarray [$ i] = mảng();' có lẽ? –

9

Các lỗi có thể xảy ra khi số lần bạn lặp mảng lớn hơn kích thước thực tế của mảng.ví dụ:

$one="909"; 
for($i=0;$i<10;$i++) 
    echo ' '.$one[$i]; 

sẽ hiển thị lỗi. trường hợp đầu tiên u có thể lấy mod của tôi .. ví dụ

function mod($i,$length){ 
    $m = $i % $size; 
    if ($m > $size) 
    mod($m,$size) 
    return $m; 
} 

for($i=0;$i<10;$i++) 
{ 
    $k=mod($i,3); 
    echo ' '.$one[$k]; 
} 

hoặc có thể là nó không phải là một mảng (có thể đó là một giá trị và bạn cố gắng truy cập vào nó như một mảng) ví dụ:

$k = 2; 
$k[0]; 
1

Kiểm tra các nội dung của mảng của bạn với

echo '<pre>' . print_r($arr, TRUE) . '</pre>'; 
Các vấn đề liên quan