roccochiolo Posted May 7 Report Posted May 7 buongiorno a tutti , dopo tanti anni mi sono rimesso a studiare il php ,e avrei bisogno un aiuto su un problema che non riesco a risolvere , vi spiego sto usando una classe che estrae i dati da database direttamente dentro una tabella , adesso non riesco a capire dove sto sbagliando : posto i codici : $fields = array(); $fields[0]['type'] = "custom"; $fields[0]['name'] = ""; $fields[0]['value'] = "yyyyyyy"; $fields[0]['title'] = "xxxx"; $fields[0]['width'] = ""; $fields[1]['name'] = "titlearticle"; $fields[1]['title'] = "titolo"; $fields[1]['width'] = "50%"; $fields[1]['align'] = "left"; $options = array(); $options['limit'] = "10"; $options['callback']='_ArticlesField'; $grid = new DataGrid; $grid->gridstart("Articles","Articles xxx",'SELECT * FROM `articles` $sortjoin', 'SELECT COUNT(articleid) AS total FROM articles', ' SELECT * FROM article WHERE arttitle LIKE \'%$searchstr%\' $sortjoin' , $fields, $options); $grid->displaygrid("Articles"); cosi passo i dati alla classe if ($options["callback"] !='') { $rowresult = call_user_func($options["callback"] , array($rowfields ,$fields) ); } else { $rowresult = $rowfields ; } //$pippo = array($rowfields , $fields[1] ); //echo '<pre>'; //var_dump($pippo); echo preg_replace_callback("/\[(.*)\]/e", "\$rowresult['\\1']" , $row); //var_dump($rowresult); echo '</tr>'; global $fielddata; echo $fielddata; la variabile $row e la tabella che deve stampare i dati invece la funzione callback serve per far diventare il testo estratto in link e lo faccio con questa funzione : function _ArticlesField($arg) { global $settings; $record = &$arg[0]; $fields = &$arg[1]; $record["titlearticle"] = '<a href="index.php?section=content&page=articles&viewarticle=read&articleid='.$record['articleid'].'>'. $record["titlearticle"].'</a>'; return $record; } solo che mi da il seguente errore ; Errore irreversibile: Tipo non rilevatoErrore: preg_replace_callback(): L'argomento #2 ($callback) deve essere un callback valido, la funzione "$rowresult['\1']" non è stata trovata o il nome della funzione non è valido in C:\xampp\htdocs\site\include\function_html.php:343 Traccia dello stack: #0 C:\xampp\htdocs\site\include\function_html.php(343): preg_replace_callback('/\\[(.*)\\]/e', '$rowresult['\\1'...', '<td "width = "5...') #1 C:\xampp\htdocs\site\components\home\index.php(86): DataGrid->gridstart('Articoli', 'Articoli xxx', 'SELECT * FROM '...', 'SELECT COUNT(ar...', ' SELECT * FROM ...', Array, Array) #2 C:\xampp\htdocs\site\include\function_contents.php(29): include('C:\\xampp\\htdocs...') #3 C:\xampp\htdocs\site\index.php(106): require('C:\\xampp\\htdocs...') #4 {principale} gettato in C:\xampp\htdocs\site\include\function_html.php on line 343 per favore vi chiedo un aiuto grazie mille a tutti
thinking Posted May 7 Report Posted May 7 Potrebbe essere il punto esclamativo??? if ($options["callback"] !='')
roccochiolo Posted May 7 Author Report Posted May 7 Ciao non è il punto esclamativo detto in parole semplici dice! Se è diverso di vuoto
DavideDaSerra Posted May 12 Report Posted May 12 Utilizzi una funzionalità che in PHP è stata rimossa dalla versione 7 (il modificatore /e) che consente di trattare una stringa come codice php. preg_replace_callback("/\[(.*)\]/e", "\$rowresult['\\1']" , $row); oggi userei qualcosa del genere preg_replace_callback("/\[(.*?)\]/", function ($matches) use ($rowresult) { return isset($rowresult[$matches[1]]) ? $rowresult[$matches[1]] : $matches[0]; }, $row); In questo modo non usi il modificatore obsoleto /e e alla preg_replace_callback passi una funzione anonima "vera e propria" e non un testo da interpretare come php.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now