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

    Problema assurdo con script PHP

    Ciao a tutti,

    ho un problema con uno script PHP che non fatico a definire assurdo. Allora, io ho un DB MySQL con una tabella dedicata alle news. Se io inserisco come titolo una parola con l'apostrofo questa non viene registrata nel DB.
    Questo è lo script:

    Codice PHP:
    <?php
    session_start
    ();
    require(
    "./../conf/dbconf.inc.php");
    dbConnect();
    $res mysql_query"SELECT utenti_accesso.id FROM utenti_accesso, log_accessi WHERE utenti_accesso.id = log_accessi.id_utenti_accesso AND log_accessi.session_id = '".session_id()."';" );
    if (
    mysql_num_rows($res) > 0) {
        
    $dateform explode'/'$_POST["data1"] );
        
    $datafin $dateform[2].'-'.$dateform[1].'-'.$dateform[0];
        
        
    mysql_query"INSERT INTO news ( titolo, testo, data1 ) VALUES ('".$_POST["titolo"]."', '".$_POST["testo"]."', '".$datafin."');" );
        
    header ("LOCATION: ./new_elenco.php");
    } else {
        
    header ("LOCATION: ./index.php");
    }
    dbClose();
    ?>
    e l'ho modificato in questa maniera:

    Codice PHP:
    <?php
    session_start
    ();
    require(
    "./../conf/dbconf.inc.php");
    dbConnect();
    $res mysql_query"SELECT utenti_accesso.id FROM utenti_accesso, log_accessi WHERE utenti_accesso.id = log_accessi.id_utenti_accesso AND log_accessi.session_id = '".session_id()."';" );
    if (
    mysql_num_rows($res) > 0) {
        
    $dateform explode'/'$_POST["data1"] );
        
    $datafin $dateform[2].'-'.$dateform[1].'-'.$dateform[0];
        
        
    mysql_query"INSERT INTO news ( titolo, testo, data1 ) VALUES ('[b]

    "
    .$_POST["titolo"]."</p>[/b]', '".$_POST["testo"]."', '".$datafin."');" );
        
    header ("LOCATION: ./new_elenco.php");
    } else {
        
    header ("LOCATION: ./index.php");
    }
    dbClose();
    ?>
    Lo script sul mio server web funziona egregiamente, mentre se provo a metterlo sul server remoto non va. Il problema è nel titolo e infatti ho inserito il tag HTML

    </p> per ottenere il paragrafo e quindi la punteggiatura corretta (come ho evidenziato nello script modificato). Da notare che se vado a fare l'inserimento manuale nel DB la visualizzazione è corretta, mentre se passo ad inserire tramite l'area riservata non c'è verso di inserire.
    Da cosa potrebbe dipendere questo problema?
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  2. #2
    Ti suggerisco di iniziare leggendo il manuale ufficiale:

    http://www.php.net/mysql_real_escape_string

    E, visto il tipo di errore, forse è il caso che leggi anche un tutorial sulle basi della programmazione PHP/MySQL:

    http://php.html.it/articoli/leggi/89...l-injection/4/

  3. #3
    forse ho risolto usando il comando PHP htmlentities
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  4. #4
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    meglio se usi mysql_real_escape_string

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  5. #5

  6. #6
    Ho risolto in questa maniera, meno elegante ma funzionante:

    Codice PHP:
    <?php
    session_start
    ();
    require(
    "./../conf/dbconf.inc.php");
    dbConnect();
    $res mysql_query"SELECT utenti_accesso.id FROM utenti_accesso, log_accessi WHERE utenti_accesso.id = log_accessi.id_utenti_accesso AND log_accessi.session_id = '".session_id()."';" );
    if (
    mysql_num_rows($res) > 0) {
        
    $dateform explode'/'$_POST["data1"] );
        
    $datafin $dateform[2].'-'.$dateform[1].'-'.$dateform[0];
        
    $titolo = ($_POST["titolo"]);
        
    //print ($titolo ."
    ");
        
    $titolo2 = stripcslashes(htmlentities("$titolo", ENT_QUOTES));
        //print (
    $titolo2 ."
    ");
        
        mysql_query( "
    INSERT INTO news titolotestodata1 VALUES ('".$titolo2."''".$_POST["testo"]."''".$datafin."');" );
        header ("
    LOCATION: ./new_elenco.php");
    } else {
        header ("
    LOCATION: ./index.php");
    }
    dbClose();
    ?>
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Fa vomitare, ma contento tu....

  8. #8
    ma perchè fa vomitare? In fondo lo script funziona e il risultato è giusto. Tu come lo ottimizzeresti?
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Neo996sps
    Tu come lo ottimizzeresti?
    Mi pare di averti postato un link

  10. #10
    ti conviene non usarlo per queste cose htmlentities(), basta anche un addslashes(), o un mysql_real_escape_string().

    Poi cmq non c'è bisogno di fare così

    Codice PHP:
        $titolo = ($_POST["titolo"]);
        
    $titolo2 stripcslashes(htmlentities("$titolo"ENT_QUOTES)); 
    Ma basta anche così


    Codice PHP:
        $titolo =mysql_real_escape_string($_POST["titolo"]); 

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.