Page 1 of 1

[solved]Undefined variable and Undefined Index etc

PostPosted: 02. February 2012 01:40
by mickeymouse
I've been using XAMPP version 1.6 with no problems.
I changed to version 1.7 and with my same code, I'm getting a whole lot of messages like

Undefined variable and Undefined Index
my code is:
$row = mysql_fetch_row($Results)
$netassets[$row[4]] = $netassets[$row[4]] + $row[3];

Other messages are:
Uninitialized string offset
Undefined offset

What's happened?
Thanks

Re: Undefined variable and Undefined Index etc

PostPosted: 02. February 2012 02:18
by Sharley
Things have changed on the forum since your last visit so would you be so kind as to add your XAMPP version and Operating System to your profile, as per these instructions and associated information, so we can effect a suitable solution based on that profile info now and in the future:
viewtopic.php?f=16&t=48626
Thanks kindly. :)

Re: Undefined variable and Undefined Index etc

PostPosted: 02. February 2012 14:25
by mickeymouse
OK, I've updated my profile with XAMPP ver 1.7.7 and Windows 7.
Thanks

Re: Undefined variable and Undefined Index etc

PostPosted: 02. February 2012 19:28
by Altrea
Hi mickeymouse,

please edit your operation system info. Windows 7 can be everything from Windows 7 Embedded Standard Edition 32Bit up to Windows 7 Ultimate 64Bit with SP1. Especially the information about Windows 7 Type and if you use 32 or 64 bit are very important for providing you the correct support for your environment.

After that, full error messages and sourcecodes will make debugging over the internet much easier for us.
Maybe this thread will help you to get rid of some of your messages.

best wishes,
Altrea

Re: Undefined variable and Undefined Index etc

PostPosted: 03. February 2012 12:51
by mickeymouse
I've updated my profile concerning info on which Windows 7 is on my computer.
(Had to abreviate - not enough space in box.)

All I could find re Windows was that I have Windows 7 Family Premium Edition, Service Pack 1.
It does not give me any info about 32 or 64 bits.

However in my computer info I found: Computer System Type = 64 bits operating system.

Re: Undefined variable and Undefined Index etc

PostPosted: 03. February 2012 17:16
by Altrea
Thank you very much for updating your os-info :)

Now about your problem. Was the information (especially the link) i gave you helpful to solve some of your problems?
Or do you need any more help for this?

best wishes,
Altrea

Re: Undefined variable and Undefined Index etc

PostPosted: 04. February 2012 00:24
by mickeymouse
I could certainly use more help.

I've tried this code
if(isset($_SESSION['key']))
{$key=$_SESSION['key'];}
but it didn't change anything. Probably because I don't understand it.
I suppose I should be replacing 'key' with something; but what?

Many thanks!

Re: Undefined variable and Undefined Index etc

PostPosted: 04. February 2012 09:40
by Altrea
mickeymouse wrote:Probably because I don't understand it.
I suppose I should be replacing 'key' with something; but what?

$_SESSION is also just an example and has to be replaced with the array name you use.
key has to be replaced with the key of that array.

But as i said before: Without your sourcecode and the correct and full error message, we can't provide specific help for your error. It all depends on that.

best wishes,
Altrea

Re: Undefined variable and Undefined Index etc

PostPosted: 04. February 2012 19:14
by mickeymouse
Thanks for the tip re if(isset('key')) {$key = 'key';}
I tried it but it didn't do anything for me - same error msg.
this is what I put in: if(isset($row[4])){$key = $row[4];}

Here is my code:
line110: while ($row = mysql_fetch_row($Results))
line111: {$Bal[$row[4]] = ($Bal[$row[4]] - $row[3]);
line112: $Bal[$row[5]] = ($Bal[$row[5]] + $row[3]);}

The error msgs I get are:
Notice: Uninitialized string offset: 1 ...in line 111
Notice: Undefined index: 2 ... in line 112
Notice: Undefined index: 9 ...in line 111

I'm getting the correct results (as I was getting with version 1.6 of XAMPP)
but I'm getting all these messages (which I wasn't getting with 1.6)


I've also been getting msgs like this
Notice: Undefined variable: Bal ...in line 111
but I got rid of these by defining $Bal=0; at the beginning of my code.

However, is there a way of turning off all this kind of verification?
My coding is correct and these checks & msgs are just a nuisance.

Hoping this gives you the info you need to get me a solution.
Thanks

Re: Undefined variable and Undefined Index etc

PostPosted: 04. February 2012 20:20
by Altrea
Hi mickeymouse,

mickeymouse wrote:if(isset('key')) {$key = 'key';}
I tried it but it didn't do anything for me - same error msg.

Because the way you use it, it is nonsense. isset() checks whether a variable or array key exists or not.
Code: Select all
//correct, checks a variable
if( isset( $variable ) ) {
    // ... do something
}

//correct, checks an array key
if( isset( $array['key'] ) ) {
    // ... do something
}

You are trying to check a string, which should give you a new php error of type parse error:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in ...

mickeymouse wrote:Here is my code:
line110: while ($row = mysql_fetch_row($Results))
line111: {$Bal[$row[4]] = ($Bal[$row[4]] - $row[3]);
line112: $Bal[$row[5]] = ($Bal[$row[5]] + $row[3]);}

Your code is weird.

The errors you get are because the $Bal[$row[4]] and $Bal[$row[5]] (the second part of the lines) are not set when you want to use them. Thats way php norices, that the array keys are undefined.
It would be much more helpful if i would now, which data is in $row, at which time they overwrite each other, etc.
The correct way would be to initialise all $Bal[] keys which are used in the while loop. But for this, i and you have to know which data is in $row[4] and $row[5].
Relating to the error messages, they have to be integers, but which task do they have? Why do you add and substitude them?
I have no idea and i am very sure there is a better way to do what you try.

mickeymouse wrote:I'm getting the correct results (as I was getting with version 1.6 of XAMPP)
but I'm getting all these messages (which I wasn't getting with 1.6)

You haven't got these messages with XAMPP 1.6 because they were suppressed. But thats not the recommend way because that way, you will never learn how to make it the right way.

mickeymouse wrote:I've also been getting msgs like this
Notice: Undefined variable: Bal ...in line 111
but I got rid of these by defining $Bal=0; at the beginning of my code.

Thats good. Even better would be to initialise $Bal as an empty array instead of 0. like this:
Code: Select all
$Bal = array();


mickeymouse wrote:However, is there a way of turning off all this kind of verification?
My coding is correct and these checks & msgs are just a nuisance.

No, your code is not correct. But PHP has got a really good failure tolerance. Thats the only reason why your code still works.
Other programming languages act the other way till your code is absolute correct.

best wishes,
Altrea

Re: Undefined variable and Undefined Index etc

PostPosted: 05. February 2012 00:21
by mickeymouse
Many thanks for you help & patience.

I've defined $Bal=array() so that takes care of one problem.
I also did $row=array()

Now the $row array contains the transaction records (one rcd at a time of course) fetched from the query of my database file.
This is done by the While($row = mysql_fetch_row($Results)) at the start of the loop.
$row[4] & $row[5 ] are of course fields 4 & 5 of this record and they are different (integer) account numbers.
$row[3] contains a dollar amount.
My code is accumulating the dollar amount in array $Bal[account of $row[4]] and $Bal[account of $row[5]].
e.g., rcd 1 = amt 50.75 acct 7 and acct 9. I am subtracting the amount to $Bal[7] and adding it to $Bal[9].
rcd 2 = amt 25.50 acct 8 and acct 7. I am subtracting the amount to $Bal[8] and adding it to $Bal[7].
etc.
Now, as I said, I'm getting the correct results. So it seems PHP recognizes what is in $row[4] & $row[5 ].
But it seems to be insisting on having the index (and I presume that means defining $row[4] & $row[5 ] - msg ref below.
If that is the case, how do we define that?
(the msg: "Undefined index 7...in line x" or "Undefined index 9...in line y" etc. By the way, the index number it shows in the message, like 7 or 9 etc is what is in $row[4] or $row[5 ]).

You say "The correct way would be to initialise all $Bal[] keys which are used in the while loop".
How do we initialise them? I tried $row[3]=0; $row[4 ]=0; $row[5]=0; but it didn't change anything.

Hoping I've given you the necessary info.
Thanks again.

Re: Undefined variable and Undefined Index etc

PostPosted: 05. February 2012 09:52
by Altrea
Hi mickeymouse,

mickeymouse wrote:Many thanks for you help & patience.

you're very welcome :D

mickeymouse wrote:I also did $row=array()

Thats not needed, because $row is only used in the while loop and $row = mysql_fetch_row() takes care about the correct initializing.

mickeymouse wrote:(the msg: "Undefined index 7...in line x" or "Undefined index 9...in line y" etc. By the way, the index number it shows in the message, like 7 or 9 etc is what is in $row[4] or $row[5 ]).

correct. PHP knows what is in $row[4] and $row[5] but it don't knows what $Bal[7] or $Bal[9] is.
If you read your code line for adding the amount:
account Bal[9] is equal account Bal[9] (which is not defined at this time) plus $row[3]

I don't know how many accounts you have in your database and if the count is constant or raising, so a generic solution will be the best for your problem.


Code: Select all
while( $row = mysql_fetch_row( $Results ) ) {
    if( !isset( $Bal[$row[4]] ) ) {
        $Bal[$row[4]] = 0;
    }
    if( !isset( $Bal[$row[5]] ) ) {
        $Bal[$row[5]] = 0;
    }
    $Bal[$row[4]] = ($Bal[$row[4]] - $row[3]);
    $Bal[$row[5]] = ($Bal[$row[5]] + $row[3]);
}


If you had only 10 accounts and their count is constant, then something like this will be successfull too:
Code: Select all
$Bal = array(1 => 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //$Bal[1] up to $Bal[10] are setted to 0
while( $row = mysql_fetch_row( $Results ) ) {
    $Bal[$row[4]] = ($Bal[$row[4]] - $row[3]);
    $Bal[$row[5]] = ($Bal[$row[5]] + $row[3]);
}


best wishes,
Altrea

Re: Undefined variable and Undefined Index etc

PostPosted: 12. February 2012 00:22
by mickeymouse
The number of accounts is not constant and the solution you gave me was perfect.
Now I understand the problem. I thought it was the row[n] that was the problem.
Thank you so much for your help.

Re: Undefined variable and Undefined Index etc

PostPosted: 12. February 2012 00:43
by Altrea
Hi mickeymouse,

mickeymouse wrote:the solution you gave me was perfect.

I'm glad it worked for you and your problem could be solved :)

mickeymouse wrote:Now I understand the problem. I thought it was the row[n] that was the problem.
Thank you so much for your help.

You are very welcome. It is always a good thing to learn something from a problem :D
I wish you all the best.

Altrea