consiglio sicurezza per soluzione problema apici

  • Creatore Discussione Creatore Discussione Akuma
  • Data di inizio Data di inizio

Akuma

Nuovo Utente
17 Mag 2014
28
0
1
34
Peschiera del Garda (VR)
Salve, come da titolo ho un problema con gli apici a cui ho trovato una soluzione ma volevo comunque sapere se è una soluzione "genuina" oppure al "limite della funzionalità" partirò dando subito qualche info in più per avere un quadro generale più completo.

Allora utilizzo come charset l' utf-8 sia nel browser, sia nella connessione con il database che nel database e le sue tabelle infatti i dati mi vengono salvati così come vengono visti ad esempio gli accenti àèéìòù salvati nel db rimangono tali e quali, idem per i simboli.

Gli input sono filtrati nel seguente modo:

PHP:
$username= trim($_POST['username']);
$username_safe = $mysqli->real_escape_string($username);

quindi toglie gli spazi ad inizio e fine stringa ed agli apici antepone un bello \, quindi se inserisco Isa'ia nell' input ed invio viene filtrata come Isa\'ia, però viene comunque salvata nel database (come è giusto che sia) in questo modo Isa'ia senza nessun \ davanti agli apici.

Fin qui tutto bene perchè i dati vengono salvati belli limpidi limpidi nel database, il problema arriva però quando devo utilizzare un dato all' interno di una query, cerco di spiegarmi meglio postando la query:

PHP:
$allevamento = $_GET['id_allevamento'];
$id_allevamento = "id_allevamento LIKE '$allevamento%'";

$query = $mysqli->query("SELECT * FROM allevamenti AS a LEFT JOIN utenti AS u ON a.id_proprietario = u.id_utente WHERE ".$id_allevamento."");

$row = $query->fetch_assoc();

questa qui mi carica i dati degli allevamenti richiesti tramite GET e con la LEFT carico i dati del proprietario (questa l'ho inserita per chiarezza, ma il problema avviene alla prossima):

PHP:
$query2 = $mysqli->query("SELECT nome_cane FROM schede_cani WHERE nome_proprietario = '$row[nome_utente]' ORDER BY nome_cane ASC");

while($row2 = $query2->fetch_assoc()){

ecco qui, ora facciamo finta che il nome_proprietario sia Isa'ia, ora questo apice mi blocca giustamente la query, perchè come dicevo prima sul database il nome è salvato limpido limpido con il suo apice.

Ho provato questa soluzione che funziona bene, ma volevo sapere se è comunque corretta:

PHP:
$nome = $row['nome_utente'];
$nomino = $mysqli->real_escape_string($nome);

$query2 = $mysqli->query("SELECT nome_cane FROM schede_cani WHERE nome_proprietario = '$nomino' ORDER BY nome_cane ASC");

while($row2 = $query2->fetch_assoc()){

ora filtrando il dato prelevato dal database che sarebbe Isa'ia con il real_escape_string torna ad essere Isa\'ia e la query funziona benissimo!

Però il dubbio mi è sorto facendo questa prova:

PHP:
if($nome == $nomino){
echo "Sono Uguali"; 
} else {
echo "Sono diversi";
}

come risultato mi esce che sono diversi, ma allora come fa la query a funzionare bene? Perchè questa parte della query
PHP:
WHERE nome_proprietario = '$nomino'
trova la corrispondenza corretta? Alla fine confronta nome nel database salvato come Isa'ia e quello nella variabile $nomino che è Isa\'ia :cool:

Qualcuno sa spiegarmi come è possibile e se questa soluzione che utilizzo sia corretta o meno? (funzionare funziona) :love:

Grazie a tutti e spero di essermi spiegato bene :p
 

Discussioni simili