jika saiz array tak dapat dijangka
15 replies [Last post]
macam mana nak dapat RM 1000 sebelum raya nanti???
amin007's picture
User offline. Last seen 5 hours 48 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 974

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
//<!-- ****************************************************************************** -->
?>
newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

macam mane kalau buat camni?

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

   $ubah .= $papar == NULL ? "$medan = NULL" : "$medan = $papar";
macam mana nak dapat RM 1000 sebelum raya nanti???
amin007's picture
User offline. Last seen 5 hours 48 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 974

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');
?>


macam mana nak dapat RM 1000 sebelum raya nanti???
amin007's picture
User offline. Last seen 5 hours 48 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 974

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

newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

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 9 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')

newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

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.

ibnuyahya.com
User offline. Last seen 6 hours 32 min ago. Offline
Joined: 08/16/2009
Points: 109

<?php
$fid_pertubuhan
= substr($fid_pertubuhan, 0, -1);
?>
newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

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

ibnuyahya.com
User offline. Last seen 6 hours 32 min ago. Offline
Joined: 08/16/2009
Points: 109

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.

newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

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

ibnuyahya.com
User offline. Last seen 6 hours 32 min ago. Offline
Joined: 08/16/2009
Points: 109

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

macam mana nak dapat RM 1000 sebelum raya nanti???
amin007's picture
User offline. Last seen 5 hours 48 min ago. Offline
Moderator
Joined: 08/16/2009
Points: 974

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

newbie
User offline. Last seen 4 days 12 hours ago. Offline
Joined: 12/09/2009
Points: 234

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 '

ibnuyahya.com
User offline. Last seen 6 hours 32 min ago. Offline
Joined: 08/16/2009
Points: 109

amin.. klu dah guna implode xperlu substr lagi.

ibnuyahya.com
User offline. Last seen 6 hours 32 min ago. Offline
Joined: 08/16/2009
Points: 109

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;
?>