Problema urgente con checkbox, array e explode

federica.or.76

Nuovo Utente
7 Gen 2011
7
0
0
CHECKBOX, ARRAY e EXPLODE
Non riesco ad estrapolare i dati che ho inserito tramite checkbox dinamici in un'unica cella del mio database.
PROBLEMA: con questo codice, mi legge solo il primo dato fino alla prima virgola che ho inserito es. 51, e mi riporta il titolo della news così per ogni array. Ma se nella cella oltre al 51, c'è anche 69, (es. 51,69,30,) non mi legge quel dato, quindi quando vado nella tipologia collegata al 69 non mi fà vedere nessun titolo anche se in realtà dovrebbe.
So che al listato manca (credo) il ciclo explode che gli fà leggere tutti i dati inseriti successivi al primo ma siccome non sono esperta di PHP, non sò come fare ne cosa cercare nel forum per risolvere il mio problema.

FILE: contenuto_news.php è il file dove richiamo le news collegate alla solita tipologia. (esempio: meteo con id tipologia 10 contiene 3 news, cronaca con idtipologia 14 contiene 5 news etc.)


<?PHP
$sql = "SELECT * FROM tbl_news_ita2 WHERE idtipologia=$idtipologia";
$tuple = @mysql_query($sql, $connessione) or die(mysql_error());
$num_tuple = mysql_num_rows($tuple);
$paginazione = 25;

if (empty($offset)) { $offset = 0;}
if (empty($limit)){ $limit = $paginazione; }
$query = @mysql_query("$sql LIMIT $offset, $limit" , $connessione);
while ($rsnews = mysql_fetch_array ($query)){?>

<?php echo ($rsnews["titolo"]); ?>
<br>
.......................................................................................
<br>
 
Se vuoi inserire un array in una cella MySQL ti consiglio di usare la funzione serialize quando lo inserisci e unserialize per riconvertirlo in array. Le funzioni explode e implode sono poco stabili per questo genere di operazioni, e qualcuno potrebbe facilmente effettuare un SQL injection o corrompere i dati nella tabella.
 
Non ho mai usato serialize e unserialize....non so se sono buona

Ecco il codice che avevo usato per salvare i dati nel database.....

FILE: news_insert.php

PHP:
<form action="<?=$PHP_SELF?>?mod=<?=$mod?>&dir=<?=$dir?>&page=news_insert2" method="post" enctype="multipart/form-data" onsubmit="return controlla()" name="registrazione">
<table border="0" cellpadding="2" cellspacing="2" style="border-collapse: collapse" width="94%" align="center">
<tr>
<td width="100%" valign="top"><b><font face="Verdana" size="1">SCEGLI TIPOLOGIE</font></b></td>
<td width="80%"><script type="text/javascript">
function SelezTT()
{
var i = 0;
var modulo = document.registrazione.elements;
for (i=0; i<registrazione.length; i++)
{
if(registrazione[i].type == "checkbox")
{
registrazione[i].checked = !(modulo[i].checked);
}
}
}
</script>
<div style="font-family:Verdana, Geneva, sans-serif; font-size:10px;" class="third left">
<?PHP
$querytip = mysql_query("SELECT * FROM tbl_news_tipologie WHERE evadi='0'", $connessione);
while ($rstip = mysql_fetch_array ($querytip)){
?>
<?php if($rsnews["tipologia_ita"]!=0){ echo "$querytip"; } ?> 
<input type="checkbox" name="idtipologia[]" value="<?=$rstip["idtipologia"]?>">
<?=$rstip["tipologia_ita"]?><br></span><span class="testo_semplice_news"> 
</span> <?}?><br /><br />
<input type="button" value="Seleziona tutto" onclick="SelezTT()">
</div>

<?php
if ( !empty( $node->field_demo_testo[0]['view']) ) {
print "<div id='show'>". $node->field_demo_testo[0]['view'] ."</div>";
}
?>

</td>
</tr>
<tr> 
<td></td>
<td>
<input type="submit" name="submitvalues" value="Salva e prosegui" class="form" style="width:300px">
</td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1">
</form>


FILE: news_insert2.php

PHP:
<?PHP
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { 

$arr = $_POST['idtipologia']; 

$tot_value = ""; 
foreach ($arr as $value) { 
$tot_value .= "$value,"; 
}


$sql = sprintf("INSERT INTO tbl_news_ita2 VALUES ('', '$tot_value', '$titolo', '$descrizione', '$testo', '', '','$immaginetesto_name', '$immagineicona_name', '$url', '', '$data', '0', '$ordine', '$novita')");
$rs_in = mysql_query ($sql, $connessione) or die(mysql_error());
$idnews=mysql_insert_id();

} 
creafilejspereditor();
?>

<script type="text/javascript">
window.location = "<?=$PHP_SELF?>?mod=<?=$mod?>&dir=<?=$dir?>&page=<?=news_elenco>&id=<?=$id?>"
</script>
 
Ultima modifica di un moderatore:
Basta che modifichi queste tre righe:
PHP:
$tot_value = "";  
foreach ($arr as $value) {  
$tot_value .= "$value,";  
}
Così:
PHP:
$tot_value = serialize($arr);
E poi quando recuperi il campo dal database lo passi alla funzione unserialize che ti restituirà nuovamente l'array.
 
Ciao, scusa se non ti ho risposto e ringraziato subito, ma ho fatto delle prove.....e....

finche applico serialize e unserialize all'interno del solito file, mi restituisce i valori giusti e tutti quelli inseriti nella solita cella del db.
Es.
<? PHP
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

$arr = $_POST['idtipologia'];

$tot_value = "";
foreach ($arr as $value) {
// $tot_value .= "$value,";
$tot_value .= base64_decode (serialize ($arr));
}
$sql = sprintf("INSERT INTO tbl_news_ita2 VALUES ('', '$tot_value', '$titolo', '$descrizione', '$testo', '', '','$immaginetesto_name', '$immagineicona_name', '$url', '', '$data', '0', '$ordine', '$novita')");
$rs_in = mysql_query ($sql, $connessione) or die(mysql_error());
$idnews=mysql_insert_id();
}
creafilejspereditor();
?>
<?php
unserialize( base64_decode( $_POST["$value"] ) );
foreach ($arr as $value) {
$tot_value .= "$value,";

echo "$value"."<br>";}
?>

MA QUANDO vado a impostare la mia query in un altro file, non riesco a farlo funzionare, mi da errore di foreach!

Come posso fare?

Di seguito ho inserito la query che utilizzerei se avessi un solo dato all'interno della cella idtipologia. Siccome ho più dati, la query mi deve leggere tutti i dati nelle celle e farmi vedere il titolo della news corrispondente al valore idtipologia che passo nella barra di navigazione in alto.

<?PHP
$sql = "SELECT * FROM tbl_news_ita2 WHERE idtipologia=$idtipologia";
$tuple = @mysql_query($sql, $connessione) or die(mysql_error());
$num_tuple = mysql_num_rows($tuple);
$paginazione = 25;

if (empty($offset)) { $offset = 0;}
if (empty($limit)){ $limit = $paginazione; }
$query = @mysql_query("$sql LIMIT $offset, $limit" , $connessione);
while ($rsnews = mysql_fetch_array ($query)){?>

<?php echo ($rsnews["titolo"]); ?>
<br>
.................................................. .....................................
<br>

Se potessi darmi una mano anche qui, te ne sarei grata.
Ciao
 
Non devi modificare così:
PHP:
foreach ($arr as $value) { 
// $tot_value .= "$value,"; 
$tot_value .= base64_decode (serialize ($arr));
}
Ma così:
PHP:
$tot_value = serialize($arr);
Senza nessun foreach. E poi non capisco: cosa c'entra base64_decode? Toglilo...
 
Non devi modificare così:
PHP:
foreach ($arr as $value) { 
// $tot_value .= "$value,"; 
$tot_value .= base64_decode (serialize ($arr));
}
Ma così:
PHP:
$tot_value = serialize($arr);
Senza nessun foreach. E poi non capisco: cosa c'entra base64_decode? Toglilo...

Ok ho fatto la sostituzione, e per richiamare i dati con query in un'altro file come faccio?


$tot_value = unserialize($arr);
(scusa, ma sono alle prime armi, e sto facendo una corsa contro il tempo, ciao)
 
Ciao, eccomi di nuovo qui!

Ho impostato la mia query e questo è il risultato: http://www.lunigianasostenibile.it/public/new/menu_variabile.php

è un percorso di prova e in tutte e quattro le voci dovrebbero esserci delle news, invece mi viene letto solo il primo dato prima della "," gli altri no, quindi quando viene comparato idtipologia=$value" è come se non vedesse niente


<?PHP
$querytip2 = mysql_query("SELECT * FROM tbl_news_ita2", $connessione);
$rstip2 = mysql_fetch_array ($querytip2);
$value = $idtipologia;
$array = unserialize($value);

$sql = "SELECT * FROM tbl_news_ita2 WHERE idtipologia=$value";

$tuple = @mysql_query($sql, $connessione) or die(mysql_error());
$num_tuple = mysql_num_rows($tuple);

$paginazione = 25;

if (empty($offset)) { $offset = 0;}
if (empty($limit)){ $limit = $paginazione; }

$query = @mysql_query("$sql LIMIT $offset, $limit" , $connessione);

while ($rsnews = mysql_fetch_array ($query)){

echo "$value" ."-". $rsnews["titolo"]."<br>" . "...................................." . "<br>";

echo "<br>";
echo ".......................................................................................";

echo "<br>";?>

<? } ?>
 
Non capisco una cosa. In queste righe:
PHP:
$value = $idtipologia; 
$array = unserialize($value);
A parte il fatto che non capisco per quale motivo copi $idtipologia in $value... dove è definita la variabile $idtipologia?
 
Non capisco una cosa. In queste righe:
PHP:
$value = $idtipologia; 
$array = unserialize($value);
A parte il fatto che non capisco per quale motivo copi $idtipologia in $value... dove è definita la variabile $idtipologia?

La variabile idtipologia, la recupero dalla barra in alto dell'indirizzo, quando clicco sulla voce del menù, mi compare es. http://www.lunigianasostenibile.it/public/new/tipologia.php?novita=17&idtipologia=58

Quando l' idtipologia è uguale a 58, mi deve andare a prendere dalla tabella tbl_news_ita 2 il titolo e farmelo vedere.

Nel mio database, tbl_news_ita 2 è composta da id, idtipologia, titolo, descrizione etc.

Dentro idtipologia, vengono salvati tramite form, dei numeri in questa maniera: 58,51,62,

Io devo fare il confronto tra il numero che compare nell'indirizzo (http://www.lunigianasostenibile.it/public/new/tipologia.php?novita=17&idtipologia=58
) e il numero che è contenuto nella cella idtipologia.

Il listato che ho fatto, mi pubblica il titolo ma solo se es. 58, è il primo numero, se invece è inserito così: 61,58, non me lo riconosce e non mi visualizza il titolo.

Questo è il mio problema :(
 

Discussioni simili