Jump to content
PLC Forum


estrazione ed impaginazione dati


Recommended Posts

roccochiolo
Posted

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

Potrebbe essere il punto esclamativo???

 

if ($options["callback"] !='')
roccochiolo
Posted

Ciao non è il punto esclamativo detto in parole semplici dice! Se è diverso di vuoto 

DavideDaSerra
Posted

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.

 

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...