2012-12-19 2 views
0

Travailler sur un projet et rencontrer des difficultés pour affecter un tableau multidimensionnel à une session.PHP: Affectation d'un tableau multidimensionnel à une session

Informations sur le projet:

entreprises devraient inscrire/livre pour les cours sur le site et une entreprise peut inscrire plus d'un cours et pour chaque cours, l'entreprise doit préciser le nombre de candidats et de leurs données bio.

Exemple:

Si enregistre la société XYZ pour le cours A, Cours B et Cours C. Et pour chaque cours fournit l'information de candidat comme suit:

<?php 

$all_reg_courses = array 
    (
    $course_id => array(
    "candidate_no" => $cand_no, 
    "all_candidates" => array(
array 
    (
    'cand_name' => 'Alex Holmes', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Male', 
    'cand_phone' => '070043635690', 
    'cand_job' => 'IT' 
), 
array 
    (
    'cand_name' => 'Tilla Reel', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Female', 
    'cand_phone' => '0700833435690', 
    'cand_job' => 'HR' 
), 
array 
    (
    'cand_name' => 'Bill Enya', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Male', 
    'cand_phone' => '07008055435690', 
    'cand_job' => 'Admin' 
) 
) 
), 
    $course_id => array(
    "candidate_no" => $cand_no, 
    "all_candidates" => array(
array 
    (
    'cand_name' => 'Alan Pole', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Male', 
    'cand_phone' => '07009973635690', 
    'cand_job' => 'IT' 
), 
array 
    (
    'cand_name' => 'Coleen Curtis', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Female', 
    'cand_phone' => '5553435690', 
    'cand_job' => 'HR' 
) 
) 
), 
    $course_id => array(
    "candidate_no" => $cand_no, 
    "all_candidates" => array(
array 
    (
    'cand_name' => 'Tamia James', 
    'cand_email' => '[email protected]', 
    'cand_sex' => 'Female', 
    'cand_phone' => '7673435690', 
    'cand_job' => 'HR' 
) 
) 
) 
); 

?> 

Ces données fournies pour les différents cours et la les candidats nommés pour chaque cours seront stockés temporairement dans une session et seront éventuellement envoyés dans la base de données si "Company XYZ" clique enfin sur le bouton "final submit" sinon toutes les données de la session seront détruites après un temps spécifique (ie cours le panier de réservation sera vidé)

J'ai essayé d'assigner le tableau multi-dimensionnel d'échantillon ci-dessus dans une session mais ce n'est pas seulement fonctionnant.

Obtention d'un message d'erreur: Impossible d'utiliser le décalage de chaîne;

Voici le code pour annexant le tableau à la session:

<?php 

session_name("cand_cart"); 
session_start(); 

$c_id = $_POST['c_id']; 
//$cand_no = $_POST['cand_no']; 

$_SESSION['cand_cart']['c_id']['cands'] = array(); 
$_SESSION['cand_cart']['c_id'] = array(); 
$_SESSION['cand_cart']['c_id']['cand_no'] = array(); 

$_SESSION['cand_cart']['c_id']['cand_no'] = $_POST['cand_no']; 
$_SESSION['cand_cart']['c_id'] = $_POST['c_id']; 

//$candidates = array(); 

foreach ($_POST['candidate'] as $i => $can) 
{ 
    $candidates[$i] = array(); 

    foreach ($can as $key => $value) 
    { 
     //$candidates[$i][$key] = $value; 
     $_SESSION['cand_cart']['c_id']['cands'][$i][$key] = $value; 
    } 
} 


echo '<pre>'; 
//var_dump($candidates); 
print_r($_SESSION['cand_cart']); 
echo '</pre>'; 

echo "<br><br>"; 

?> 

<table border="1" cellspacing="0" cellpadding="6"> 
    <thead> 
     <th>#</th> 
     <th>Name</th> 
     <th>Phone</th> 
     <th>Email</th> 
     <th>Sex</th> 
     <th>Position</th> 
    </thead> 
    <tbody> 
<?php 

foreach ($_SESSION['cand_cart'] as $i => $can) 
{ 
    $c = (object) $can; 
    $sn = $i + 1; 
    echo '<tr><td>' . $sn . '</td><td>' . $c->name . '</td><td>' . $c->phone . '</td><td>' . $c->email . '</td><td>' . $c->sex . '</td><td>' . $c->pos . '</td></tr>'; 
} 

?> 
    </tbody> 
</table> 

serais très reconnaissant obtenir de l'aide avec ce .. Merci!

+1

Quelle est l'erreur PHP exacte? – Rygu

+0

@Rygu, "Impossible d'utiliser le décalage de chaîne;" est écrit là – k102

+0

Avez-vous un numéro de ligne? C'est peut-être ici '$ _SESSION ['cand_cart'] ['c_id'] ['cands'] [$ i] [$ key] = $ valeur;' parce que vous ne semblez jamais le faire descendre à de nombreuses dimensions. Cependant, j'utiliserais plutôt des objets orientés objet plutôt qu'une cacophonie de tableaux multidimensionnels, cela ne ferait que vous hanter partout où vous allez utiliser ceci. OOP a été inventé pour une raison, et PHP5 a été entièrement orienté objet pour la même raison ... juste une suggestion cependant. – jbx

Répondre

0

Essayez de changer ces lignes:

$_SESSION['cand_cart']['c_id']['cands'] = array(); 
$_SESSION['cand_cart']['c_id'] = array(); 

à

$_SESSION['cand_cart']['c_id'] = array(); 
$_SESSION['cand_cart']['c_id']['cands'] = array(); 
+0

ne semble pas comprendre votre réponse cos c'est exactement ce que j'ai dans le code ... apprécierait si vous pouvez être plus détaillé. – Sms

+0

@Sms, voir la modification. – Shoe

+0

Merci J'ai eu l'erreur et ça marche mais le vrai problème c'est que je ne peux pas assigner plus d'un ID de cours et d'informations de candidat à la session. Par exemple, le nouvel ensemble d'informations sur les cours et les informations sur les candidats nommés remplacent les données existantes dans la session. Et j'ai besoin de stocker plus d'une information de cours et d'informations sur les candidats. Serait reconnaissant si vous pouviez aider avec ceci. – Sms

0

Vous écrasez l'ensemble des tableaux, perdre les informations stockées précédent

$_SESSION['cand_cart']['c_id']['cands'] = array(); 
$_SESSION['cand_cart']['c_id'] = array(); // here you overwrite the whole 'c_id' array and loose cands 

$_SESSION['cand_cart']['c_id']['cand_no'] = $_POST['cand_no']; 
$_SESSION['cand_cart']['c_id'] = $_POST['c_id']; // another overwite 
+0

merci! mais comment assigner le $ _post ['c_id'] à la session sans l'écraser? – Sms

-1

Il serait beaucoup plus facile de sérialisation undererialize les données avant de les stocker dans la session. Cela semble être plus léger et vous ne devez définir chaque valeur spécifique:

// Build up your data-Array from the submitted values stored in $_POST 
$data = array(); 
foreach($_POST['candidate'] AS $i => $can) 
{ 
    // Do your logic here, like you did before with the session 
} 

// Now serialize and store into session at once (= more performance) 
$_SESSION['data'] = serialize($data); 

Si vous souhaitez utiliser les données dans la requête suivante, vous devrez désérialisable:

$data = unserialize($_SESSION['data']); 

J'espère que cela t'aides.

+0

Merci! mais ne travaille pas ... – Sms

Questions connexes