Cryotech
Cryotech

Reputation: 47

Storing formatted variable into MySQL DB?

I had this working by simply passing the data from one variable to another like so:

$CalcsSets = $DisplayCalcs;

without the need to use the loop inside the first if() statement and it inserted the data without quotes but all of a sudden it's stopped working and I'm not sure why (it only started showing last integer), so I went with the more complex code trying to get it to work again as shown below.

Here's the complex code I'm working with:

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

What it's supposed to do is insert values in the following format (1,2,3,4,5,) into the database in a VARCHAR row but now all it shows is the last integer with no comma. I originally wanted to just store the integers and not a comma but I couldn't get it to display on the page with commas after each integer so I went this route as mentioned earlier.

I realize I'm probably going about this the wrong way, but if any of you know a much easier, and shorter, way to do what I want, I'd be extremely appreciative of the help.

Reason I'm doing it this way, is because on the results page, it needs to show in the format mentioned above.

FYI, I did check the DB row and it is still set to VARCHAR with a length of 10 at the moment.

UPDATE TO MAKE INTENTIONS MORE CLEAR

Ok, I'm going to go back to square one and try to make my intention as clear as possible. I've been rewriting this code snippet more times than I care to count and my brain is all foggy lol.

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. 

}

That's what I'm trying to accomplish in it's simplest form, I'm just have extreme difficulty achieving my goal.

Second Update - Topic Solved

Apparently, the DB field had to be set to Text rather than VarChar. I guess we learn something new everyday.

Again, thanks everyone for all of your help. It was greatly appreciated!

Upvotes: 1

Views: 174

Answers (3)

Abhay
Abhay

Reputation: 6645

I'm sorry but I couldn't make much sense from the original code but focusing only on the last IF and the containing LOOP, I think the problem is with the assignment statement:

$SetResults = $SetCalc[$i];

It should instead use .= for concatenation. Here is how it should look:

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

Hope it works!

I completely agree with the solution from @KemalFadillah for using the implode() method. From your code snippet, I understand that $calculations is the array that stores the main values, i.e. Array(1, 2, 3, 4, 5). So you can do:

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

I hope that makes sense?

Upvotes: 2

Fad
Fad

Reputation: 9858

You're looking for the implode() function to format the numbers.

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

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

Upvotes: 2

Vultour
Vultour

Reputation: 373

You are executing the last for loop only if $calcSets == 1 and have an $i<$calcSets condition


How about doing it like this

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

Upvotes: 2

Related Questions