Visualizzazione risultati 1 fino 12 di 12

Discussione: Problema con uno script di registrazione

  1. #1
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito Problema con uno script di registrazione

    Cosa c'è di sbagliato?

    Codice PHP:
    <?php
    require_once("db.php");

    $password1 = rand(1234, 9867);
    $password2 = rand(1313, 8310);
    $password3 = $password1.$password2;
    $password4 = $password3+$password1;
    $password = $password4;

    $nome = $_POST["nome"];
    str_replace(" ", "_", $nome);
    str_replace("<","","$nome");
    str_replace("<","","$nome");

    $username = $_POST["username"];
    str_replace(" ", "_", $username);
    str_replace("<","","$username");
    str_replace("<","","$username");

    $mail = $_POST["mail"];
    str_replace(" ", "_", $mail);
    str_replace("<","","$mail");
    str_replace("<","","$mail");
    $mail2 = $_POST["mail2"];
    str_replace(" ", "_", $mail2);
    str_replace("<","","$mail2");
    str_replace("<","","$mail2");

    $ip = $_SERVER['HTTP_PC_REMOTE_ADDR'];

    if(isset(
    $nome) && isset($username) && isset($mail) && $mail == $mail2) {

    $err_database="Errore di accesso al database. Riprovare più tardi, nel caso di errore prolungato, contattare il web master";

    $db = mysql_connect($db_host, $db_username, $db_password);
    mysql_select_db($db_name, $tbl_name)
    or die (
    $err_database);

    $nick = stripslashes(strip_tags($username));

    $read="SELECT Count( * ) AS Conta FROM registrazione WHERE username = '$username'";
    $raw=mysql_query($read);
    $row= mysql_fetch_array($raw);
    $raw.close;

    if (
    $row[Conta]>0 ){
    print (
    'Username già esistente.&nbsp;<a href="#" onClick="javascript:history.back;">Torna indietro</a>.');
    }

    else{

    $mysql_query = "INSERT INTO `registrazione`";
    $mysql_query .= "( `username`, `password`, `nome`, `mail`, `ip`)";
    $mysql_query .= "VALUES ($username, $password, $nome, $mail, $ip);";
    mysql_query($mysql_query);

    }

    mysql_close($db);

    } else {
    echo
    "attenzione: tutti i campi sono obbligatori";
    }
    ?>
    La struttura del Database è questa:

    Codice:
      `id` int(4) NOT NULL auto_increment,
      `username` varchar(65) NOT NULL default '',
      `password` varchar(65) NOT NULL default '',
      `nome` varchar(20) NOT NULL default '',
      `mail` varchar(40) NOT NULL default '',
      `ip` varchar(16) NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    si ci registra dalla pagina http://rikkardo.altervista.org/login...registrati.htm
    provate a registrarvi
    Ultima modifica di rikkardo : 17-12-2008 alle ore 16.32.19 Motivo: Errore grammaticale

  2. #2
    Guest

    Predefinito

    Il link non funziona (pagina non esiste). Perché non descrivi ciò che succede?

  3. #3
    Guest

    Predefinito

    una descrizione del problema sarebbe gradita...
    in ogni caso solo guardando in velocità ho notato che str_replace non è usato correttamente e la query "INSERT" non ha senso (vorresti mettere sempre gli stessi dati nel database?)

  4. #4
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito

    no, la mia intenzione era di sovrascrivere tutti gli spazi " " con l'underground "_"
    e di eliminare gli eventuali tag html
    il link corrette è QUESTO, grazie per le future risposte

  5. #5
    Guest

    Predefinito

    Procediamo con ordine...
    "no" cosa? l'uso di str_replace come l'hai utilizzato tu è sbagliato. punto.
    La sintassi corretta è:
    Codice PHP:
    $nome = $_POST["nome"];
    $nome = str_replace(" ", "_", $nome);
    $nome = str_replace("<","",$nome);
    $nome = str_replace("<","",$nome);
    e così via per tutti gli altri...
    Tra l'altro un bel "escape_string" su tutti i campi provenienti dal form eviterebbe anche eventuali injection (non ti vuoi trovare il database svuotato, vero?)

    In secondo luogo è scorretto usare isset() per controllare se i campi sono stati compilati, dovresti controllare o la lunghezza della stringa inserita o se è diversa da null

    Altro errore, la connessione al db:
    Codice PHP:
    $db = mysql_connect($db_host, $db_username, $db_password) or die ('connessione al server MySQL fallita');
    mysql_select_db($db, $db_name) or die ('db non trovato');
    Prima di procedere, per favore mi spieghi esattamente che problema ha lo script?
    ok, non funziona, ma perchè? ti da errore?

  6. #6
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da Inverno Visualizza messaggio
    "no" cosa? l'uso di str_replace come l'hai utilizzato tu è sbagliato. punto.
    La sintassi corretta è:
    Codice PHP:
    $nome = $_POST["nome"];
    $nome = str_replace(" ", "_", $nome);
    $nome = str_replace("<","",$nome);
    $nome = str_replace("<","",$nome);
    1) Calmati! Non tutti sono dei geni come te!
    2) Ok, sarò stupido io! Perchè è da tempo che uso quella sintassi str_replace, ed è sempre funzionata perchè sostituisce direttamente il contenuto della variablile, almeno a me così lo hanno spiegato, e su altri server è sempre andato, e neanche qui su AV non provoca errori.
    3) Se ti importa davvero, l'errore è questo:
    Mi mostra perennemente che non riesce a connettersi al database (Errore di accesso al database. Riprovare più tardi, nel caso di errore prolungato, contattare il webmaster). Comunque non per dire... Ma bastava provarlo, visto che sei esperto almeno potevi capire fino in fondo la causa..
    4) Cos'è esattamente una escape_string??
    Ultima modifica di rikkardo : 16-12-2008 alle ore 22.22.27

  7. #7
    Guest

    Predefinito

    rispondo per punti:

    1) certo, mi sono autoproclamato genio a 6 anni ... ;)
    2) e l'hai usata sbagliata, da documentazione PHP:
    This function returns a string or an array...
    prova:
    Codice PHP:
    <?php
    $string
    = 'abc abc abc';
    str_replace( 'b', '_', $string );
    echo
    '<br> come usa str_replace Rikkardo: ' . $string;
    $string = str_replace( 'b', '_', $string );
    echo
    '<br> come usa str_replace Inverno: ' . $string;
    ?>
    3) hai fatto le modifiche al codice di connessione al db che ho postato prima?
    4) mysql_escape_string()
    il tuo script ha gravi problemi di sicurezza


    nota: se hai problemi con il mio modo "rude" di intervenire, contattami con tramite mp e risolviamo, inutile generare flame
    Ultima modifica di Inverno : 17-12-2008 alle ore 10.47.22 Motivo: aggiunta nota ^^

  8. #8
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da Inverno Visualizza messaggio
    il tuo script ha gravi problemi di sicurezza
    se mi stai dando dell'asino ti sbagli, perchè non sono così stupido da usare lo script così, avrei fixato tutte i possibili "pericoli" ma visto che come quasi tutti avranno notato, questo è uno script in costruzione, questa la potevi anche evitare.
    comunque grazie delle tue altre risposte che mi hanno aiutato con il db.

  9. #9
    Guest

    Predefinito

    Permalosetto eh.
    Guarda che qui nessuno ti sta dando dell'asino, nè amenità varie; con quella frase inverno voleva solo avvertirti delle vulnerabilità che correva uno script così scritto.
    Visto che la maggior parte degli utenti qui non è molto esperta, sempre meglio precisare queste cose, non credi?


    Ciao!

  10. #10
    Guest

    Predefinito

    mai detto questo, volevo evitarti grossi problemi futuri.
    Capisco bene che lo script sia in sviluppo, ma meglio mettere le mani avanti.

  11. #11
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Permalosetto eh.
    Guarda che qui nessuno ti sta dando dell'asino, nè amenità varie; con quella frase inverno voleva solo avvertirti delle vulnerabilità che correva uno script così scritto.
    Visto che la maggior parte degli utenti qui non è molto esperta, sempre meglio precisare queste cose, non credi?


    Ciao!
    Citazione Originalmente inviato da Inverno Visualizza messaggio
    mai detto questo, volevo evitarti grossi problemi futuri.
    Capisco bene che lo script sia in sviluppo, ma meglio mettere le mani avanti.
    Lo so benissimo! E mi scuso, ma quando la genza mi fa ***, io divento così!
    E comunque per Inverno: Bravo, mettimi pure nella tua ignore list, sai quanto mi interessa! Anzi, mi vien da pensare che non sai più cosa rispondermi. Comunque Bye e ignorami pure

  12. #12
    Guest

    Predefinito

    Cioè, prima ti scusi, e poi ci rifai?

    Vabè va, meglio chiudere.


    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •