2009-08-12 5 views
48

J'ai un formulaire que les utilisateurs remplissent, sur le formulaire il y a plusieurs champs identiques, comme "nom du projet", "date du projet", "catagorie", etc Basé sur le nombre de formulaires soumis:Quelles sont les causes: "Remarque: le décalage de chaîne non initialisé" apparaît?

Mon but est de:

    boucle
  1. sur le nombre de formulaires
  2. créer des déclarations individuelles d'insertion SQL

Cependant, PHP me jette un avis que je ne semble pas comprendre:

Avis:

Avis: chaîne non initialisée en offset: 1 ... dataPasser.php en ligne 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);  
    } 
} 

Il y a des références à ce problème que je suis en train de vivre, mais ils ne sont pas exacts et j'ai du mal à en déduire l'origine du problème. J'apprécierais grandement toute aide pour comprendre ce qui cause l'initialisation incorrecte du tableau.

+0

Vous laissez beaucoup de l'exemple, mais ce qui est la sortie de var_dump (myQuery $)? – koen

+0

Où est la ligne 90, et quel est le préavis complet? –

+1

Je voulais juste ajouter que vous n'avez pas besoin d'utiliser array_push du tout. Fais juste ça. $ myQuery [] = $ var; – calumbrodie

Répondre

53

Cette erreur se produirait si l'une des variables suivantes étaient en fait des chaînes ou nuls au lieu de tableaux, auquel cas les accès avec une syntaxe de tableau $var[$i] serait comme essayer d'accéder à un caractère spécifique dans une chaîne:

$catagory 
$task 
$fullText 
$dueDate 
$empId 

En bref, tout dans votre requête d'insertion.

La variable $catagory est peut-être mal orthographiée?

+0

homme, je veux juste me donner un coup de pied dans la tête. BIEN SÛR! Il n'y a qu'un seul $ empId. J'étais concentré sur le tableau $ myQuery que je n'ai pas fait attention aux autres. Merci beaucoup! J'ai changé $ empID [$ i] en $ empId et l'avis a disparu car $ empId n'est PAS un tableau. –

+0

Je pense qu'une partie de la confusion ici est que lors de l'indexation '$ var [$ i]' il pourrait s'agir d'une chaîne ou d'un tableau ... –

+0

+1 Pour Perfect Ans (Y) ...! –

13

Cela signifie qu'un de vos tableaux n'est pas réellement un tableau. Par ailleurs, votre vérification n'est pas nécessaire. Si $ varsCount vaut 0, la boucle for ne sera pas exécutée quand même.

+0

oui, j'ai déjà vu ce commentaire. Malheureusement, je ne comprends pas comment ce n'est pas un tableau? Je publie les données dans FirePHP et je le vois via le POST et ensuite dans les variables. –

+0

ok merci, j'ai seulement posté une partie du code pour le rendre facile à lire. Merci encore! –

2

Essayez de tester et initialiser vos tableaux avant de les utiliser:

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] = '' ; 

Si $catagory[$i] n'existe pas, vous créez (non initialisée) un ... qui est tout; => PHP essaie de lire sur votre table à l'adresse $i, mais à cette adresse, il n'y a rien, cette adresse n'existe pas => PHP vous renvoie un avis, et il ne vous met rien en chaîne. Donc, vous codez n'est pas très propre, il vous faut des ressources qui diminuent les performances de votre serveur (juste un peu).

Prenez soin de vos tables MySQL valeurs par défaut

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

ou

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

droit, mais que faire si c'est supposé être un tableau, 'if (! Isset ($ myarray [$ i])) $ myarray [$ i] = array();' peut-être? –

9

L'erreur peut se produire lorsque le nombre de fois que vous itérer le tableau est plus grande que la taille réelle du tableau.par exemple:

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

affichera l'erreur. premier cas u peut prendre le mod i .. par exemple

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]; 
} 

ou peut-être il pas un tableau (peut-être était une valeur et que vous avez essayé d'y accéder comme un tableau) par exemple:

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

Vérifiez le contenu de votre tableau avec

echo '<pre>' . print_r($arr, TRUE) . '</pre>'; 
Questions connexes