• ModSenior

    Il discorso della tabella per me è comunque sbagliato, creare una tabella per utente significa che se hai 10000 utenti registrati hai 10000 tabelle, sarebbe più corretto mettere un campo che indichi l'id dell'utente.

    Lasciando perdere questo discorso, nel file include("config.ini.php"); hai messo il session_start(); come ti avevo precedentemente detto?


  • User Attivo

    bhe sul fatto belle tabelle sarebbe un po difficile come dici tu...perchè poi se io ho questa tabella
    [PHP]
    id_utente,id_amico, tipo_richiesta, data_amicizia
    [/PHP]

    e se un utente ha più di una richiesta io come faccio a mettere tutti gli id degli amici nello stesso campo?

    coqmuneu certo che ho lasciato il session star!


  • ModSenior

    Nello stesso campo? Solitamente si inserisce un record per ogni amico.
    A me sembra deve funzionare se hai messo il session_start e sei loggato la variabile $_SESSION['id'] deve per forza avere valore.
    Ma il problema che era identico nel file dell'area privata che ti faceva il redirect come lo hai risolto?

    Metti la pagina cosi e dimmi che echo fa.
    [php]
    <?php
    error_reporting(E_ALL);
    //connesione al database
    include("config.ini.php");
    /*recupero le variabili inviate tramite get e definisce la data corrente */
    $nome=$_GET['nome'];
    $data=date("d/m/Y");
    $tipo="amicizia";

    //query
    $id = mysql_query("SELECT id FROM utenti WHERE nome = '".$nome."'")or die("<h1>".mysql_error()."</h1>");
    $array = mysql_fetch_array($id);

    mysql_query("INSERT INTO richieste".$array['id']." (id_amico, tipo_richiesta, data_amicizia) VALUES ('".$_SESSION['id']."', '".$tipo."', '".$data."')")or die("<h1>".mysql_error()."</h1>");
    die("INSERT INTO richieste".$array['id']." (id_amico, tipo_richiesta, data_amicizia) VALUES ('".$_SESSION['id']."', '".$tipo."', '".$data."')");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta content="text/html; charset=ISO-8859-1"
    http-equiv="content-type">
    <title>Richiesta effetuata con sucesso</title>
    </head>
    <body>
    <img alt="logo" src="loghi/logo.png"><br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <div style="text-align: center;">Richiesta inviata con
    sucesso <a href="home.php">torna alla home</a></div>
    </body>
    </html>
    [/php]


  • User Attivo

    Sucsa se ci ho messo tempo ma stavo modificando il sistema di gestione blog utenti comuque mi restituisce questo

    Notice: Undefined index: id in /membri/zomer/richiesta_amicizia.php on line 14

    Notice: Undefined index: id in /membri/zomer/richiesta_amicizia.php on line 15
    INSERT INTO richieste8 (id_amico, tipo_richiesta, data_amicizia) VALUES ('', 'amicizia', '10/09/2009')

    mmm...vedi vuoto! un secondo me è un false!


  • ModSenior

    I motivi possono essere solo 2:

    • Manca session_start o è ripetuto.
    • Non sei loggato.

  • User Attivo

    Senti allora prova te! se non mi credi questo è il link h**p://zomer.altervista.org/

    Clicca su accedi

    nick zomer
    pass tgbyhn

    Poi clicca su cerca amici in alto a destra poi inserisci il nome claudio e clicca sul link aggiungi questa persona come amico...


  • ModSenior

    Il problema non è quello di crederti o meno, è che i motivi possono essere solo quei 2.

    Sicuro che che hai messo l'id in $_SESSION['id'] perchè in un altro file utilizzavi $_SESSION['login'].


  • User Attivo

    Sicuro che che hai messo l'id in $_SESSION['id'] perchè in un altro file utilizzavi $_SESSION['login']. E io che ne so...lo script è il tuo!!! Comunque le pagine stano sopra...comunque cose il session login mai sentito parlare...


  • ModSenior

    Io nel tutorial ho usato $_SESSION['login'], però non lo sò se in login lo hai cambiato o no.
    [php]
    <?php
    error_reporting(E_ALL);
    //connesione al database
    include("config.ini.php");
    /*recupero le variabili inviate tramite get e definisce la data corrente */
    $nome=$_GET['nome'];
    $data=date("d/m/Y");
    $tipo="amicizia";

    //query
    $id = mysql_query("SELECT id FROM utenti WHERE nome = '".$nome."'")or die("<h1>".mysql_error()."</h1>");
    $array = mysql_fetch_array($id);

    mysql_query("INSERT INTO richieste".$array['id']." (id_amico, tipo_richiesta, data_amicizia) VALUES ('".$_SESSION['login']."', '".$tipo."', '".$data."')")or die("<h1>".mysql_error()."</h1>");
    die("INSERT INTO richieste".$array['id']." (id_amico, tipo_richiesta, data_amicizia) VALUES ('".$_SESSION['login']."', '".$tipo."', '".$data."')");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta content="text/html; charset=ISO-8859-1"
    http-equiv="content-type">
    <title>Richiesta effetuata con sucesso</title>
    </head>
    <body>
    <img alt="logo" src="loghi/logo.png"><br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <div style="text-align: center;">Richiesta inviata con
    sucesso <a href="home.php">torna alla home</a></div>
    </body>
    </html>
    [/php]


  • User Attivo

    FUNZIONA!!!!!! SENTI TI POSSO CHIEDERE ALTRE PERO' NON RIGUARDANO LO SCRIPT DI LOGIN!!!!!

    :yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi::yuppi:


  • ModSenior

    Usavi la variabile sbagliata, io avevo dato per scontato fosse giusta invece non lo era.

    Per altro puoi aprire un thread in php-mysql e ti rispondo la.


  • User

    Ragazzi il mio editor php mi segna in rosso la variabile $user e $pass come se non le riconoscesse. Se a quelle variabili sostituisco direttamente le credenziali di un account funziona, quindi dubito sia il resto a non andare.Ho provato anche a eseguirlo con le variabili contenute dal doppio apice ' "$user" ' in quel caso mi riconosce la variabile ma comunque non permette l'accesso. Dove vado a sbattere? Grazie

    [php] // Controllo l'utente esiste
    $query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");

    // Se ha trovato un record
    if(mysql_num_rows($query) == 1) [/php]


  • ModSenior

    Che le segni in rosso mi sembra normale.


  • User

    Eh ma è come se poi non me le riconoscesse come variabili,p erchè se io li dentro sostituisco direttamente i valori di un record esegue l'accesso perfettamente, mentre se lascio le variabili è come se non facesse il check delle password inserite con il database.

    Dove è il problema allora?


  • ModSenior

    Dovresti postare il codice di tutta la pagina, altrimenti oltre dirti di fare un echo nella query, è impossibile aiutarti.


  • User

    [php]<?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['username'])) ? trim($_POST['username']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
    $user = addslashes($user);
    $pass = addslashes($pass);
    }

    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);

    // Controllo l'utente esiste
    $query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");

    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
    // prelevo l'id dal database
    $login = mysql_fetch_array($query);

    // Creo una variabile di sessione
    $_SESSION['login'] = $login['idusers'];

    // reindirizzo l'utente
    header('Location: privata.php');
    exit;
    }
    // se non esiste da l'errore
    else
    die('Nome Utente o Password errati');[/php]


  • ModSenior

    Fai un echo cosi:
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['username'])) ? trim($_POST['username']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
    $user = addslashes($user);
    $pass = addslashes($pass);
    }

    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);

    // Controllo l'utente esiste
    $query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");
    echo "SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1";

    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
    // prelevo l'id dal database
    $login = mysql_fetch_array($query);

    // Creo una variabile di sessione
    $_SESSION['login'] = $login['idusers'];

    // reindirizzo l'utente
    header('Location: privata.php');
    exit;
    }
    // se non esiste da l'errore
    else
    die('Nome Utente o Password errati');
    [/php]
    Così da controllare che i dati dal modulo arrivino correttamente.


  • User

    Ciao TheDarkita, oggi visto che ho un po di tempo voglio riproporti il problema che ti stavo parlando alla pagina 25 di questo tutorial che riguarda il check box: ecco il codice dove [php]$accept = addslashes($accept);[/php] è lo script dove dobrebbe spuntare l'utente al momento della registrazione, ma come ti stavo accennando anche senza spuntare la check box l'utente riesce a registrarsi cosa che non va bene (e nel Db risulta "no" visto che ho messo una query "yes" "no"):

    [php]<?php
    session_start();
    // Includo la connessione al database
    require('config.php');
    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    

    $accept = (isset($_POST['accept'])) ? trim($_POST['accept']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    

    $accept = addslashes($accept);
    }

    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga; caratteri minimi 4 / massimi 12! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('ATTENZIONE: Email non valida, si prega ripettere la procedura di registrazione! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente! Si prega ritornare indietro cliccando la freccia sul Vostro browser'); 
    // Registrazione dell'utente nel database
    else
    {
    
        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
    
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,accept)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$accept')";
        mysql_query($strSQL) OR die("Errore 003. <br>
    

    Possibile cause: <br>

    • non ha spuntato la casella per l'informativa. <br>

    • non ha inserito i suoi dati correttamente.<br>

    • errore del sistema.<br>
      Si prega tornare indietro e riprovare a registrarsi o<br>
      contattare l'amministratore.<br>
      Failure because: ".mysql_error());

      // Reindirizzo l'utente ad una pagina di conferma della registrazione
      header('Location: registrato.php');
      exit;
      

      }
      }
      ?>[/php]

    Questa è la parte tra i tag Body:
    [html]<form action="" method="post">
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <span class="Stile14">Accetto l' <a href="/informativa.php">informativa</a></span>
    <input name="accept" type="checkbox" id="accept" checked="checked" value="1" />
    <br />
    <input name="registra" type="submit" value="Registrati" />
    <input type="submit" name="reset" id="reset" value="Reset Campi" />
    <br />
    </form></center>
    <div align="center">[/html]

    Se non ricordo male nella pagina 26 di questo tutorial Zomer indicava di mettere questo codice nello script:
    [php]//Controllo che ha accettato la privacy
    if(!isset($_POST['checkbox']))
    die('Non hai spuntato la checbox');
    [/php]

    Ok adesso domanda di rito, se il codice è quello giusto dove dovrei inserirlo per esattezza nello script php?

    Nel caso non fosse giusto potresti ripropormi il codice.

    Grazie


  • ModSenior

    Cosi, dovrebbe andare:
    [php]
    <?php
    session_start();
    // Includo la connessione al database
    require('config.php');
    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    

    $accept = (isset($_POST['accept'])) ? trim($_POST['accept']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    

    $accept = addslashes($accept);
    }

    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga; caratteri minimi 4 / massimi 12! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('ATTENZIONE: Email non valida, si prega ripettere la procedura di registrazione! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile! Si prega ritornare indietro cliccando la freccia sul Vostro browser');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente! Si prega ritornare indietro cliccando la freccia sul Vostro browser'); 
    

    elseif($accept != 1)
    die('Devi accettare l'informativa');
    // Registrazione dell'utente nel database
    else
    {

        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,accept)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$accept')";
        mysql_query($strSQL) OR die("Errore 003. <br>
    

    Possibile cause: <br>

    • non ha spuntato la casella per l'informativa. <br>

    • non ha inserito i suoi dati correttamente.<br>

    • errore del sistema.<br>
      Si prega tornare indietro e riprovare a registrarsi o<br>
      contattare l'amministratore.<br>
      Failure because: ".mysql_error());

      // Reindirizzo l'utente ad una pagina di conferma della registrazione
      header('Location: registrato.php');
      exit;
      

      }
      }
      ?>
      [/php]


  • User

    Sei una belva TheDarkita. Non ho fatto in tempo a cliccare "aggiorna" sul mio pc che tu mi hai già dato la risposta. Ma che fai dormi anche con il pc. E pensare che mia moglie s' arrabbia di brutto 😮 se stò il tempo utile per vedere tutte le mie email ed i siti (ossia più di tre ore solo a casa e quando sono al lavoro non ne parliamo!) :bigsmile:.
    Comunque grazie sei sempre The best nel settore.
    Ah dimenticavo avrei bisogno di un moderatore. Se t'interessa
    fammi un fischio.
    Ciao e grazie ancora.