Pagina 1 di 2
Problema apostrofo su database MySQL...
Inviato: 18/10/2015, 12:41
da pollat
Ho un problema con il mio database MySQL, inserisco i valori nel database tramite modulo su pagina php ma se inserisco una frase con apostrofo il database non registra la frase inserita.
Credo che capiti perchè il database MySQL li vede come apici e quindi non li registra, so che basta inserire \' per inserire l'apostrofo ma vorrei sapere se esiste un metodo per far accettare direttamente l'apostrofo come in una frase normale.
grazie in anticipo.
Re: Problema apostrofo su database MySQL...
Inviato: 18/10/2015, 18:06
da Sir Xiradorn
Devi usare l'escaping per fare si che l'apostrofo diventi da ' a \'
Re: Problema apostrofo su database MySQL...
Inviato: 19/10/2015, 11:40
da pollat
si questo lo so ma mi serve un metodo che faccia tutto in automatico e accetti normalmente l'apostrofo
Re: Problema apostrofo su database MySQL...
Inviato: 19/10/2015, 11:58
da Sir Xiradorn
Allora esistono molte funzioni che ti permettono di fare l'escape.
Puoi usare ad esempio il
mysql_real_escape_string
Codice: Seleziona tutto
$stringa_con_escape = mysql_real_escape_string($stringa)
Una soluzione semplice e veloce ma questa sta per essere non compatibile con la versione 7 di php che sta sostituendo le funzioni mysql e compagnia bella con le PDO
Una soluzione può ancora essere la seguente ovvero
htmlspecialchars
Codice: Seleziona tutto
$stringa_con_escape = htmlspecialchars($stringa, ENT_QUOTES)
Se poi cuoi il classico slash prima dell'apostrofo ovvero \' puoi usare
addslashes ma è poco elegante. In ogni caso funge tranquillamente
Dipende dove lo devi usare
Re: Problema apostrofo su database MySQL...
Inviato: 19/10/2015, 12:27
da pollat
Lo devo usare nel form che i clienti utilizzano per modificare i dati del database, di default i campi del form presentano i dati già presenti nel database che il cliente può modificare e cliccando salva finiscono aggiornati nel database.
Adesso se qualcuno immette un dato con apostrofo il dato non viene aggiornato, per cui vorrei un metodo semplice per permettere al cliente di aggiungere un dato con apostrofo (insomma in modo che funzioni automaticamente senza dovergli dire "aggiungi il backslash prima dell'apostrofo")
Re: Problema apostrofo su database MySQL...
Inviato: 19/10/2015, 12:33
da Sir Xiradorn
Te l'ho scritto sopra. Quando ricevi il dato dal campo di testo della form filtri quel dato e poi li invii nel db. Il tuo cliente non deve preoccuparsi di mettere \' ma solo e soltanto '. Il codice farà il lavoro sporco.
Se posti il codice che usi nella form, ti faccio capire
Re: Problema apostrofo su database MySQL...
Inviato: 22/10/2015, 10:46
da pollat
Sir Xiradorn ha scritto:Te l'ho scritto sopra. Quando ricevi il dato dal campo di testo della form filtri quel dato e poi li invii nel db. Il tuo cliente non deve preoccuparsi di mettere \' ma solo e soltanto '. Il codice farà il lavoro sporco.
Se posti il codice che usi nella form, ti faccio capire
Questo è il form:
Codice: Seleziona tutto
<form name="form_modifica_dati" method="post" action="pagina_scheda_102.php">
<input
type="text"
class="editabile"
value="<? $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda=102" ) or die ( mysql_error() ); WHILE ( $row= mysql_fetch_array($result)) echo $row[gruppo] ?>"
name="gruppo"
>
<input type="submit" name="modifica_dati_102" value="Salva">
</form>
considera che nel file "pagina_scheda_102.php" (dove vengono spediti i dati del form), c'è il codice che li inserisce nel database, ossia:
Codice: Seleziona tutto
<!-- Script php per aggiornamento dati scheda -->
<?php
// Controllo che il form sia stato inviato
if (isset($_POST['modifica_dati_102']) )
{
// Collegamento al database
include ( 'connessione_database.php' );
// aggiornamento campo nome
$nome = $_POST['nome'];
$result = mysql_query ( " UPDATE tabellaschede SET nome = '$nome' WHERE idscheda=102 " );
// aggiornamento campo gruppo
$gruppo = $_POST['gruppo'];
$result = mysql_query ( " UPDATE tabellaschede SET gruppo = '$gruppo' WHERE idscheda=102 " );
}
?>
domanda:
ma poi nel database i dati come appaiono con o senza slash ?
Ossia se un cliente scrive l'Aquila nel database ci finisce l'Aquila o l\'Aquila???
Re: Problema apostrofo su database MySQL...
Inviato: 22/10/2015, 12:27
da Sir Xiradorn
Nel database deve finirci qualcosa di uno dei due tipi che ti elenco sotto
- l\'Aquila
- l'Aquila o anche l'Aquila (sono equivalenti solo che uno è un valore Alphanumerico l'altro è Unicode ma ai fini so la stessa cosa)
Quando poi lo si rispara a video la stringa sarà mostrata come l'Aquila. Hai quindi due maniere di farlo e io ti consiglio la seconda e che ti da la cosa che ho scritto nella seconda voce. Ma te le dico entrambe e lo scrivo solo per una voce poi tu lo adatti per le altre.
Individuiamo la stringa da modificare
Codice: Seleziona tutto
$nome = $_POST['nome'];
// IL codice lo mettiamo qua
$result = mysql_query ( " UPDATE tabellaschede SET nome = '$nome' WHERE idscheda=102 " );
ho messo un commento dove va inserito il codice
1) \'
2) '
o anche ad esempio per una sorta di retrocompatibilità
oppure (leggermente sconsigliato però)
Un consiglio se non sei su phpbb e stai sviluppando tu una form usa non le vecchie funzioni mysql_* ma le nuove PDO che sono contro le sql jnjection
Re: Problema apostrofo su database MySQL...
Inviato: 22/10/2015, 17:08
da pollat
Sir Xiradorn ha scritto:
Un consiglio se non sei su phpbb e stai sviluppando tu una form usa non le vecchie funzioni mysql_* ma le nuove PDO che sono contro le sql jnjection
ecco questa era lì'altra cosa che volevo sapere: come dovrei fare per utilizzare le nuove PDO ???
per il resto grazie mille!!!!
Re: Problema apostrofo su database MySQL...
Inviato: 22/10/2015, 17:54
da Sir Xiradorn
Facile devi solo cambiare le tue funzioni con le nuove. La cosa bella è che sono multi database quindi diciamo che non ti importa moltissimo se cotruisci una funzione per mysql ma puoi riusarla anche su mariadb o oracle ad esempio. Una manna dal celo per gli sviluppatori. Ma facciamo qualche esempio semplice e solo per capirci.
Per fare una connessione al db prima facevi una cosa del tipo (su mysql)
Codice: Seleziona tutto
/**
* Connessione al db con le vecchie funzioni
*/
$hostname = "localhost";
$username = "root";
$passwond = "toor";
$database = "database";
$attiva = false;
if (!$attiva) {
if($cnt = @mysql_connect($hostname, $username, $passwond) or die()) {
$db = @mysql_select_db($database, $cnt);
if ($db) {
$attiva = true;
}
}
}
// codice e operazioni varie
if ($attiva) {
@mysql_close($db) or die();
}
Ora devi solo fare così.
Codice: Seleziona tutto
/**
* Connessione al db con le NUOVE funzioni
*/
$dbtype = "mysql";
$hostname = "localhost";
$username = "root";
$passwond = "toor";
$database = "database";
if (in_array($dbtype, PDO::getAvailableDrivers())) {
try {
$db = new PDO ("$dbtype:host=$hostname;dbname=$database;charset=utf8", $username, $passwond);
} catch (PDOException $e) {
echo $e->getMessage();
}
}
// codice e operazioni varie
unset($db);
E questo è una osa meravigliosa. Perchè vuoi cambiare le tue funzioni per mysqli? Prima dovevi editare tutte le funzioni. Ora invece ti basta solo far connettere il PDO al nuovo tipo di db e hai fatto.
E non devi manco chiude la connessione ma ti basta solo distruggere l'oggetto per non avere più problematiche.
EDIT: ho Editato il codice ora è corretto ci stava qualche imperfezione. Ma è solo per capirci