2013-03-21 3 views
0

Я пытаюсь выяснить, что я делаю неправильно, когда я совмещаю функцию разрыва с переменными сеанса. Я провел довольно много исследований уже по переменным сеанса и функции разрыва, но мне не удалось найти помощь в «объединении» двух.Использование функции разрыва PHP с переменными сеанса

Ниже приведен код, который я использую. Вы заметите, что $_SESSION['shirt_type'] «взорвался». Эта переменная собирает две части информации, тип рубашки и цену. Я хочу взорвать $_SESSION['shirt_type'] на два куска.

Однако, когда я пытаюсь повторить чанка [0] или [1], используя следующие,

echo "Shirt Type = {$_SESSION['$shirt_type_chunks[0]']}<br>"; 
echo "Shirt Price = {$_SESSION['$shirt_type_chunks[1]']}<br>"; 

Мой веб-страницу вторит следующим

Shirt Type = 
Shirt Price = 

Я считаю, что у меня есть синтаксис неправильный и я не смог найти ни одного места, демонстрирующего правильный синтаксис при попытке повторить разветвленную переменную сеанса.

Любая помощь, которая может быть предложена, будет ОТЛИЧНО оценена. Кроме того, я очень хорошо знаком с StackOverflow, поэтому, если я что-то написал неправильно, прошу прощения.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
<?php 
session_start(); 
$_SESSION['shirt_type'] = $_POST['shirt_type']; 
$_SESSION['shirt_type_chunks'] = explode("|", $shirt_type); 

$_SESSION['shirt_size'] = $_POST['shirt_size']; 
$_SESSION['shirt_size_chunks'] = explode("|", $shirt_size); 

$_SESSION['shirt_qty'] = $_POST['shirt_qty']; 

$_SESSION['price'] = $_SESSION['$shirt_type_chunks[1]'] + $_SESSION['$shirt_size_chunks[1]']; 
?> 
</head> 
<body> 
<p> 
    <?php 
    session_start(); 

    echo "Shirt Type = {$_SESSION['$shirt_type_chunks[0]']}<br>"; 
    echo "Shirt Price = {$_SESSION['$shirt_type_chunks[1]']}<br>"; 
    echo "Shirt Up Charge = {$_SESSION['$shirt_size_chunks[1]']}<br>"; 
    echo "Shirt Size = {$_SESSION['$shirt_type_chunks[0]']}<br>"; 
    echo "Shirt Qty = {$_SESSION['shirt_qty']}<br>"; 

    echo "Price = {$_SESSION['price']}<br>"; 
    ?> 
</p> 
</body> 
</html> 

ответ

1

Вы должны начать сеанс перед любым выходом. Изменить код:

<? session_start(); ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
... 
<title>Untitled Document</title> 
<? 
$_SESSION['shirt_type'] = $_POST['shirt_type']; 
$_SESSION['shirt_type_chunks'] = explode("|", $shirt_type); 
$_SESSION['shirt_size'] = $_POST['shirt_size']; 
$_SESSION['shirt_size_chunks'] = explode("|", $shirt_size); 

$_SESSION['shirt_qty'] = $_POST['shirt_qty']; 

$_SESSION['price'] = $_SESSION['$shirt_type_chunks[1]'] + $_SESSION['$shirt_size_chunks[1]']; 
?> 
</head> 

Второе, что вы имеете здесь не так, что $ _SESSION [ «shirt_type»] и $ shirt_type может быть та же переменная, если register_global = on в вашей системе. Старайтесь избегать использования тех же имен для переменных, что и для глобальных переменных, таких как $ _POST ['some_name'] и $ some_name или $ _SESSION ['var_name'] и $ var_name

И третий номер, замеченный @brenjt, вам нужен только один вызов для session_start() в вашем скрипте.

Fourth =) $_SESSION['$shirt_type_chunks[1]'] не будет работать. Использование одинарных кавычек в PHP означает, что интерпретатор даже не попытается найти какую-либо переменную в вашей строке. Небольшой пример:

<? 
$a = "Mike"; 
echo "Hi, my name is $a"; // will output Hi, my name is Mike 
echo 'Hi, my name is $a'; // will output Hi, my name is $a 
echo 'Hi, my name is '.$a; // will output Hi, my name is Mike 
?> 

Третий способ является наиболее эффективным, так как в этом случае PHP видит одиночные кавычки и не тратить ресурсы для анализа строки. Поэтому изменить его $_SESSION[$shirt_type_chunks[1]]

Вот что, как я полагаю, ты направлялся:

<?php session_start(); ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
<?php 
$shirtDetails = explode("|", $_POST['shirt_type']); 
$_SESSION['shirt_type'] = $shirtDetails['0']; 
$_SESSION['shirt_price'] = $shirtDetails['1']; 

$sizeDetails = explode("|", $_POST['shirt_size']); 
$_SESSION['shirt_size'] = $sizeDetails[0]; 
$_SESSION['shirt_up_charge'] = $sizeDetails[1]; 
$_SESSION['shirt_qty'] = $_POST['shirt_qty']; 

$_SESSION['price'] = $_SESSION['shirt_qty'] * $_SESSION['shirt_price'] + $_SESSION['shirt_up_charge']; 
?> 
</head> 
<body> 
<p> 
    <?php 
    echo 'Shirt Type = '.$_SESSION['shirt_type'].'<br>'; 
    echo 'Shirt Price = '.$_SESSION['shirt_price'].'<br>'; 
    echo 'Shirt Up Charge = '.$_SESSION['shirt_up_charge'].'<br>'; 
    echo 'Shirt Size = '.$_SESSION['shirt_size'].'<br>'; 
    echo 'Shirt Qty = '.$_SESSION['shirt_qty'].'<br>'; 
    echo 'Total Price = '.$_SESSION['price'].'<br>'; 
    ?> 
</p> 
</body> 
</html> 

Один последний вопрос - почему вы не просто создать один вход для каждой формы собственности? Почему вы хотите, чтобы эти данные были объединены |, действительно ли это необходимо?

+0

Вы также захотите упомянуть, что он должен удалить второй вызов 'session_start()'. – brenjt

+0

@brenjt, я не заметил второго, tnx –

+0

Привет всем, я задал 3 вопроса, заработал 16 рефери и 3 значка, но почему-то мне было запрещено публиковать вопросы. Я понимаю, что здесь есть более высокий уровень вопросов, чем традиционный форум, но я не знал до моего второго поста. Я никогда не публиковал оскорбления, не спрашивал фиктивные вопросы, и как только я узнал о более высоких стандартах, я (думал) внес необходимые изменения во все последующие вопросы. Я технический учитель, программист, не программирующий, но мои ученики действительно спрашивали о кодировании, и именно поэтому я здесь.Любые предложения 4 становятся бесплатенными? Я читаю http://goo.gl/C1Kwu СПАСИБО! – 2013-05-11 22:19:49

Смежные вопросы