Connecting Tech Pros Worldwide Forums | Help | Site Map

strange behaviour using arrays to update records

mantrid
Guest
 
Posts: n/a
#1: Aug 7 '06
Hello
Im having problems working out why the following code does not work. I dont
think its the sql as the error occurs on the first update which ever one is
put there ($q1 or $q2). Ive swapped then around to test this.
Help greatly appreciated

The error is Unknown column 'A' in 'field list'
but there is no field 'A'. im thinking that the 'A' may be first letter of
the word Array, as if it is using this as a variable, but i dont know how.


$commindexarray=$_POST['commindex'];
$catarray=addslashes($_POST['category']);
$commarray=addslashes($_POST['comm']);
$availarray=$_POST['avail'];
$delarray=$_POST['del'];

if($delarray==''){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE userid=
".$_SESSION['userid']." AND commindex ={$commindexarray[$i]}";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid={$catarray[$i]}, comment='{$commarray[$i]}',
available={$availarray[$i]}, timestp='$currtime', globalavail=0 WHERE
commindex={$commindexarray[$i]}";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');

}
}



Jerry Stuckle
Guest
 
Posts: n/a
#2: Aug 7 '06

re: strange behaviour using arrays to update records


mantrid wrote:
Quote:
Hello
Im having problems working out why the following code does not work. I dont
think its the sql as the error occurs on the first update which ever one is
put there ($q1 or $q2). Ive swapped then around to test this.
Help greatly appreciated
>
The error is Unknown column 'A' in 'field list'
but there is no field 'A'. im thinking that the 'A' may be first letter of
the word Array, as if it is using this as a variable, but i dont know how.
>
>
$commindexarray=$_POST['commindex'];
$catarray=addslashes($_POST['category']);
$commarray=addslashes($_POST['comm']);
$availarray=$_POST['avail'];
$delarray=$_POST['del'];
>
if($delarray==''){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE userid=
".$_SESSION['userid']." AND commindex ={$commindexarray[$i]}";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid={$catarray[$i]}, comment='{$commarray[$i]}',
available={$availarray[$i]}, timestp='$currtime', globalavail=0 WHERE
commindex={$commindexarray[$i]}";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
>
}
}
>
>
Non-numeric constants MUST be enclosed in single quotes in your SQL
statements. Otherwise they may be taken as a column name.


--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Miguel Cruz
Guest
 
Posts: n/a
#3: Aug 7 '06

re: strange behaviour using arrays to update records


"mantrid" <ian.dandav@virgin.netwrote:
Quote:
Im having problems working out why the following code does not work. I dont
think its the sql as the error occurs on the first update which ever one is
put there ($q1 or $q2). Ive swapped then around to test this.
Help greatly appreciated
>
The error is Unknown column 'A' in 'field list'
but there is no field 'A'. im thinking that the 'A' may be first letter of
the word Array, as if it is using this as a variable, but i dont know how.
>
>
$commindexarray=$_POST['commindex'];
$catarray=addslashes($_POST['category']);
$commarray=addslashes($_POST['comm']);
$availarray=$_POST['avail'];
$delarray=$_POST['del'];
>
if($delarray==''){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE userid=
".$_SESSION['userid']." AND commindex ={$commindexarray[$i]}";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid={$catarray[$i]}, comment='{$commarray[$i]}',
available={$availarray[$i]}, timestp='$currtime', globalavail=0 WHERE
commindex={$commindexarray[$i]}";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
>
}
}
PHP is not Perl. If you call addslashes() on an array, it treats it as a
string, which means it has the value "Array". Then, when $i == 0 and you
look at $catarray[$i], you get the first character, which is 'A'.

You need to iterate through your arrays and call addslashes on each
element individually. The most efficient way would be to move the
addslashes (or perhaps mysql_real_escape_string instead) inside the $i
for loop that you already have:

for ($i = 0; $i < count($commindexarray); $i++)
{
$cat = intval($_POST['category'][$i]);
$comm = mysql_real_escape_string($_POST['comm'][$i]);
$q = "update usercomms
set type = {$cat},
comm = {$comm}
where whatever";
}

miguel
--
Photos from 40 countries on 5 continents: http://travel.u.nu
Latest photos: Malaysia; Thailand; Singapore; Spain; Morocco
Airports of the world: http://airport.u.nu
Norman Peelman
Guest
 
Posts: n/a
#4: Aug 7 '06

re: strange behaviour using arrays to update records


"mantrid" <ian.dandav@virgin.netwrote in message
news:aNvBg.125538$sz1.84593@newsfe6-gui.ntli.net...
Quote:
Hello
Im having problems working out why the following code does not work. I
dont
Quote:
think its the sql as the error occurs on the first update which ever one
is
Quote:
put there ($q1 or $q2). Ive swapped then around to test this.
Help greatly appreciated
>
The error is Unknown column 'A' in 'field list'
but there is no field 'A'. im thinking that the 'A' may be first letter of
the word Array, as if it is using this as a variable, but i dont know how.
>
>
$commindexarray=$_POST['commindex'];
$catarray=addslashes($_POST['category']);
$commarray=addslashes($_POST['comm']);
$availarray=$_POST['avail'];
$delarray=$_POST['del'];
>
if($delarray==''){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE userid=
".$_SESSION['userid']." AND commindex ={$commindexarray[$i]}";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid={$catarray[$i]},
comment='{$commarray[$i]}',
Quote:
available={$availarray[$i]}, timestp='$currtime', globalavail=0 WHERE
commindex={$commindexarray[$i]}";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
>
}
}
>
>
Not to mention that you are intermixing two styles of string
concatination... try:

$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE
userid={$_SESSION['userid']} AND commindex ={$commindexarray[$i]}";

Norm
--
FREE Avatar hosting at www.easyavatar.com


mantrid
Guest
 
Posts: n/a
#5: Aug 7 '06

re: strange behaviour using arrays to update records


Ive made the changes you suggested. I dont get any errors now but the
records are not updating. It is most puzzling. My updated code is below


************************************************** **************************
*****
$delarray=$_POST['del'];//not needed in the sql of first two queries so isnt
in for loop

if(count($delarray)==0){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$cat = intval($_POST['category'][$i]);
$comm = mysql_real_escape_string($_POST['comm'][$i]);
$avail =$_POST['avail'][$i];
$commindex = intval($_POST['commindex'][$i]);

$q2 ="UPDATE usercomms SET typeid=$cat WHERE userid=".$_SESSION['userid']."
AND commindex =$commindex";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid=$cat, comment='$comm', available=$avail,
timestp='$currtime', globalavail=0 WHERE commindex=$commindex";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
}
}

************************************************** **********************

Im also getting the following warning (below) on the bottom of the page. It
isnt affecting anything as it also appears with other queries I run on this
page which do work. Does anyone know what causes it. I dont think I can
follow its suggestion for not displaying it as I dont think I can alter any
settings on my hosting companies server. if that is what its asking me to
do.



Warning: Unknown(): Your script possibly relies on a session side-effect
which existed until PHP 4.2.3. Please be advised that the session extension
does not consider global variables as a source of data, unless
register_globals is enabled. You can disable this functionality and this
warning by setting session.bug_compat_42 or session.bug_compat_warn to off,
respectively. in Unknown on line 0

THANKS Ian


"Miguel Cruz" <spam@admin.u.nuwrote in message
news:spam-6605DF.14173407082006@localhost...
Quote:
"mantrid" <ian.dandav@virgin.netwrote:
Quote:
Im having problems working out why the following code does not work. I
dont
Quote:
Quote:
think its the sql as the error occurs on the first update which ever one
is
Quote:
Quote:
put there ($q1 or $q2). Ive swapped then around to test this.
Help greatly appreciated

The error is Unknown column 'A' in 'field list'
but there is no field 'A'. im thinking that the 'A' may be first letter
of
Quote:
Quote:
the word Array, as if it is using this as a variable, but i dont know
how.
Quote:
Quote:


$commindexarray=$_POST['commindex'];
$catarray=addslashes($_POST['category']);
$commarray=addslashes($_POST['comm']);
$availarray=$_POST['avail'];
$delarray=$_POST['del'];

if($delarray==''){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$q2 ="UPDATE usercomms SET typeid={$catarray[$i]} WHERE userid=
".$_SESSION['userid']." AND commindex ={$commindexarray[$i]}";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid={$catarray[$i]},
comment='{$commarray[$i]}',
Quote:
Quote:
available={$availarray[$i]}, timestp='$currtime', globalavail=0 WHERE
commindex={$commindexarray[$i]}";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');

}
}
>
PHP is not Perl. If you call addslashes() on an array, it treats it as a
string, which means it has the value "Array". Then, when $i == 0 and you
look at $catarray[$i], you get the first character, which is 'A'.
>
You need to iterate through your arrays and call addslashes on each
element individually. The most efficient way would be to move the
addslashes (or perhaps mysql_real_escape_string instead) inside the $i
for loop that you already have:
>
for ($i = 0; $i < count($commindexarray); $i++)
{
$cat = intval($_POST['category'][$i]);
$comm = mysql_real_escape_string($_POST['comm'][$i]);
$q = "update usercomms
set type = {$cat},
comm = {$comm}
where whatever";
}
>
miguel
--
Photos from 40 countries on 5 continents: http://travel.u.nu
Latest photos: Malaysia; Thailand; Singapore; Spain; Morocco
Airports of the world: http://airport.u.nu

Miguel Cruz
Guest
 
Posts: n/a
#6: Aug 7 '06

re: strange behaviour using arrays to update records


"mantrid" <ian.dandav@virgin.netwrote:
Quote:
Ive made the changes you suggested. I dont get any errors now but the
records are not updating. It is most puzzling. My updated code is below
>
>
************************************************** **************************
*****
$delarray=$_POST['del'];//not needed in the sql of first two queries so isnt
in for loop
>
if(count($delarray)==0){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$cat = intval($_POST['category'][$i]);
$comm = mysql_real_escape_string($_POST['comm'][$i]);
$avail =$_POST['avail'][$i];
$commindex = intval($_POST['commindex'][$i]);
>
$q2 ="UPDATE usercomms SET typeid=$cat WHERE userid=".$_SESSION['userid']."
AND commindex =$commindex";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid=$cat, comment='$comm', available=$avail,
timestp='$currtime', globalavail=0 WHERE commindex=$commindex";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
}
}
I would print out $q and $q2 to ensure that $_SESSION['userid'] contains
what you thought it does.

miguel
--
Photos from 40 countries on 5 continents: http://travel.u.nu
Latest photos: Malaysia; Thailand; Singapore; Spain; Morocco
Airports of the world: http://airport.u.nu
mantrid
Guest
 
Posts: n/a
#7: Aug 7 '06

re: strange behaviour using arrays to update records



Quote:
Quote:
*****
$delarray=$_POST['del'];//not needed in the sql of first two queries so
isnt
Quote:
Quote:
in for loop

if(count($delarray)==0){
for ($i = 0; $i < count($commindexarray); $i++){
$currtime=date('YmdHis');
$cat = intval($_POST['category'][$i]);
$comm = mysql_real_escape_string($_POST['comm'][$i]);
$avail =$_POST['avail'][$i];
$commindex = intval($_POST['commindex'][$i]);

$q2 ="UPDATE usercomms SET typeid=$cat WHERE
userid=".$_SESSION['userid']."
Quote:
Quote:
AND commindex =$commindex";//
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry, there was a problem updating. Try
again.<br><br>Error - 1 '.count($delarray). mysql_error().'</span>');
$q="UPDATE comments SET typeid=$cat, comment='$comm', available=$avail,
timestp='$currtime', globalavail=0 WHERE commindex=$commindex";//
$updatecomm = mysql_query($q) or die('<br><span class=RedWarning>Sorry,
there was a problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
}
}
>
I would print out $q and $q2 to ensure that $_SESSION['userid'] contains
what you thought it does.
>
This I did and it is as expected,
Another thing I tried was to put the queries outside of the loop and
substitute the values from the arrays (which are also ok as i checked them
when i ran phpinfo()) with numbers as shown below


$q2 ="UPDATE usercomms SET typeid=1 WHERE userid=".$_SESSION['userid']." AND
commindex =339";
$updateusercomm = mysql_query($q2) or die('<br><span class=RedWarning>Sorry,
there was a problem updating. Try again.<br><br>Error - 1
'.count($delarray). mysql_error().'</span>');

$q="UPDATE comments SET typeid=1, comment='ggdsffgdsfg', available=1,
timestp='$currtime', globalavail=0 WHERE commindex=339"; $updatecomm =
mysql_query($q) or die('<br><span class=RedWarning>Sorry, there was a
problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');

And this worked. so it looks like it is the loop or something

by the way miguel I like your photos. i to love travelling but havent put
mine on the web, something i'd like to do. much of mine are still on paper
so a lot of work to do.

Ian




mantrid
Guest
 
Posts: n/a
#8: Aug 7 '06

re: strange behaviour using arrays to update records


Quote:
>
This I did and it is as expected,
Another thing I tried was to put the queries outside of the loop and
substitute the values from the arrays (which are also ok as i checked them
when i ran phpinfo()) with numbers as shown below
>
>
$q2 ="UPDATE usercomms SET typeid=1 WHERE userid=".$_SESSION['userid']."
AND
Quote:
commindex =339";
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry,
Quote:
there was a problem updating. Try again.<br><br>Error - 1
'.count($delarray). mysql_error().'</span>');
>
$q="UPDATE comments SET typeid=1, comment='ggdsffgdsfg', available=1,
timestp='$currtime', globalavail=0 WHERE commindex=339"; $updatecomm =
mysql_query($q) or die('<br><span class=RedWarning>Sorry, there was a
problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');
>
And this worked. so it looks like it is the loop or something
>
by the way miguel I like your photos. i to love travelling but havent put
mine on the web, something i'd like to do. much of mine are still on paper
so a lot of work to do.
>
Ian
>
>

ok getting closer. it is this bit

for ($i = 0; $i < count($commindexarray); $i++){

i tested it with the following and it worked on those 100 records

for ($i = 0; $i <= 100; $i += 1){


ian


mantrid
Guest
 
Posts: n/a
#9: Aug 7 '06

re: strange behaviour using arrays to update records


ok i got it
silly me
i hade commented out the setting of the variable

$commindexarray=$_POST['commindex'];


THANKS ALL for the help


"mantrid" <ian.dandav@virgin.netwrote in message
news:gtJBg.5937$oW3.5333@newsfe6-win.ntli.net...
Quote:
>
Quote:

This I did and it is as expected,
Another thing I tried was to put the queries outside of the loop and
substitute the values from the arrays (which are also ok as i checked
them
Quote:
Quote:
when i ran phpinfo()) with numbers as shown below


$q2 ="UPDATE usercomms SET typeid=1 WHERE userid=".$_SESSION['userid']."
AND
Quote:
commindex =339";
$updateusercomm = mysql_query($q2) or die('<br><span
class=RedWarning>Sorry,
Quote:
there was a problem updating. Try again.<br><br>Error - 1
'.count($delarray). mysql_error().'</span>');

$q="UPDATE comments SET typeid=1, comment='ggdsffgdsfg', available=1,
timestp='$currtime', globalavail=0 WHERE commindex=339"; $updatecomm =
mysql_query($q) or die('<br><span class=RedWarning>Sorry, there was a
problem updating some records. Try again.<br><br>Error - 2
'.count($delarray).mysql_error().'</span>');

And this worked. so it looks like it is the loop or something

by the way miguel I like your photos. i to love travelling but havent
put
Quote:
Quote:
mine on the web, something i'd like to do. much of mine are still on
paper
Quote:
Quote:
so a lot of work to do.

Ian
>
>
ok getting closer. it is this bit
>
for ($i = 0; $i < count($commindexarray); $i++){
>
i tested it with the following and it worked on those 100 records
>
for ($i = 0; $i <= 100; $i += 1){
>
>
ian
>
>

Closed Thread