Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Php/MySql: inserimento contenuto textarea

    Ciao a tutti,

    ho da poco cambiato server (da Debian a RedHat) e dopo che per 5 anni un form ha sempre funzionato, adesso ho qualche problema a farlo andare.
    Spiego la situazione.
    Si tratta di un banalissimo form con alcuni input ed una textarea.
    Nel momento in cui i contenuti inseriti nel form dovrebbero essere immagazzinati su MySql, la query non va.
    In particolare, andando per esclusione, ho separato la query a pezzettini, salvando campo per campo, e dove si blocca è proprio quando deve salvare i contenuti inseriti nella textarea.
    Ho notato, però, che se i contenuti scritti nella textarea sono tutti su una stessa riga, la query funziona; ma basta anche una sola andata a capo nella textarea e la query non viene eseguita.
    Ho quindi provveduto a modificare gli a capo sostituendoli con dei
    , ma anche così la query non viene eseguita.
    La cella che dovrebbe immagazzinare i dati è di tipo TEXT, collation uft8-general-ci. Ho provato a modificare il tipo di cella, impostandola (tanto per fare una prova) in VARCHAR 255, ma anche così la query non viene eseguita. Ho quindi provato a modificare la collation, in latin1_swedish_1 (come ce l'avevo sul precedente server), ma anche così non va.
    Ho quindi provato ad escludere la query, ed a stampare il testo a video, così come viene passato da una pagina all'altra, ed è correttissimo, con i suoi a capo e quant'altro.
    Sto parlando di una query semplicissima, niente di complicato:
    codice:
    	$db = mysql_connect($dbhost, $dbuser, $dbpassword);
    	if ($db == FALSE) die ("Errore nella connessione.");
    	mysql_select_db($dbname, $db) or die ("Errore nella selezione del database.");
    	$query = "INSERT INTO messaggi (nickname, email, website, messaggio, data, ip) VALUES ('$nickname', '$email', '$website', '$messaggio', '$data', '$ip')"; 
    	$result = mysql_query($query,$db);
    	mysql_close($db);
    e, ripeto, ha sempre funzionato senza problemi.

    Qualcuno ha la più pallida idea di cosa succede?
    Grazie mille a tutti per qualsiasi suggerimento.

  2. #2
    Semplice: non è colpa della distribuzione, ma della configurazione php. Il tuo precedente server aveva attivo register_globals, quello nuovo no.
    Se il metodo è post devi sostituire $campo con $_POST['campo'].
    Se non capisci leggi questa lezione di html.it: http://php.html.it/guide/lezione/266...li-get-e-post/

  3. #3
    Ciao vdfn,

    ti ringrazio per la risposta, ma avevo già verificato qualche giorno fa, register_globals era Off ma l'avevo già reimpostato su On.
    La variabile viene passata correttamente alla seconda pagina, tanto che se escludo la query e faccio un echo della variabile, questa mi viene stampata correttamente a monitor, con tutti i suoi a capo, tra l'altro.


  4. #4
    register globals disattivati per fortuna..

    Codice PHP:
    $db mysql_connect($dbhost$dbuser$dbpassword);
        if (
    $db == FALSE) die ("Errore nella connessione.");
        
    mysql_select_db($dbname$db) or die ("Errore nella selezione del database.");
        
    $query "INSERT INTO messaggi (nickname, email, website, messaggio, data, ip) VALUES   ('{$_POST['nickname']}', '{$_POST['email']}', '{$_POST['website']}', '{$_POST['messaggio']}', '{$_POST['data']}', '{$_POST['ip']}')"
        
    $result mysql_query($query,$db);
        
    mysql_close($db); 
    son sicuro che avrai altre cose che non vanno comunque fai una ricerca sul forum delle register globals


    oppure poi provare questa soluzione che ti sconsiglio da mettere in testa al codice dello script

    Codice PHP:
    foreach($_POST as $key => $val)$$key $val;
    foreach(
    $_GET as $key => $val)$$key $val
    leggi questo thread che parla dell'argomento

    http://forum.html.it/forum/showthrea...=&pagenumber=1
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  5. #5
    Se provi cosa ti viene?
    Comunque prova a togliere gli apici per mettere la variabile e usare $_POST['campo'], facendo così:
    Codice PHP:
        $db mysql_connect($dbhost$dbuser$dbpassword);
        if (
    $db == FALSE) die ("Errore nella connessione.");
        
    mysql_select_db($dbname$db) or die ("Errore nella selezione del database.");
        
    $query "INSERT INTO messaggi (nickname, email, website, messaggio, data, ip) VALUES ($_POST['nickname'], $_POST['email'], $_POST['website'], $_POST['messaggio'], $_POST['data'], '$ip')"
        
    $result mysql_query($query,$db);
        
    mysql_close($db); 
    Oppure è colpa del nome del campo. Nella form hai scritto name="MESSAGGIO" oppure name="messaggio"? sono due cose differenti..

  6. #6
    Grazie per le risposte.

    Sul server precedente, register_globals era impostato su On.
    Sul server attuale, register_globals era impostato su Off, ma (visto che tutti gli script non mi funzionavano, perchè non passavano le variabili da una pagina all'altra) già da qualche giorno l'ho impostato su On. Riavviato il server, adesso è su On.

    Potrei reimpostare register_globals su Off, e fare la prova di trattare le variabili come $_POST['variabile'], anche se questo (se funziona) implicherebbe cambiare le variabili in una marea di script... tuttavia, se così deve essere, pazienza.

    Ad ogni modo, con register_globals attualmente impostato su On, tanti altri scripts, form compresi, con textarea comprese, funzionano correttamente: è solo questo che non va, e come dicevo avendo trasferito il dominio da un server ad un altro non ho modificato proprio nulla rispetto a prima (parlo del codice php, naturalmente): file backuppati e copiati, db backuppato e copiato.
    E così come è adesso, quello script ha funzionato per 5 anni senza il minimo problema, per cui non si tratta di aver chiamato la variabile sul name della textarea con le lettere maiuscole o minuscole (so che per php sono due cose diverse, e comunque ho verificato, per scrupolo - programmo in php da 5 anni, non sono un esperto, ma nemmeno un principiante).

    Grazie ancora.

  7. #7
    Piuttosto... sto confrontando i due phpinfo(); del vecchio e del nuovo server...
    Ho notato diverse differenze, ma soprattutto una forse ha a che fare con il mio problema: magic_quotes_gpc, che sul vecchio server è impostata a On mentre sul nuovo è a Off.
    Potrebbe questo influenzare il comportamento della query?

    Grazie!

  8. #8
    scusa ma hai provato a fare echo $campo?

    e poi fai anche echo $query dopo aver assegnato le variabili!!
    Ciao!

  9. #9
    Originariamente inviato da fmortara
    scusa ma hai provato a fare echo $campo?

    e poi fai anche echo $query dopo aver assegnato le variabili!!
    Si, l'ho scritto nel mio primo messaggio: ho commentato $result, e ho fatto stampare con echo le singole variabili e $query: tutto corretto, come normalmente, le variabili vengono passate perfettamente, e se ci sono delle andate a capo vengono stampate anche queste.. tutto regolare, insomma.
    Per verificare se nel passaggio tra le pagine venisse incluso qualcosa che magari un echo non mi fa vedere nella stampa a video, ho anche fatto la prova di inserire $query in questo modo:
    echo "<input type=hidden name=pippo value=\"",$query,"\">";
    così, leggendo l'html della pagina di risposta ho potuto verificare che non venisse incluso alcun carattere particolare nelle variabili.
    Insomma, da questo punto di vista sembra tutto ok.
    Il problema dovrebbe essere proprio sulla query... anche se si tratta di una banalissima query, mi sa proprio che il problema sta lì.

    Grazie ancora!

  10. #10
    Ragazzi, ho risolto!!!

    Era proprio magic_quotes_gpc, che andava impostato su On.
    Evidentemente, dato che magic_quotes_gpc si occupa di inserire i backslashes prima di apici, virgolette e caratteri speciali che possono dar fastidio a MySql, senza questa impostazione del php.ini la query non andava.
    Quindi, impostato magic_quotes_gpc su On, riavviato il server, tutto ha ripreso a funzionare correttamente.

    Grazie a tutti per il supporto!
    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.