我有一个更新表中字段的方法。 它用于更新三个表, invoices invoice_items和payments所有三个表都有相同的字段需要更新。 当下面的代码运行时, multi_checked()方法会运行前两次,但不是第三次运行。对于我来说,这对我来说并不明显。 有任何想法吗?
方法调用:
elseif (isset($_POST[$mod . '-del']) && count($check) > 0) { $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.invoices SET deleted="Y"', EVENT_DEL, 'Invoice [' . $c . '] deleted', 'Please select at least one item', FALSE, 'SELECT id FROM ' . $db['database'] . '.invoices' ); $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.payments SET deleted="Y"', EVENT_DEL, 'Payment [' . $c . '] deleted', 'Please select at least one item', TRUE, 'SELECT id FROM ' . $db['database'] . '.payments', null, "id_invoice" ); $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.invoice_items SET deleted="Y"', EVENT_DEL, 'Invoice Item [' . $c . '] deleted', 'Please select at least one item', TRUE, 'SELECT id FROM ' . $db['database'] . '.invoice_items', null, "id_invoice" ); } # Clear Export timestampsmulti_checked方法描述如下:
function multi_checked( $check, $query, $event_type, $event_desc, $none = 'Please select at least one item', $redirect = TRUE, $meta_query = NULL, $success_msg = NULL, $field = "id" ) { global $db, $mod; $batch_count = count($check); $meta_data = NULL; if ($batch_count == 0) { add_msg($none); return (0); } else { $changed = 0; $ref = load_array('SELECT MAX(id) FROM ' . $db['database'] . '.eventlog'); # batch id foreach ($check As $c) { if ($meta_query != NULL) { $meta_data = load_array($meta_query . ' WHERE id' . $field . '="' . $c . '"'); if ($meta_data != NULL) $meta_data = ' (' . $meta_data . ')'; } $q = $query . ' WHERE ' . $field . '="' . $c . '"'; $z = $query . ' WHERE ' . $field . '="' . $c . '"'; $g = "asf"; if (run_query($query . ' WHERE ' . $field . '="' . $c . '"') == 0) { eventlog($db['database'], $event_type, $mod, $c, uid(), '[Batch #' . $ref . '] ' . $event_desc . $meta_data, uname()); $changed++; } else { eventlog($db['database'], $event_type, $mod, $c, uid(), '[Batch #' . $ref . '] FAIL: ' . $event_desc . $meta_data, uname(), FALSE, FALSE); } } # Check for errors if ($changed != $batch_count) { add_error($changed . ' of ' . $batch_count . ' items processed - you may need to check the system log for details'); } # Success! else { $message = ($changed . ' item' . ($changed > 1 ? 's' : NULL) . ' processed successfully'); if ($changed > 1) { # log batch summary @mysql_query("FLUSH QUERY CACHE"); eventlog($db['database'], $event_type, $mod, 0, uid(), '[Batch #' . $ref . '] ' . $changed . ' records processed', uname()); } # Redirect if ($redirect) { header('Location: ?m=' . $mod . '&changed=' . $changed . '&message=' . $success_msg); exit; } else { add_msg($message); } } return ($changed); } }I have a method that updated fields in a table. Its used to update three tables, invoices invoice_items and payments All three tables have the same field to be updated. When the below code runs, the multi_checked() method runs for the first two times, but not for the third time and It's not obvious to me as to why. Any Ideas?
Method Call:
elseif (isset($_POST[$mod . '-del']) && count($check) > 0) { $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.invoices SET deleted="Y"', EVENT_DEL, 'Invoice [' . $c . '] deleted', 'Please select at least one item', FALSE, 'SELECT id FROM ' . $db['database'] . '.invoices' ); $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.payments SET deleted="Y"', EVENT_DEL, 'Payment [' . $c . '] deleted', 'Please select at least one item', TRUE, 'SELECT id FROM ' . $db['database'] . '.payments', null, "id_invoice" ); $state = multi_checked( $check, 'UPDATE ' . $db['database'] . '.invoice_items SET deleted="Y"', EVENT_DEL, 'Invoice Item [' . $c . '] deleted', 'Please select at least one item', TRUE, 'SELECT id FROM ' . $db['database'] . '.invoice_items', null, "id_invoice" ); } # Clear Export timestampsthe multi_checked method is described as follows:
function multi_checked( $check, $query, $event_type, $event_desc, $none = 'Please select at least one item', $redirect = TRUE, $meta_query = NULL, $success_msg = NULL, $field = "id" ) { global $db, $mod; $batch_count = count($check); $meta_data = NULL; if ($batch_count == 0) { add_msg($none); return (0); } else { $changed = 0; $ref = load_array('SELECT MAX(id) FROM ' . $db['database'] . '.eventlog'); # batch id foreach ($check As $c) { if ($meta_query != NULL) { $meta_data = load_array($meta_query . ' WHERE id' . $field . '="' . $c . '"'); if ($meta_data != NULL) $meta_data = ' (' . $meta_data . ')'; } $q = $query . ' WHERE ' . $field . '="' . $c . '"'; $z = $query . ' WHERE ' . $field . '="' . $c . '"'; $g = "asf"; if (run_query($query . ' WHERE ' . $field . '="' . $c . '"') == 0) { eventlog($db['database'], $event_type, $mod, $c, uid(), '[Batch #' . $ref . '] ' . $event_desc . $meta_data, uname()); $changed++; } else { eventlog($db['database'], $event_type, $mod, $c, uid(), '[Batch #' . $ref . '] FAIL: ' . $event_desc . $meta_data, uname(), FALSE, FALSE); } } # Check for errors if ($changed != $batch_count) { add_error($changed . ' of ' . $batch_count . ' items processed - you may need to check the system log for details'); } # Success! else { $message = ($changed . ' item' . ($changed > 1 ? 's' : NULL) . ' processed successfully'); if ($changed > 1) { # log batch summary @mysql_query("FLUSH QUERY CACHE"); eventlog($db['database'], $event_type, $mod, 0, uid(), '[Batch #' . $ref . '] ' . $changed . ' records processed', uname()); } # Redirect if ($redirect) { header('Location: ?m=' . $mod . '&changed=' . $changed . '&message=' . $success_msg); exit; } else { add_msg($message); } } return ($changed); } }最满意答案
对multi_check的第二次调用将$redirect参数设置为TRUE - 因此函数重定向,阻止脚本第三次调用该函数...
The second call to multi_check has $redirect parameter set to TRUE - so the function redirects, preventing the script to call the function the third time...
更多推荐
发布评论