Divisione in blocchi

  • Creatore Discussione Creatore Discussione miagy
  • Data di inizio Data di inizio

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ciao ragazzi e buona vigilia :love:
Premetto che il codice funziona e dunque mi sono permesso di aggiungere le parti principali.
Dato un testo di 1000 caratteri scritto in una textarea come maxlenght 1000 e che viene inserito/calcolato in questo modo:

PHP:
$Msg = stripslashes($Msg);
$Msg = substr($Msg, 0, min(strlen($Msg), 1000));
$Msg = addslashes($Msg);

[...]

$Msg = htmlspecialchars($Msg);
            $MySql = "INSERT INTO Brani (Stanza, Mittente, Destinatario, Ora, Testo)";
            $MySql .= "VALUES ('".addslashes($Stanza)."', '$pg', '$pg', NOW(), '$Msg')";
	        mysql_query($MySql);
                                       
}

volevo chiedervi una modifica.
Se io aumentassi il maxlenght del textarea a infinito ma volessi, nel momento dell'inserimento, suddividere in blocchi da 1000 un testo di, ad esempio, 3000 caratteri, come mi converrebbe farlo?
E la suddivisione in blocchi che mi frena un attimo e mi sta facendo entrare in pappa il cervello.

Faccio un esempio pratico:
- Scrivo un testo di 2000 caratteri (spazi inclusi)
- Inserisco
- Anziché mettermi il testo di 2000 caratteri, me lo divide in 2 (primo: primi 1000 caratteri/secondo: rimanenti).

:byebye:
 
ciao
per dividere in blocchi forse ti conviene usare un array
PHP:
<?php
//es $msg lungo 7.654 caratteri
$blocco=array();
$lunghezza=strlen($msg)-1;
//da suddivi in blocchi da 1.000
for($k=0; $k < $lunghezza; $k+=1000){
	$blocco[]=substr($msg, $k, 1000);
}
var_dump($blocco);//per vedere come viene suddiviso
/*
in teoria dovresti trovrti così
in $blocco[0] i primi 1000 caratteri
in $blocco[1] i secondi 1000 caratteri
..ecc..
in $blocco[6] i caratteri rimanenti
*/
?>
però da quello che vedo tu poi fai l'insert in un campo chiamato 'testo' di una tabella quindi in 'testo' cosa metti? la tabella dovrebbe avere tanti campi 'testo' quanti sono i gruppi e non puoi fare una tabella che si allunghi o accorci in funzione dei gruppi che hai, il numero di campi deve essere predisposto prima
 
Ma se invece facessi una cosa simile:

PHP:
$blocchi = array();
$arrayParole = explode($azione, " ");

$txt = "";
while($parola = array_shift($arrayParole)) {
    if (strlen($txt." ".$parola) < 1000) {
         $txt .= " ".$parola;
    } else {
         $blocchi[] = $txt;
         $txt = $parola;
    }
}
$blocchi[] = $txt;

E poi inserissi tanti INSERT quanti sono i blocchi per ovviare al problema?
L'unico dubbio è che una manovra simile non l'ho mai applicata quindi mi trovo in difficoltà con l'inserimento INSERT .-.
 
ciao
probabilmente si, se non ho capito male quello che vuoi fare probabilmente dovrai usare due tabelle e collegarle.
provo a farti uno schema anche per vedere se ho capito quello che vuoi fare
1) tu hai una tabella chiamata brani in cui metti Stanza, Mittente, Destinatario, Ora, immagino come sarebbe giusto che ogni record sia individuato da una chive primaria
chiamata (es) id
2) il testo essendo molto lungo lo vuoi dividere in blocchi ciascuno con max 1000 caratteri, giusto sin qui?
ti conviene allora fare un'altra tabella così strutturata chiamata es. testi
Codice:
id int(3) autoincrement primarikey
id_brano int(3) //questo lega la tabella brani alla tabella testi
blocco lengtext
3) nella tabella brani elimini il campo testo
schematizzioamo come dovresti fare
4) fai l'insert nella tabella "brani"
5) da qull'insert leggi l'id del record appena inserito con int mysql_insert_id ($ris )
6) crei i blocchi di testo ottenendo l'array
7) fai l'insert dei blocchi di testo
schematizzando e riassumendo
PHP:
<?php
//dati di connessione
$MySql = "INSERT INTO Brani (Stanza, Mittente, Destinatario, Ora)";
$MySql .= "VALUES ('".addslashes($Stanza)."', '$pg', '$pg', NOW()";
$ris=mysql_query($MySql);//fai l'insert in brani
$id_brano_inserito=mysql_insert_id($ris);//ricavi l'id dell'ultimo record inserito
//dividi in blocchi il testo ottenendo l'array $blocchi[]
foreach($blocchi as $blocco){
	$query="INSERT INTO testi (id_brano, blocco) VALUES($id_brano_inserit, '$blocco')";
	$ris=mysql_query($query);
}
//....
?>
poi quando devi leggere
PHP:
<?php
$query_1=mysql_query("SELECT * FROM brani");//con l'eventuale WHERE
while($riga_b=mysql_fetch_array($query_1)){
	$id=$riga_b['id'];
	$stanza=$riga_b['stanza'];
	//...mittente destinatario, ora e visualizzi
	$query_2="SELECT * FROM testi WHERE id_brano=$id";
	$txt="";
	while($riga_t=mysql_fetch_array($query_2)){
		$txt.=$riga_t['blocco'];//ricostruisci il testo
	}
	// e lo mostri a video
}
//.....
?>
tutto se ho capito bene e comunque devi fare delle prove

p.s.
abbandona le vecchie isreuzioni mysql obsolete e passa alle mysqli
 

Discussioni simili