Visualizzazione risultati 1 fino 7 di 7

Discussione: problema script gestione utenti [era: Probabile bug Mysql o php]

  1. #1
    Guest

    Exclamation problema script gestione utenti [era: Probabile bug Mysql o php]

    In pratica ho fatto una script che serve per la gestione degli utenti del mio sito, in locale tutto ok, quando lo carico succede che quando faccio il submit del form per cambiare i dati nel db mi cambia anche il contenuto di
    $_SESSION['grado']
    in pratica mi butta fuori dalla mia pagina xkè non mi riconosce più come admin ma come moderatore se volete il codice devo occultare delle parti per motivi di sicurezza, confido in una risposta o quanto meno se non è spiegato bene chiedete che vi spiego meglio
    Ultima modifica di toolpirateswar : 08-12-2007 alle ore 23.16.05

  2. #2
    L'avatar di SolitaryExplorer
    SolitaryExplorer non è connesso Utente storico
    Data registrazione
    10-08-2005
    Residenza
    Veneto
    Messaggi
    1,949

    Predefinito

    Giustamente senza codice alla mano, come facciamo a sapere se la colpa è del tuo script o della configurazione di AV?

    P.S. Il tuo sito è irregolare.
    Non offro assistenza privata. / Se vuoi anche tu una userbar come queste, basta chiedere.


  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da SolitaryExplorer Visualizza messaggio
    Giustamente senza codice alla mano, come facciamo a sapere se la colpa è del tuo script o della configurazione di AV?

    P.S. Il tuo sito è irregolare.
    be, ti fidi di me :D

    Pagina di login
    Codice PHP:
    <?
    $nome
    =$_POST['nome'];
    $pw=$_POST['pw'];
    $mex="-";

    include(
    "xxx");
    $db = mysql_connect(xxx,xxx,xxx);

    if(isset(
    $_POST['login'])){
    if(
    $nome!=null && $pw!=null){

    $domanda=mysql_db_query($db_name,"select* from utenti where nome='".$nome."' and pw=md5('". $pw."') and attivazione=1 ", $db);

    $attivazione = mysql_result($domanda,0,"attivazione");
    $grado = mysql_result($domanda,0,"grado");

    if(
    $attivazione==1){
    session_start();
    session_register('log');
    $_SESSION["nome"] = $nome;
    $_SESSION["log"] = 1;
    $_SESSION["grado"] = $grado;

    echo
    "<script language=\"JavaScript\">
    <!--
    document.location.href = \"cd/ricerca.php\"
    //-->
    </script>"
    ;

    }else{
    $mex="l'accaunt non è ancora attivo, controlla nella posta elettronica";
    }
    }
    else{
    $mex="Nome e/o password sbagliati";
    }
    }


    mysql_close($db);

    ?>
    Pagina admin

    Codice PHP:

    <?

    session_start
    ();
    $grado=$_SESSION["grado"];
    if(
    $grado!="admin"){
    echo
    "<script language=\"JavaScript\">
    <!--
    document.location.href = \"cd/ricerca.php\"
    //--></script>"
    ;
    }

    include(
    "xxx");
    $db = mysql_connect(xxx, xxx, xxx);

    if(isset(
    $_POST['elimina'])){
    $nome=$_POST['nome'];
    mysql_db_query($db_name,"delete from utenti where nome='".$nome."' ",$db);
    }



    if(isset(
    $_POST['cambia'])){
    $nome=$_POST['nome'];
    $grado=$_POST['grado'];
    $attivazione=$_POST['attivazione'];
    mysql_db_query($db_name,"update utenti set grado='".$grado."', attivazione='".$attivazione."' where nome='".$nome."' ",$db);
    }

    $num0=$_POST['num0'];
    $num1=$_POST['num1'];

    if(
    $num0==null){
    $num0=0;
    $num1=20;
    }

    if(
    $num0>=20 && isset($_POST['indietro'])){
    $num0-=20;
    $num1-=20;
    }

    if(isset(
    $_POST['avanti'])){
    $num0+=20;
    $num1+=20;
    }

    $domanda=mysql_db_query($db_name,"select* from utenti where nome!='' limit ".$num0.",".$num1." ", $db);

    $num = mysql_num_rows($domanda);

    for (
    $i=0; $i<$num; $i++){

    $admin="";
    $moderatore="";
    $utente="";
    $attivo="";
    $nonattivo="";

    $nome = mysql_result($domanda,$i,"nome");

    $email = mysql_result($domanda,$i,"email");

    $attivazione = mysql_result($domanda,$i,"attivazione");

    $grado = mysql_result($domanda,$i,"grado");

    if(
    $attivazione==1)
    $attivo="selected";
    else
    $nonattivo="selected";


    if(
    $grado=='admin')
    $admin="selected";
    elseif(
    $grado=='moderatore')
    $moderatore1="selected";
    elseif(
    $grado=='utente')
    $utente="selected";


    $ris="<form method=\"post\" name=\"sub".$i."\"><tr><td align=\"center\" width=\"150\">".$nome."</td><td align=\"center\" width=\"150\">".$email."</td>
    <td align=\"center\" width=\"150\">
    <select name=\"attivazione\">
    <option value=\"1\" "
    .$attivo.">attivo</option>
    <option value=\"0\" "
    .$nonattivo.">non attivo</option>
    </select>
    </td>
    <td align=\"center\" width=\"150\">
    <select name=\"grado\">
    <option value=\"admin\" "
    .$admin.">Admin</option>
    <option value=\"moderatore\" "
    .$moderatore1.">Moderatore</option>
    <option value=\"utente\" "
    .$utente.">Utente</option>
    </select>
    <td><input type=\"submit\" src=\"edit.png\" name=\"cambia\" value=\"cambia\"></td>
    <td><input type=\"submit\" src=\"del.png\" name=\"elimina\" value=\"Elimina\"></td>

    <input type=\"hidden\" name=\"nome\" value=\""
    .$nome."\"></tr></form>";

    if(
    $i==0){
    $ris1=$ris;
    $ris=$ris;
    }else{
    $ris=$ris1."\r\n".$ris;
    $ris1=$ris;
    }

    }



    mysql_close($db);

    ?>
    il fatto è che in locale va tutto bene, se lo carico mi butta fuori e mi da moderatore come grado
    se avete dei dubbi ditemelo
    Ultima modifica di toolpirateswar : 09-12-2007 alle ore 01.15.46

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    pochi pochi controlli di errore in quel codice. Metti l'immancabile error_reporting(E_ALL); in cima, e struttura meglio il codice in modo che se qualche funzione fallisce, il programma se ne accorga. Ad esempio:
    - male
    Codice PHP:
    $db = mysql_connect(xxx,xxx,xxx);
    - bene
    Codice PHP:
    if ( $db = mysql_connect(xxx,xxx,xxx) ) {
    // connessione ok
    } else {
    echo
    "Impossibile connettersi al db";
    }
    comunque il problema mi sembra l'uso che fai di session_register() e $_SESSION al tempo stesso. Leggiti la guida della funzione e vedrai tutte le cose che è sconsigliato fare. Se puoi, usare soltando $_SESSION ti garantisce una maggiore compatibilità.

    p.s. che sia un bug del php o di mysql, ne dubito assai

  5. #5
    Guest

    Predefinito

    Allora ho tolto il session_register() che alla fine era una errore mio dovuto al fatto che ho copiato il codice da un vecchio codice, per quanto riguarda gli errori li trovo in locale, per gli errori di connessione non ne ho bisogno poiche se non si connette lo vedo e comunque mi da errore php quindi e solo codice inutile a mio avviso dato che sul server metto già i codici funzionanti in locale, comunque il problema persiste, e non ho idea di come risolverlo

    p.s. lo so che mettere i messaggi d'errore serve, ma non in questo caso visto che in locale mi dice tutti gli errori in automatico
    il fatto è che in locale funziona tutto, ma se lo metto in rete mi da il problema, quindi o è un errore di configurazione oppure è un bug della versione di php o mysql usata da altervista
    Ultima modifica di toolpirateswar : 09-12-2007 alle ore 20.50.31

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    no, spiacente, è al 99,99% un errore nel tuo codice, che essendo scritto "a risparmio" non è in grado di adattarsi ad un ambiente configurato diversamente. Mi spiace che il tuo avviso sia questo, forse un giorno avrai sufficiente esperienza da capire perché certo codice è necessario.

    Comunque, adesso che ho riletto il codice con più calma, ed indentandolo per capirci qualcosa, direi che il problema è che nella seconda pagina riutilizzi più volte la variabile $grado, quando fai le query da database, e siccome register_globals è settata diversamente a casa tua e qua, finisce per sovrascrivere $_SESSION['grado']. Cambia il nome della variabile e dovrebbe essere a posto.

    scovi bug nel php... ma lol

    edit: ho dato una ripulita al primo file, per darti un'idea. Soprattutto, devi aggiungere dei controlli sui dati in input, altrimenti non ci vuole molto a far danni al db...
    Codice PHP:
    <?php

    function paramPost($nome) {
    return isset(
    $_POST[$nome]) ? mysql_escape_string($_POST[$nome]) : false;
    }

    $pNome = paramPost('nome');
    $pPw = paramPost('pw');
    $pLogin = paramPost('login');

    $mex = '';

    include(
    "xxx");
    if (
    $db = mysql_connect(xxx,xxx,xxx) )
    {
    if (
    $pLogin)
    {
    if (
    $pNome && $pPw)
    {
    $query = "select * from utenti where nome = '{$pNome}' and pw = md5('{$pPw}') and attivazione = 1";
    if (
    $domanda = mysql_db_query($db_name, $query, $db) )
    {
    $attivazione = mysql_result($domanda, 0, 'attivazione');
    $rGrado = mysql_result($domanda, 0, 'grado');
    } else {
    // query fallita
    }

    if (
    $attivazione)
    {
    session_start();
    $_SESSION['log'] = 1;
    $_SESSION['nome'] = $pNome;
    $_SESSION['grado'] = $rGrado;

    header('Location: cd/ricerca.php');
    die();
    } else {
    $mex = "l'account non è ancora attivo, controlla nella posta elettronica";
    }
    } else {
    $mex = "Nome e/o password sbagliati";
    }
    } else {
    // non è un tentativo di login ?
    }

    mysql_close($db);
    } else {
    // connessione al database fallita
    }

    ?>
    ci tengo ancora farti notare come si può fare il redirect con header() e senza javascript, e come già detto sopra, il tuo sito è al momento irregolare
    3.5 Non e' consentito abusare del servizio di restrizione aree tramite password creando archivi, databases, o siti il cui contenuto non sia, per almeno il 70%, liberamente accessibile al pubblico.
    Ultima modifica di dreadnaut : 10-12-2007 alle ore 01.47.59

  7. #7
    Guest

    Predefinito

    Alla fine il sito non è ristretto, se ti registri puoi usarlo tranquillamente, il fatto e che senza registrazione come faccio a sapere chi ha fatto qualcosa, in pratica mi serve per sapere se qualcuno ha fatto dei casini, e se succede più di una volta bannarlo o prendere provvedimenti. comunque sto facendo un altro sito sopra quello per far si che quello sia il 30%, alrto non posso fare

    per quanto riguarda il mio metodo di programmare be, probabilmente èsbagliato, ma ho imparato da solo usando guide online e quindi se vedo che una cosa funzione la lascio così com'è, poi a volte nei miei codici ci sono cose fantaziose del genere

    Codice PHP:
    if($i<1){
    $risposta1=$risposta;
    $risposta= $risposta;
    }else{
    $risposta=$risposta1."\r\n".$risposta;
    $risposta1=$risposta;
    }
    che mi serve per scrivere una tabella con tutti i valori presi da un db e scanfditi da un for, probabilmente c'è un metodo più furbo, ma non lo conosco e mi aggiusto come posso
    Ultima modifica di toolpirateswar : 10-12-2007 alle ore 19.46.27

Regole di scrittura

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