Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Hybrid View

  1. #1
    Il discorso è che quando "ti offri" di prestare aiuto ad una persona devi capire il concetto che tu stai a parlare con un ignorante o comuqnue uno che ne sappia molto meno di te.
    Non sono un programmatore ma solo uno smanettone che cerca di mantenere un piccolo blog cercando di risparmiare i soldi della manutenzione, prima era un sito in asp (classico) e risolvevo il tutto con un semplice replace, adesso ho convertito il tutto il linghaggio php che ho dovuto imparare di fretta usando un escape che purtroppo non funziona come dovrebbe.

    Per la query insert:
    codice:
    // variabili
    $titolo = $_POST['titolo'];
    $artista = $_POST['artista'];
    $link = $_POST['link'];
    
    //query
    $sqlquery = "INSERT into `$tabella` (`pos`,`data`,`settimane`,`posprec`,`stato`,`titolo`,`artista`,`link`) VALUES(".$pos.",'".$dataAtt."',0,0,'new','".$titolo."','".$artista."','".$link."')";
    Per la query di modifica:
    codice:
    //variabili
    $value = str_replace("'", "\'",$_POST['value']);
    $tipo = $_GET['tipo'];
    
    //query
    $sqlquery = "UPDATE `$tabella` SET `".$tipo."`= '".$value."' WHERE `id`= ".$id;
    optime, se ogni volta che dovessi essere educato e scambiare un saluto con una minaccia a quest'ora sarei un terrorista

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Quale api usi per connetterti a mysql? Cioè, nel tuo codice, quando ti connetti al database, usi "new PDO", "mysqli_connect / new mysqli" o "mysql_connect"? Quale delle tre?

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da DarioMarco Visualizza il messaggio
    Salve, ho un dato in una tabella mysql, con l'apice, quando vado ad aggiornarlo me lo aggiorna in questo modo:
    L'amour -> L'\amour
    se metto un replace di questo genere:

    $value = str_replace("'", "\'",$_POST['value']);

    mi restituisce un errore del tipo:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'amour Toujours ' WHERE `id`= 1695' at line 1

    come potrei risolvere?
    Grazie per qualsiasi forma d'aiuto
    Lascia com'è. Quando leggi il dato fai un stripslashes prima di stamparlo a video.
    L'errore viene dal fatto che quando fai l'insert inserisci il testo fra due apici. Se gli apici che sono nel testo non sono preceduti da \ è normale che ti dia un errore visto che il parser crede che la stringa finisce quando incontra l'apice.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Uso mysql_connect()

    Il problema non è tanto nell'inserire il titolo per poi leggerlo, fino a qui funziona tutto bene, ovvero nel campo del database il titolo è scritto in modo corretto, ma il problema sta nel fatto in cui vado a modificare la stringa già presente nel database con l'apice, che me la riporta in modo corretto, ma quando vado a fare la query di update, mi restituisce l'errore realtivo all'apice.

  5. #5
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Usa mysql_real_escape_string, http://php.net/manual/it/function.my...ape-string.php


    codice:
    $sqlquery = "UPDATE `$tabella` SET `".$tipo."`= '".mysql_real_escape_string($value)."' WHERE `id`= ".$id;
    Questo dovrebbe eliminare l'errore. La mia previsione è gli apici che salverai nel db saranno preceduti da un backslash prima. ("L'amore" => "L\'amore")
    Il problema che lo causa è probabilmente molto più a monte, difficile dirlo senza ulteriori informazioni. Se lo vuoi sistemare in quel punto puoi usare stripslashes in questo modo:
    codice:
    $sqlquery = "UPDATE `$tabella` SET `".$tipo."`= '".mysql_real_escape_string(stripslashes($value))."' WHERE `id`= ".$id;
    E' bene che tu sia informato che ciò che stai facendo è pericoloso: se altri utenti hanno accesso alle pagine dove stai facendo queste operazioni, possono modificare/leggere qualsiasi tabella, e, a seconda dei permessi, molto altro.

  6. #6
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Usa mysql_real_escape_string, http://php.net/manual/it/function.my...ape-string.php


    codice:
    $sqlquery = "UPDATE `$tabella` SET `".$tipo."`= '".mysql_real_escape_string($value)."' WHERE `id`= ".$id;
    Questo dovrebbe eliminare l'errore. La mia previsione è gli apici che salverai nel db saranno preceduti da un backslash prima. ("L'amore" => "L\'amore")
    Il problema che lo causa è probabilmente molto più a monte, difficile dirlo senza ulteriori informazioni. Se lo vuoi sistemare in quel punto puoi usare stripslashes in questo modo:
    codice:
    $sqlquery = "UPDATE `$tabella` SET `".$tipo."`= '".mysql_real_escape_string(stripslashes($value))."' WHERE `id`= ".$id;
    E' bene che tu sia informato che ciò che stai facendo è pericoloso: se altri utenti hanno accesso alle pagine dove stai facendo queste operazioni, possono modificare/leggere qualsiasi tabella, e, a seconda dei permessi, molto altro.
    Ciao Kurt.
    Grazie per l'aiuto, purtroppo il risultato che mi da dopo la modifica è il seguente:
    L\\'amour Toujours

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84
    Anche io devo utilizzare mysql_real_escape_string ma non so bene dove devo inserirlo, mi spiego:
    per aggiornare il database utilizzo un form html dove inizialmente ricavo il dato già inserito e permetto al cliente di modificare tale dato modificando il relativo campo del form, ad esempio questo sotto è uno dei campi (il campo "gruppo"):

    codice:
    <form name="form_modifica_dati" method="post" action="<?php echo '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"  
    style="width: 100%; 
    height: 20px;">
    
    
    <input type="submit" name="<?php echo'modifica_dati_102;?>" value="Salva" style="width: 77px"></form>

    Come dovrei implementare mysql_real_escape_string in un campo del genere?
    Ultima modifica di pollat; 19-10-2015 a 12:22

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Se $numeroscheda dovrebbe essere un intero puoi forzarlo ad essere un intero:
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda=".intval($numeroscheda) );
    Se è una stringa di caratteri, avvolgilo attorno a degli apici, e usa la funzione al suo interno:
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda='".mysql_real_escape_string($numeroscheda)."'");
    Se invece lo usi con
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda=".mysql_real_escape_string($numeroscheda));
    allora commetti un errore/crei una vulnerabilità nella tua applicazione.

    Nota che l'api mysql_* è stata deprecata e sarà eliminata a partire da php7. Non dovresti usarla. Il modo sicuro di passare i tuoi dati nella query è di non incorporarla nella query stessa, ma di passarli separatamente. Vedi http://php.net/manual/en/pdo.prepared-statements.php
    Ultima modifica di .Kurt; 19-10-2015 a 12:30

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Se $numeroscheda dovrebbe essere un intero puoi forzarlo ad essere un intero:
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda=".intval($numeroscheda) );
    Se è una stringa di caratteri, avvolgilo attorno a degli apici, e usa la funzione al suo interno:
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda='".mysql_real_escape_string($numeroscheda)."'");
    Se invece lo usi con
    codice:
    $result = mysql_query ( " SELECT * FROM tabellaschede WHERE idscheda=".mysql_real_escape_string($numeroscheda));
    allora commetti un errore/crei una vulnerabilità nella tua applicazione.

    Nota che l'api mysql_* è stata deprecata e sarà eliminata a partire da php7. Non dovresti usarla. Il modo sicuro di passare i tuoi dati nella query è di non incorporarla nella query stessa, ma di passarli separatamente. Vedi http://php.net/manual/en/pdo.prepared-statements.php

    No aspetta che forse non ho spigato bene, ciò che viene aggiornato non è "$numeroscheda" ma il nome del "gruppo" che uno inserisce all'interno del campo (value=...) prima di premere salva nel form.

    riposto il codice senza "$numeroscheda":
    codice:
    <form name="form_modifica_dati" method="post" action="<?php echo '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"  
    style="width: 100%; 
    height: 20px;">
    
    
    <input type="submit" name="<?php echo'modifica_dati_102;?>" value="Salva" style="width: 77px"></form>
    Ultima modifica di pollat; 19-10-2015 a 12:48

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Nota che l'api mysql_* è stata deprecata e sarà eliminata a partire da php7. Non dovresti usarla. Il modo sicuro di passare i tuoi dati nella query è di non incorporarla nella query stessa, ma di passarli separatamente. Vedi http://php.net/manual/en/pdo.prepared-statements.php
    .Kurt grazie dei suggerimenti ma vorrei sapere cosa implica continuare ad utilizzare l'api mysql_* e cosa intendi per passarla separatamente???

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 © 2026 vBulletin Solutions, Inc. All rights reserved.