• User

    Problemi insert/update in db sql con campo textarea/text apici

    Ciao,
    ho un problema con apici singoli e doppi in fase di insert e di update di campi testo in un database sql.

    Il codice è questo:
    pagina micronews_admin.php (dove visualizzo i campi per inserire e modificare le informazioni)

    case 'edit':
    if ($_REQUEST['id']!=""){
    $query="SELECT * FROM csa_micronews WHERE id=".$_REQUEST['id'];
    $result=mssql_query($query);
    print "".$riga['id'];
    while ($riga=mssql_fetch_array($result)){
    $id=$riga['id'];
    $data=$riga['data'];
    $testo=$riga['testo'];
    $pubblica=$riga['pubblica'];
    }
    }
    //form
    print "<br/><br/><b>MODIFICA/INSERIMENTO</b><br/><br/>\n";

        print "<form method='post' action='function.php' id='myForm' name ='modulo'  onsubmit='return Modulo()'>";
        print "<input type='hidden' name='tipo' value='micronews'>";
        print "<input type='hidden' name='act' value='edit'>";
        print "<input type='hidden' name='id' value='".$id."'>";
        
        print " Data<br/><input type='text' name='data' value='".$data."'><br/><br/>";
        
        //area testo con tinymce
        print "<textarea id='' name='testo' style='border:1px solid #000;width:400px; height:200px;'>".$testo."</textarea>";
            
        
        print"<strong>Vuoi pubblicarlo? </strong><input type='checkbox' name='pubblica' ";
        if ($pubblica){
                print "checked ";
        }
        print"value='1' /><br />";
        print "<input type='submit' value='Salva'>";
        print"</form>";
        break;
    

    pagina micronews_fun.php (dove eseguo le query per l'insert e l'update)

    case 'edit':
    //modifica e inserimento su DB
    if ($_REQUEST['pubblica']=="") $_REQUEST['pubblica']==0;
    if ($_REQUEST['id']!=""){

        $query="UPDATE csa_micronews SET data='".$_REQUEST['data']."',testo='".$_REQUEST['testo']."',pubblica=".$_REQUEST['pubblica']." WHERE id=".$_REQUEST['id']."";
    
        
        }else{            
        $query="insert into csa_micronews ";
        $query.="VALUES ('".$_REQUEST['data']."','".$_REQUEST['testo']."',".$_REQUEST['pubblica']." )";
        }    
        
        //print $query;
        //exit;
        mssql_query ($query);
        
        header ("location:admin.php?tipo=micronews");
        //print $query;
        //exit;
        break;        
    

    Avevo provato ad usare la funzione htmlspecialchar*s
    e htmlentities ma da sempre errore in fase di inserimento nel punto in cui c'è l'apice singolo o doppio.

    Come textarea uso tinymce ma il problema resta lo stesso.

    Come posso fare?
    Grazie :ciauz:

    Ho provato a modificare così:
    testo='".htmlspecialchars($_REQUEST['testo'], ENT_QUOTES)."'
    ma in questo caso la visualizzazione mostra gli eventuali tag di di formattazione effettuati nella textarea di tinymce e quindi anche online
    che cosa manca per risolvere questo problema???


  • ModSenior

    Ciao,

    Usa addslashes.


  • User

    Ho messo addslashes al posto di htmlspecialchars, ma continua a dare errore, nel punto in cui c'è l'apice...

    La cosa strana che nella textarea normale e nel campo input text htmlspecialchars funziona perfettamente e infatti visualizza tutto correttamente, quello che non funziona è la textarea dove uso un text editor sia questo tinymce che fckeditor(!!!) , e se metto htmlspecialchar davanti a $_REQUEST['testo'] mi visualizza e salva tutti i tag di formattazione come fossero testo :arrabbiato:

    Ok, ho risolto in modo molto banale >____>
    Ovvero io scrivevo la query così:
    $query.="VALUES ('".$_REQUEST['data']."','".$_REQUEST['testo']."',".$_REQUEST['pubblica']." )";
    con gli apici singoli a racchiudere ogni values

    Ho sostituito questi apici singoli con " :
    $query.="VALUES ("".htmlspecialchars($_REQUEST['data'], ENT_QUOTES)."", "".$_REQUEST['testo']."", ".$_REQUEST['pubblica']." )";
    e il problema si è risolto .... certo dopo averci passato tutto il pomeriggio!!!!

    Grazie comunque per l'idicazione Thedarkita 🙂

    Ciao


  • User Attivo

    Come vedo qualcosa manca cioè i campi, del DB, cui le variabili fanno riferimento. Lo vedi sotto in grassetto anche se il nome dei campi lo metto io non sapendo come è la tabella.
    $query="insert into csa_micronews (data,testo,pubblica)";
    $query.="VALUES ('".$_REQUEST['data']."','".$_REQUEST['testo']."',".$_REQUEST['pubblica']." )";

    Fammi sapere se è andato a buon fine

    CIAO


  • User

    Ciao,
    grazie Mikslap quello mancava ma non so come funzionava lo stesso Oo

    Però il problema di prima non è risolto affatto, nel senso che se inserisco apici e doppi apici tutto ok, ma se inserisco con fckeditor della formattazione tipo h2 o colore o un link quando vado a visualizzare mi da errore di sintassi e se aggiungo htmlspecialchar a $_REQUEST['testo'] e $riga['testo']; mi visualizza tutti i tag -___________-

    <h2><span style="color: rgb(255, 102, 0);">asdasdsdd</span></h2> <p>sa'sa</p> <p>"asdasdad"</p>

    Qualche soluzione?
    :ciauz:


  • User Attivo

    Se non vuoi visualizzare i tag devi dare alle variabili valori tipo
    $DATA = strip_tags($_REQUEST['data']);
    $TESTO = strip_tags($_REQUEST['testo']);
    $PUBB = strip_tags($_REQUEST['pubblica']);

    Se non è questa la soluzione fammi capire meglio cosa vuoi

    CIAO


  • User

    Rieccomi di nuovo allora ho risolto, e sembra in modo definitivo, il problema mettendo un str_replace.

    Ecco la nuova riga:
    testo='".str_replace("'", "´", $_REQUEST['testo'])."',

    In questo modo ho ripristinato gli apici singoli per i values e ho sostituito solo quelli eventualmente interni alla textarea, anche perchè usando le altre funzioni poi si presentava il problema degli apici doppi o dei tag html

    Grazie per l'aiuto ^____^