2012-01-10 3 views
1

Я имел эту работу, просто передавая данные из одной переменной в другую, как так:Хранение форматированной переменной в MySQL DB?

$CalcsSets = $DisplayCalcs; 

без необходимости использовать петлю внутри первого, если() заявление и вставить данные без кавычек, но все внезапно он перестает работать, и я не уверен, почему (он только начал показывать последнее целое число), поэтому я пошел с более сложным кодом, пытаясь заставить его работать снова, как показано ниже.

Вот сложный код, я работаю с:

for($i=1; $i<=$CalcSets; $i++){ 


$calculations = PerformCalc($min, $highest, $OperatorType); 

echo 'Calculations performed for '.$SetText[$i]; 

    foreach ($calculations as $key => $DisplayCalcs) { 
     echo $SetCalc[] = $DisplayCalcs.', '; //stores calculations with ',' in 
              //array. 
} 

if($CalcSets == 1){ 

    for($i=0;$i<$CalcSets;$i++){ 
     $SetResults = $SetCalc[$i]; 
     echo '<strong>'.(string)$SetResults.'</strong>';    
    } 
     DB_Insert($SetResults); 
} 

Что он должен сделать, это вставить значения в следующем формате (1,2,3,4,5,) в базу данных в VARCHAR, но теперь все, что он показывает, - это последнее целое число без запятой. Я изначально хотел просто хранить целые числа, а не запятую, но я не мог заставить его отображаться на странице с запятыми после каждого целого числа, поэтому я пошел по этому маршруту, как упоминалось ранее.

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

Причина: Я делаю это так, потому что на странице результатов она должна отображаться в указанном выше формате.

FYI, я проверил строку DB и по-прежнему установлен на VARCHAR с длиной 10.

ОБНОВЛЕНИЕ СДЕЛАТЬ НАМЕРЕНИЯ БОЛЕЕ ОЧИСТИТЬ

Хорошо, я собираюсь вернуться на круги своя, и попытаться сделать мое намерение как можно четче. Я переписывал этот фрагмент кода больше раз, чем мне хотелось подсчитать, а мой мозг - все туманно.

array1 = array(1, 2, 3, 4, 5, 6); 

foreach(array1 as $key => $data){ 
    echo $data.','; 

// will display 1,2,3,4,5,6, in browser. 
} 

if(is_true == 1){ 

INSERT ALL $data values into DB here. 

} 

Это то, что я пытаюсь сделать в ней простейшая форме, я просто экстремальные трудности в достижении своей цели.

Второе обновление - Тема решаемых

По-видимому, поле DB должно было быть установлено в текст, а не VARCHAR. Думаю, мы узнаем что-то новое каждый день.

Еще раз спасибо всем за вашу помощь. Он был очень благодарен!

+0

предложение с лучшей проектной точки зрения. Тип данных TEXT имеет предел приема 65536 символов; поэтому, если вы не ожидаете, что ваши данные будут такими длинными, возможно, вы можете подумать об использовании VARCHAR (300) – Abhay

ответ

2

Мне очень жаль, но я не мог сделать много смысла из исходного кода, но с упором только на последний ПЧ и содержащее LOOP, я думаю, что проблема с оператором присваивания:

$SetResults = $SetCalc[$i]; 

Следует вместо этого использовать. = Для конкатенации. Вот как это должно выглядеть:

if($CalcSets == 1){ 
    for($i=0;$i<$CalcSets;$i++){ 
     $SetResults .= $SetCalc[$i]; 
     echo '<strong>'.(string)$SetResults.'</strong>';    
    } 
    DB_Insert($SetResults); 
} 

Надеюсь, что это сработает!

Я полностью согласен с решением от @KemalFadillah для использования метода implode(). Из вашего фрагмента кода я понимаю, что $ вычисления - это массив, в котором хранятся основные значения, т. Е. Массив (1, 2, 3, 4, 5). Таким образом, вы можете сделать:

$calculations = PerformCalc($min, $highest, $OperatorType); 
$s = implode (', ', $calculations); 
DB_Insert($s); 

Надеюсь, это имеет смысл?

2

Вы выполняете последний цикл, только если $calcSets == 1 и имеют $i<$calcSets состояние


Как делать это, как этот

$SetCalc = ""; 
foreach ($calculations as $key => $DisplayCalcs) { 
     echo $SetCalc .= $DisplayCalcs.', '; 
} 
DB_Insert("(".$SetCalc.")"); 
+0

Правильно. Это потому, что следующее условие: if ($ CalcSets> = 2, и я хочу, чтобы он выполнялся один раз, если был выбран только один CalcSet.Я думаю, я мог бы удалить второе условие if() и просто сделать это один раз. Первоначально if() была не только переменная $ variable = $, как было упомянуто ранее. – Cryotech

+0

Ну, тогда зачем использовать цикл for, если он может запускаться только один раз? – Vultour

+0

У меня изначально не было цикла, как указано ранее. другая переменная, но по какой-то причине она перестала работать, поэтому я пошел по этому пути, чтобы заставить ее работать снова. На самом деле мне нужны два оператора if, потому что второй оператор if() содержит специальные условия, позволяющие пользователю «выбирать и сохранять», но в то время как его запускать только один раз. – Cryotech

2

Вы ищете функции implode() для форматирования номера.

$formatted = implode(',', $calculations); // Produce 1,2,3,4,etc... 

http://php.net/manual/en/function.implode.php

+0

Привет, Кемаль, в то время как это работает для форматирования, я все еще могу вставлять и отображать последнее целое число в БД, и я не уверен, почему. Например, скажем, что результаты $ CalcSet: 1,2,3,4,5, единственное, что вставлено в БД, равно 5, и больше ничего. Когда я помещаю код вставки в цикл, все добавляется, но по одной строке за раз, и я хочу, чтобы эта полная строка была добавлена ​​в БД и извлечена и отображена как 1,2,3,4,5. – Cryotech