phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Problema apostrofo su database MySQL...

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
pollat
Utente
Utente
Messaggi: 20
Iscritto il: 09/04/2014, 20:43

Problema apostrofo su database MySQL...

Messaggio da pollat » 18/10/2015, 12:41

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.

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: Problema apostrofo su database MySQL...

Messaggio da Sir Xiradorn » 18/10/2015, 18:06

Devi usare l'escaping per fare si che l'apostrofo diventi da ' a \'
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

pollat
Utente
Utente
Messaggi: 20
Iscritto il: 09/04/2014, 20:43

Re: Problema apostrofo su database MySQL...

Messaggio da pollat » 19/10/2015, 11:40

si questo lo so ma mi serve un metodo che faccia tutto in automatico e accetti normalmente l'apostrofo

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: Problema apostrofo su database MySQL...

Messaggio da Sir Xiradorn » 19/10/2015, 11:58

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

Codice: Seleziona tutto

$stringa_con_slash = addslashes($stringa) 
Dipende dove lo devi usare
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

pollat
Utente
Utente
Messaggi: 20
Iscritto il: 09/04/2014, 20:43

Re: Problema apostrofo su database MySQL...

Messaggio da pollat » 19/10/2015, 12:27

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")

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: Problema apostrofo su database MySQL...

Messaggio da Sir Xiradorn » 19/10/2015, 12:33

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
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

pollat
Utente
Utente
Messaggi: 20
Iscritto il: 09/04/2014, 20:43

Re: Problema apostrofo su database MySQL...

Messaggio da pollat » 22/10/2015, 10:46

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???

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: Problema apostrofo su database MySQL...

Messaggio da Sir Xiradorn » 22/10/2015, 12:27

Nel database deve finirci qualcosa di uno dei due tipi che ti elenco sotto
- l\'Aquila
- l&apos;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) \'

Codice: Seleziona tutto

$nome = mysql_real_escape_string($nome);
2) '

Codice: Seleziona tutto

$nome = filter_var($nome, FILTER_SANITIZE_STRING);
o anche ad esempio per una sorta di retrocompatibilità

Codice: Seleziona tutto

$none = htmlentities($nome, ENT_QUOTES);
oppure (leggermente sconsigliato però)

Codice: Seleziona tutto

$none = htmlspecialchars($nome, ENT_QUOTES);  
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
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

pollat
Utente
Utente
Messaggi: 20
Iscritto il: 09/04/2014, 20:43

Re: Problema apostrofo su database MySQL...

Messaggio da pollat » 22/10/2015, 17:08

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!!!!

Avatar utente
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: Problema apostrofo su database MySQL...

Messaggio da Sir Xiradorn » 22/10/2015, 17:54

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
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 118 ospiti