PDA

View Full Version : classe che estrae ed impagina i dati


roccochioloMO
10-05-2025, 16:13
buonasera a tutti sono nuovo del forum , ho un problema con una classe che estrae i dati da mysqli e l impagina dentro una tabella , soltanto che non capisco dove sbaglio : posto il codice cosi e tutto molto piu chiaro.
Cosi creo ed estraggo i dati dentro una tabella e li passo alla classe

$fields = array();
$fields[0]['type'] = "";
$fields[0]['name'] = "titlearticle"; //questo e il nome che deve richiamare le singole tabrlle
$fields[0]['value'] = "yyyyyyy";
$fields[0]['title'] = "titolo";
$fields[0]['align'] = "left";
$options = array();
$options['limit'] = "4";
$options['callback']='_ArticlesField';

$grid = new DataGrid;
$grid->gridstart("Articles","Articles xxx",'SELECT * FROM `articles` $sortjoin',
'SELECT COUNT(*) AS total FROM articles',
' SELECT * FROM article WHERE arttitle LIKE \'%$searchstr%\' $sortjoin'
, $fields, $options);
$grid->displaygrid("Articles");

cosi posto quello che estraggo :


if ($options["callback"] !='' && is_callable($options["callback"]))
{
$rowresult = call_user_func($options["callback"], array($dbcore->Record2, $fields[0]['name']));
} else {
$rowresult = $dbcore->Record2;
}
echo preg_replace_callback("/\[(.*)\]/e", "\$rowresult['\\1']", $tdrow);


dove ci sta $options["callback"] chiamo una funzione per far rendere editabile il testo.
qui postoun applicazione che serve ad rendere il testo scaricato editabbile

questo e il var_dump:

array(16) {
["articleid"]=>
string(1) "3"
["categoryid"]=>
string(1) "0"
["staffid"]=>
string(1) "1"
["titlearticle"]=>
string(147) "
string(1) "1"
["editeddateline"]=>
string(10) "1745705801"
["editedstaffid"]=>
string(1) "1"
["views"]=>
string(1) "9"
["totalcomments"]=>
string(1) "0"
["hasattachments"]=>
string(1) "0"
["dateline"]=>
string(10) "1745461343"
["displayorder"]=>
string(1) "2"
["articlestatus"]=>
string(1) "1"
["articlerating"]=>
string(1) "1"
["ratinghits"]=>
string(1) "0"
["ratingcount"]=>
string(1) "0"
}
grazie mille a tutti

roccochioloMO
17-05-2025, 14:52
buongiorno per favore aiuto

Vale-85
19-06-2025, 14:13
Ciao,

Il codice che hai postato sembra ben strutturato nel flusso generale, ma ci sono un paio di punti critici da chiarire.
1. Uso di preg_replace_callback() con "/\[(.*)\]/e"

Questo è il punto più problematico:

echo preg_replace_callback("/\[(.*)\]/e", "\$rowresult['\\1']", $tdrow);

L’uso del modificatore e in preg_replace() è deprecato da PHP 5.5 e rimosso in PHP 7.0. Per ottenere lo stesso effetto oggi, dovresti usare preg_replace_callback() con una funzione anonima, tipo così:

echo preg_replace_callback("/\[(.*?)\]/", function($matches) use ($rowresult) {
return isset($rowresult[$matches[1]]) ? $rowresult[$matches[1]] : '';
}, $tdrow);

2. Callback personalizzato

La parte con:

if ($options["callback"] !='' && is_callable($options["callback"])) {
$rowresult = call_user_func($options["callback"], array($dbcore->Record2, $fields[0]['name']));
} else {
$rowresult = $dbcore->Record2;
}

va bene come logica, ma verifica che:

La funzione _ArticlesField() restituisca effettivamente un array strutturato come Record2

I nomi delle chiavi corrispondano a quelli nel preg_replace_callback() (case sensitive!)

3. Suggerimento aggiuntivo

Se il tuo obiettivo è costruire una griglia tabellare con campi editabili su dati MySQL, potresti valutare anche un approccio più modulare e moderno, basato su template engine o librerie JS frontend.
A me, per esempio, è capitato di collaborare con https://pma.agency/, che sviluppa gestionali web personalizzati e lavora anche su soluzioni che permettono l’editing inline dei dati tramite interfacce AJAX – magari può darti qualche spunto se il progetto cresce.

Fammi sapere se riesci a risolvere con queste modifiche, oppure posta anche un esempio di $tdrow così vediamo cosa deve essere renderizzato esattamente.

roccochioloMO
20-06-2025, 07:02
Ciao ti ringrazio dei preziosi suggerimenti sono riuscito a ad adattare la classe , stasera appena sono davanti al PC ti posto come ho risolto ! Grazie mille gentilissimo

roccochioloMO
20-06-2025, 20:51
ciao ho risolto cosi :


for ($i=0; $i <count($fields); $i++){
if (isset($options["callback"]) && is_callable( $options["callback"]) )
{
$rowresult = call_user_func($options["callback"], array($rowfields,$fields) );
} else {
$rowresult = $rowfields ;
}
$cnt++;

$tdrow = '<td'. $tdC_colspan[$i] .$tdC_width[$i] .$tdC_align[$i] .$tdC_valign[$i].'><span class="smalltext">['. $fields[$i]["name"] .']';
echo @preg_replace( "/\[(.*)\]/", $rowresult[$fields[$i]["name"]] , $tdrow );
$tdrow .='</span></td>'.CMS_CRLF;
}
echo '</tr>';
}