hellblazeruk
asked on
Illegal string offset Warning PHP
Hi,
I keep getting Illegal string offset Warning PHP, I know its connected with an array, how can I improve the query so ot to get the warning?
<br /><b>Warning</b>: Illegal string offset 'username' in <b>C:\xampp\htdocs\mySeatX T\web\incl udes\users _form.inc. php</b> on line <b>24</b><br /><br /><b>Notice</b>: Uninitialized string offset: 0 in <b>C:\xampp\htdocs\web\inc ludes\user s_form.inc .php</b> on line <b>24</b><br />
case 'user_data':
$result = query("SELECT userID,username,realname,p assword,em ail,role,p roperty_id ,active,co nfirm_code ,last_ip,l ast_login, created,mo dified
FROM `plc_users`
WHERE `userID` ='%d'
LIMIT 1",$_SESSION['userID']);
return getRowListarray($result);
break;
I keep getting Illegal string offset Warning PHP, I know its connected with an array, how can I improve the query so ot to get the warning?
<br /><b>Warning</b>: Illegal string offset 'username' in <b>C:\xampp\htdocs\mySeatX
case 'user_data':
$result = query("SELECT userID,username,realname,p
FROM `plc_users`
WHERE `userID` ='%d'
LIMIT 1",$_SESSION['userID']);
return getRowListarray($result);
break;
I can't see anything in that code that causes the error. I'm guessing the error is coming from your getRowListarray() function, so we'd need to see that. Also, what exactly is your query() function doing. That doesn't seem part of standard PHP, so I'm guessing it's your own function - again, may need to see that.
Usually when you get a PHP message, you get a line number with it. It looks like maybe that is line 24 in these messages. What does that line contain? Also, have you used var_dump() to print out the contents of the variables that are used in that line?
I'd try and use the PHP sprintf( ) , usually if it talks about string offset it' got something to do the string formatting?
case 'user_data':
$sql = sprintf("SELECT userID,username,realname,password,email,role,property_id,active,confirm_code,last_ip,last_login,created,modified
FROM `plc_users`
WHERE `userID` ='%d'
LIMIT 1", $_SESSION['userID']);
$result = query($sql);
return getRowListarray($result);
break;
Here is a code simulation that will trigger one of the messages. It happens because PHP allows the same notation for strings and arrays - square brackets on the end of the variable name. Possibly the script assumes it is going to get an array variable, but it got a string variable instead? That might happen with an error message.
<?php // temp_hellblazeruk.php
/**
* See http://www.experts-exchange.com/Programming/Languages/Scripting/PHP/Q_28622093.html
*
* Warning: Illegal string offset 'username' in C:\xampp\htdocs\mySeatXT\web\includes\users_form.inc.php on line 24
* Notice: Uninitialized string offset: 0 in C:\xampp\htdocs\web\includes\users_form.inc.php on line 24
*/
error_reporting(E_ALL);
// SET UP THE NECESSARY CONFUSION
$str = 'ABC';
$str[0] = NULL;
var_dump($str);
// TRY TO USE 'username' AS A STRING INDEX
echo $str['username'];
ASKER
line 24
is
<input type="text" name="username" id="username" class='required' minlength='10' maxlength='30' title=' ' value="<?php echo $row['username'];?>"/>
users-form.inc.php
is
<input type="text" name="username" id="username" class='required' minlength='10' maxlength='30' title=' ' value="<?php echo $row['username'];?>"/>
users-form.inc.php
that PHP starts out with -
if ($_SESSION['button']==2 || $_SESSION['page'] == 7) {
$row = ""; // ERROR is HERE
}
where the $row is set to an empty string, you CAN not use that $row String variable like -
$row['username'];
you will need to Exit the page so there are no <form> written with the $row['username'];
OR
create a Default $row array with all of the array parts like 'username' and 'email', so there can be something to use the $row array
if ($_SESSION['button']==2 || $_SESSION['page'] == 7) {
$row = ""; // ERROR is HERE
}
where the $row is set to an empty string, you CAN not use that $row String variable like -
$row['username'];
you will need to Exit the page so there are no <form> written with the $row['username'];
OR
create a Default $row array with all of the array parts like 'username' and 'email', so there can be something to use the $row array
There are a couple of points in your code that have the capacity for failure. The error you're getting is because $row['username'] doesn't exist. This could be caused by $row being set to "" or by your querySQL() function not returning what you expect.
Because you never quite know what $row is, you should ensure that you check it before trying to use it. In your particular case, something like this:
The echo statement now uses a ternary operator, which checks if $row['username'] is set. If it is, then it gets used. If it isn't then an empty string is echoed - no more errors.
Because you never quite know what $row is, you should ensure that you check it before trying to use it. In your particular case, something like this:
<input type="text" name="username" id="username" class='required' minlength='10' maxlength='30' title=' ' value="<?php echo (isset($row['username'])) ? $row['username'] : ""; ?>"/>
The echo statement now uses a ternary operator, which checks if $row['username'] is set. If it is, then it gets used. If it isn't then an empty string is echoed - no more errors.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.