scottybwoy Posted May 3, 2007 Share Posted May 3, 2007 Hi All, I'm just updating a function of mine but there are a few problems I'd like to clear. First the code then I'l point out the issues. <?php // Checks if $arr1 has anything extra than $arr2 then writes those diffrences // to $tbl at the given location function updateDiff($arr1, $arr2, $tbl, $col, $val, $optionalCol, $optionalVal) { if (!empty($diff)) { $colvals = ""; foreach ($diff as $k => $v) { trim($v); $this->cleanSql($v); if (is_int($v)) { $colvals .= $k . " = $v, "; } else { $colvals .= $k . " = '" . $v . "', "; } } $colvals = substr($colvals, 0, -2); $sql = "UPDATE $tbl SET " . $colvals . " WHERE $col = '" . $val . "'"; if (isset($optionalCol)) { $sql .= " AND $optionalCol = '" . $optionalVal . "'"; } mssql_query($sql) or trigger_error("Failed to Update $tbl where $col = $val!", E_USER_ERROR); $keys = array_keys($diff); \\-- Think I need a foreach() here! $keys = implode(', ', $keys); $old = implode(', ', $arr1); $new = implode(', ', $diff); $msgType = 3; $userId = $_SESSION['USER_ID']; $msg = "Changed $old data was updated with this $new data"; $qry = "SELECT * FROM $tbl WHERE $col = '" . $val . "'"; if (isset($optionalCol)) { $qry .= " AND $optionalCol = '" . $optionalVal . "'"; } $msgcols = "(msgType, userId, msg, qry)"; $msgvals = "(3, \'" . $userId . "\', \'" . $msg . "\', \'" . $qry . "\')"; $sql = "INSERT INTO msgLog $msgcols VALUES $msgvals"; mssql_query($sql) or trigger_error("Failed to Log Confirmation Message", E_USER_WARNING); } else { trigger_error("Nothing to change", E_USER_NOTICE); } } ?> First of all in the supplied arguments for the func, is there a way of specifying the them to be optional for instance like with [] but I tried that already, and I know the func will work anyway so isn't too important. Second, where I put the comment for a foreach() I'd like to change my $msg to read : "Changed $keys in original row from $oldvals to $newvals" Now I have $keys and $newvals but to get $oldvals I need to extract just the keys from $arr2 that are in $diff and put the values into a string in the same format, I'm a bit stuck on how to go about that. Lastly, I want to store a query in my table, but it doesn't like the syntax, can anyone tell me the correct way to do it, thanks for your help. Link to comment https://forums.phpfreaks.com/topic/49781-solved-function-tidy-up/ Share on other sites More sharing options...
scottybwoy Posted May 3, 2007 Author Share Posted May 3, 2007 OK I solved my second problem which I thought would be the hardest by using array_intersect_keys() So that section now looks like so : <?php $keys = array_keys($diff); $keys = implode(', ', $keys); $keys = substr($keys, 0, -2); $old = array_intersect_key($arr1, $diff); $old = implode(', ', $old); $new = implode(', ', $diff); $msgType = 3; $userId = $_SESSION['USER_ID']; $msg = "Changed $keys from : $old to : $new where $col = $val in $tbl"; echo $msg . "<br>"; ?> Any updates on the other issues? Link to comment https://forums.phpfreaks.com/topic/49781-solved-function-tidy-up/#findComment-244313 Share on other sites More sharing options...
scottybwoy Posted May 4, 2007 Author Share Posted May 4, 2007 OK I got around the other two errors. For the optional arguments within the func spec i added = false. Like so : <?php function test($foo, $bar = FALSE) { echo $foo . $bar; } ?> second error, I now use my predefined database functions and store the parameters in a csv string in the database like so : <?php $msgType = 3; $userId = $_SESSION['USER_ID']; $msg = "Changed $old data was updated with this $new data"; $qryParams = "SELECT_ALL,$tbl,$col,$val,"; if (isset($optionalCol)) { $qry .= ",$optionalCol,$optionalVal"; } $msgcols = "(msgType, userId, msg, qry)"; $msgvals = "(3, '" . $userId . "', '" . $msg . "', '" . $qry . "')"; $sql = "INSERT INTO msgLog $msgcols VALUES $msgvals"; mssql_query($sql); ?> Then to call it I just use : <?php if(preg_match("SELECT_ALL", $qryParams) { $this->select($tbl, $col, $val); } ?> Although I still thinks thats a bit messy if some one can see a clearer case still I'd be glad. Thanks Link to comment https://forums.phpfreaks.com/topic/49781-solved-function-tidy-up/#findComment-245461 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.