jika saiz array tak dapat dijangka
15 replies [Last post]
tengah belajar xml pulak
amin007's picture
User offline. Last seen 3 hours 15 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 444

berikut adalah contoh array aku

<?php
Array
(
    [
fid] => Array
        (
            [
59] => C00000186341200011
           
[107] => C00000043034200011
           
[200] => C00000189011200011
       
)

    [
ip] => 127.0.0.1
   
[pc] => localhost
   
[rangka] => Array
        (
            [
fe] => amin
       
)

    [
semua] => Proses
)
1
?>

output yang aku berjaya buat macam ni

UPDATE jan10 SET
fe='amin'
WHERE fid in ('C00000186341200011, C00000043034200011, C00000189011200011,')

pada hal kalau boleh nak buat macam ni

UPDATE jan10 SET
fe='amin'
WHERE fid in ('C00000186341200011, C00000043034200011, C00000189011200011')

ada idea tak kalau andai kata saiz array $_POST[fid] tak dapat dijangka.
cuba guna count() tapi macam tak jadi aje hehehe

<?php
echo "<pre>", print_r($_POST)."</pre>";
$bulan = array('jan10', 'feb10', 'mac10', 'apr10',
   
'mei10', 'jun10', 'jul10', 'ogo10',
   
'sep10', 'okt10', 'nov10', 'dis10', 'rangka');
foreach (
$bulan as $key => $myTable){$_POST[$myTable][fe]=$_POST[rangka][fe];}
echo
"<hr>";
foreach (
$_POST[fid] as $key => $jumpa) {
echo
"".$_POST[fid][$key];
echo (
$key==count($_POST[fid]))? "":",\r"; }
echo
"<hr>";

foreach (
$bulan as $key => $myTable)
{
////////////////////////////////////////////////////////////////////////////////
$sql = 'SELECT fe FROM '.$myTable; //echo "<hr><pre>$sql</pre><hr>";
$result = mysql_query($sql) or die(mysql_error()."<hr><pre>$sql</pre><hr>");
$fields = mysql_num_fields($result);
######################################################################
$ubah = " UPDATE $myTable SET \r";
for (
$f = 0 ; $f < $fields ; $f++ )
{     
$medan = mysql_field_name($result,$f);
   
$papar = $_POST[$myTable][$medan];
   
$ubah.=(($papar==null)? " $medan=null":" $medan='$papar'");
   
$ubah.=($f==$fields-1)? "":",\r";
}
$ubah.= "\r WHERE fid in ('".$fid_pertubuhan."') ";    
######################################################################
echo "<hr><pre>$ubah</pre><hr>\r";
#$result = mysql_query($ubah) or die(mysql_error()."<hr><pre>$ubah</pre><hr>");
}
#header('Location:./kawal_edit.php?pilihan=fid&cari='.$_POST[carian].'&ralat=dahUpdateLah#bulan');
endif; //$batch==null
//<!-- ****************************************************************************** -->
?>
does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

macam mane kalau buat camni?

for loop
   if $f > 0
      $ubah .= ",";

   $ubah .= $papar == NULL ? "$medan = NULL" : "$medan = $papar";
tengah belajar xml pulak
amin007's picture
User offline. Last seen 3 hours 15 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 444

aku dah ubah sikit

<?php
$bulan
= array('jan10', 'feb10', 'mac10', 'apr10',
   
'mei10', 'jun10', 'jul10', 'ogo10',
   
'sep10', 'okt10', 'nov10', 'dis10', 'rangka');

foreach (
$bulan as $key => $myTable){$_POST[$myTable][fe]=$_POST[rangka][fe];}
$mula=0;$akhir=count($_POST[fid]);
foreach (
$_POST[fid] as $key => $jumpa)
{
$fid_pertubuhan.="'".$_POST[fid][$key];
$fid_pertubuhan.=($mula++==$akhir-1)? "'":"',\r";
}

foreach (
$bulan as $key => $myTable)
{
////////////////////////////////////////////////////////////////////////////////
$sql = 'SELECT fe FROM '.$myTable; //echo "<hr><pre>$sql</pre><hr>";
$result = mysql_query($sql) or die(mysql_error()."<hr><pre>$sql</pre><hr>");
$fields = mysql_num_fields($result);
######################################################################
$ubah = " UPDATE $myTable SET \r";
for (
$f = 0 ; $f < $fields ; $f++ )
{     
$medan = mysql_field_name($result,$f);
   
$papar = $_POST[$myTable][$medan];
   
$ubah.=(($papar==null)? " $medan=null":" $medan='$papar'");
   
$ubah.=($f==$fields-1)? "":",\r";
}
$ubah.= "\r WHERE fid in (".$fid_pertubuhan.") ";    
######################################################################
#echo "<hr><pre>$ubah</pre><hr>\r";
$result = mysql_query($ubah) or die(mysql_error()."<hr><pre>$ubah</pre><hr>");
}
header('Location:./kawal_pilih.php?cari='.$papar.'&ralat=dahUpdateLah#bulan');
?>


tengah belajar xml pulak
amin007's picture
User offline. Last seen 3 hours 15 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 444

karass wrote:

macam mane kalau buat camni?

for loop
   if $f > 0
      $ubah .= ",";

   $ubah .= $papar == NULL ? "$medan = NULL" : "$medan = $papar";

kalau aku buat macam tu sql aku jadi macam ni

<?php
$ubah
= " UPDATE $myTable SET \r";
for (
$f = 0 ; $f < $fields ; $f++ )
{     
$medan = mysql_field_name($result,$f);
   
$papar = $_POST[$myTable][$medan];
   
$ubah.=($f>0)? "":",\r";
   
$ubah.=(($papar==null)? " $medan=null":" $medan='$papar'");
}
$ubah.= "\r WHERE fid in (".$fid_pertubuhan.") ";    
?>

hasilnya macam ni

UPDATE kawal_jan10 SET
,
fe='amin'
WHERE fid in ('C00000171695710011',
'A00000223315710011',
'C00000116609700011',
'C00000195527700011',
'C00000171278730011')

kalau macam ni, mysql tak boleh terima

does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

owh, aku silap tgk. sbrnnye maksud aku camni.

$count = 0;
foreach loop
   $count > 0 ? $fid_pertubuhan .= "," : $count++;

   $fid_pertubuhan.= $_POST[fid][$key];

spatutnye ko akan dpt:

$fid_pertubuhan = "C00000186341200011, C00000043034200011, C00000189011200011"

edit: btolkan typo error

does not have a status.
User offline. Last seen 2 weeks 4 days ago. Offline
Joined: 01/27/2010
Points: 28

karass wrote:

owh, aku silap tgk. sbrnnye maksud aku camni.

$count = 0;
foreach loop
   $count > 0 ? $fid_pertubuhan .= "," : $count++;

   $fid_pertubuhan.= $_POST[fid][$key];

spatutnye ko akan dpt:

$fid_pertubuhan = "C00000186341200011, C00000043034200011, C00000189011200011"

edit: btolkan typo error

hhmm... tak sure boleh ke tak guna '=', maybe kena wat camni kot:

$fid_pertubuhan in ('C00000186341200011', 'C00000043034200011', 'C00000189011200011')

does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

aku cume nk bg cadangan utk betolkn posisi koma dlm query tu. psl dalam contoh asal, ade terlebih koma kat hujung statement.

itu cume pseudocode, kena btolkan ikut keperluan.

frostbug.com
User offline. Last seen 3 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

<?php
$fid_pertubuhan
= substr($fid_pertubuhan, 0, -1);
?>
does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

ibnuyahya wrote:
<?php
$fid_pertubuhan
= substr($fid_pertubuhan, 0, -1);
?>

ape yang ko nk buat ni sahabat?

tapi lepas tgk code ko, aku dpt ilham utk gune implode Smile

$fid_pertubuhan = "('" . implode("','",$_POST[fid]) . "')";

macam lg cool jer Smile

frostbug.com
User offline. Last seen 3 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

err salah ke. aku ni baru je belajar php. kalo salah tolong tunjukkan Tongue

<?php
//issue comma kat last data kan?
$fid_pertubuhan = "C00000186341200011, C00000043034200011, C00000189011200011,";
//buang je la last comma tu
$fid_pertubuhan = substr($fid_pertubuhan, 0, -1);

echo
$fid_pertubuhan;
?>


tapi kalau xmau code panjang2 bleh guna cara hang tu. guna implode.

does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

owh, bijok gak. tapi aku rase lagi baik xde koma tu terus daripada nk buang koma tu kemudian. Smile

len kali explain la sket. aku ni tak brape pandai sgt; kalu tgk code jer tak paham ape die spatutnye buat Smile

frostbug.com
User offline. Last seen 3 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

aku just gunakan kod amin.Aku xnak ubah kod dia, dan aku bagi la satu line yg membolehkan kod dia diguna pakai. Kalau nak optimize kod tu, aku lebih suka guna cara hang. terus buang je loop yg x perlu.

dalam programming ada jalan panjang dan ada jalan pendek. ikut la yg mana suka Wink

tengah belajar xml pulak
amin007's picture
User offline. Last seen 3 hours 15 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 444

array aku macam ni

<?php
[fid] => Array
        (
            [
59] => C00000186341200011
           
[107] => C00000043034200011
           
[200] => C00000189011200011
       
)
?>

secara teori aku nak cantumkan jadi satu string macam ni
'C00000186341200011','C00000043034200011','C00000189011200011'
jadi idea mula-mula aku akan dapatkan bilangan array guna count().

<?php
$akhir
=count($_POST[fid]);
?>


lepas aku aku cantumkan semua array

<?php
foreach ($_POST[fid] as $key => $jumpa)
{
$fid_pertubuhan.="'".$_POST[fid][$key];
$fid_pertubuhan.=($mula++==$akhir-1)? "'":"',\r";
}
?>

kod kat atas jalan, cuma panjang sangat hehehe. ingat nak cari yang pendek sikit

kalau buat macam ni pulak

<?php
foreach ($_POST[fid] as $key => $id)
{
$fid_pertubuhan.="'".$_POST[fid][$key]."',\r";}
$fid_pertubuhan = substr($fid_pertubuhan, 0, -1);
?>


dapat pendekkan baris line tapi masih dalam loop

kalau cara ni pulak

<?php
$fid_pertubuhan
= "'".implode("',\r'",$_POST[fid])."'";
$fid_pertubuhan = substr($fid_pertubuhan, 0, -1);
?>


tak payah nak guna loop

tapi rasanya daripada guna loop untuk tentukan takde koma pada akhir string
lagi baik buang aje koma di akhir string yer hehehe.
atau aku cantum jadi satu baris sahaja

<?php
$fid_pertubuhan
= substr("'".implode("',\r'",$_POST[fid])."'", 0, -1);
?>


tak payah aku tentukan size array berapa hehehe Big smile

does not have a status.
User offline. Last seen 1 hour 34 min ago. Offline
Joined: 12/09/2009
Points: 136

apsal ko nk pkai substr() ? kalau ko gune substr, result ko akan dapat camni:

'C00000186341200011', 'C00000043034200011', 'C00000189011200011

pasal ko da suro substr() buang char terakhir kat hujung string, yakni '

frostbug.com
User offline. Last seen 3 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

amin.. klu dah guna implode xperlu substr lagi.

frostbug.com
User offline. Last seen 3 days 8 hours ago. Offline
Joined: 08/16/2009
Points: 30

utk lebih faham apa yg implode buat..

<?php
$arr
[1] ='satu';
$arr[2] ='dua';
$arr[3] ='tiga';
$arr[4] ='empat';

echo
implode(",",$arr);
echo
'<br/>';

//utk case hang spt5 cadangan karass
$fid_pertubuhan = "('" . implode("','",$arr) . "')";
echo
$fid_pertubuhan;
?>