php / sql - dubbi e domande varie...

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

Intanto, questa parte:
else {
$risultatoutente=mysql_query("SELECT ID FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);
$risultatoadmin=mysql_query("SELECT ADMIN FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);
if(mysql_num_rows($risultatoutente)==0) {
reindirizza("pagina=register&user=$User");
}
elseif(mysql_num_rows($risultatoadmin)==0) {
$_SESSION["utenteautorizzato"]=mysql_result($risultatoutente,0,0);
reindirizza("pagina=home&sezione=secondaria&messaggio=$User-LOGGED-IN");
}
else {
$_SESSION["adminautorizzato"]=mysql_result($risultatoadmin,0,0);
reindirizza("pagina=home&sezione=secondaria&messaggio=$User-ADMIN-LOGGED-IN");
}
la modificherei così:

Codice: Seleziona tutto

 else {
    $risultatoutente=mysql_query("SELECT * FROM users WHERE USER='$User' AND PASS='$Pass'", $connessione);
    if(mysql_num_rows($risultatoutente)==0) {
      reindirizza("pagina=register&user=$User");
    }
    else {
      $messaggio="$User-LOGGED-IN";
      $_SESSION["utenteautorizzato"]=mysql_result($risultatoutente,0,0);
      if(mysql_result($risultatoutente,0,3)) { // visto che si tratta di un'alternativa booleana, basta la verifica "se vero"
           $_SESSION["adminautorizzato"]=1;
           $messaggio="$User-ADMIN-LOGGED-IN";
      }
      reindirizza("pagina=home&sezione=secondaria&messaggio=$messaggio");
}
In questa riga:
if(in_array($pagina,$pagineutenti) && !isset($_SESSION["utenteautorizzato"]) || in_array($pagina,$pagineadmin) && !isset($_SESSION["adminautorizzato"]))
racchiuderei i due blocchi di condizioni in parentesi...

Codice: Seleziona tutto

if((in_array($pagina,$pagineutenti) && !isset($_SESSION["utenteautorizzato"])) || (in_array($pagina,$pagineadmin) && !isset($_SESSION["adminautorizzato"])))
Prova a fare queste modifiche e vedi come va.

Un consiglio: anche se è poco più di un palliativo, salva le password
su db in forma criptata (md5 per esempio).

Ciao,
nino

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

ciao Nino,
grazie dell'aiuto... adesso la situazione è leggermente migliorata, nel senso che riesco a visualizzare le pagine nel menu correttamente in base all'utente, solo che ho notato un nuovo problema che non capisco come mai si presenti...
sempre nella index ho questo codice che mi visualizza una sezione di login/logout dinamica:

Codice: Seleziona tutto

<?php if((!isset($_SESSION["utenteautorizzato"]) || !isset($_SESSION["adminautorizzato"]))) {
      echo '
    <div class="login">
      <form action="special/getdata.php?action=login" method="post">
        UserName: <input class="inputbox" name="user" type="text" /> 
        Password: <input class="inputbox" name="pass" type="password" /> 
        <input class="button" type="submit" value="login" />
        <a href="index.php?pagina=register&user='.$default.'"><input class="button" type="submit" value="register" /></a>';
      echo "\n";
      }
      elseif((isset($_SESSION["utenteautorizzato"]) || isset($_SESSION["adminautorizzato"]))) {
      echo '
    <div class="login">
      <form action="special/getdata.php?action=logout" method="post">
      <input class="button" type="submit" value="logout" />';
      }
    ?>
      </form>
il problema è che se un admin è loggato nel sito appare il bottone di logout correttamente, mentre se a loggarsi è un utente normale rimane il form di login... da precisare che tutto il resto funziona correttamente... sono sicuro che si tratti di una scemenza, ma non ho ancora l'occhio allenato con php e quindi faccio difficoltà a notarla...

inoltre mi aiuteresti a leggere questo codice che mi hai postato, non mi è molto chiaro:

Codice: Seleziona tutto

if(mysql_result($risultatoutente,0,3)) {
           $_SESSION["adminautorizzato"]=1;
riguardo alle password in md5 ho provato seguendo la tua guida e funzionano bene, adesso le sto usando in chiaro solo per avere un riscontro più immediato ;) ... (in ogni caso non sto scrivendo un sito per l'NSA, ne ho l'intenzione di mettermi a giocare con SSL ecc..) comunque se dovessi fare siti che andranno in produzione penso che mi dirigerò sicuramente verso md5 o sha1... anche se senza connessione protetta non è che serva poi a molto...

ancora grazie mille per il supporto (e grazie 1000**1000 per la pazienza ;) )
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

if((!isset($_SESSION["utenteautorizzato"]) || !isset($_SESSION["adminautorizzato"])))
Dovrebbe bastare...

Codice: Seleziona tutto

if(!isset($_SESSION["utenteautorizzato"]))
visto che lo stato di admin è aggiuntivo.
inoltre mi aiuteresti a leggere questo codice che mi hai postato, non mi è molto chiaro:

Codice: Seleziona tutto
if(mysql_result($risultatoutente,0,3)) {
$_SESSION["adminautorizzato"]=1;
Significa: se è vero (cioè non 0) il flag admin imposta a vero (1 o
qualsiasi valore che non sia 0) la variabile di sessione
.

Si, per quanto riguarda la password, sono d'accordo con te: senza
connessione cifrata è solo un palliativo. :)

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

ok, risolto anche questo... :D

mi stavo chiedendo, in php si possono esportare le variabili?? mi spiego meglio...
ho una pagina interna al sito in cui memorizzo delle variabili che mi servono durante l'uso e che importo in tutte le pagine visibili agli utenti, tra queste variabili c'è il nome del sito o l'indirizzo email del webmaster o altro... mi interesserebbe poter visualizzare il nome dell'utente attualmente loggato da qualche parte nella pagina, ma non so come fare ad esportare questa variabile dalla pagina di acquisizione dei dati alla pagina delle variabili...
In pratica vorrei ottenere una cosa simile a quella che si vede qui su slacky una volta loggati sulla destra di tutte le pagine...

dite che è possibile?? se si, come si può fare??

EDIT:
ho provato a printare $_SESSION["utenteautorizzato"] e ho notato che mi restituisce l'indice relativo a quell'utente nella tabella del db... se invece dell'indice metto il nome come variabile di sessione può crearmi problemi?? perchè se non ci sono problemi risolvo in questo modo (ammesso che non ci siano altri metodi migliori :D ...)

EDIT 2:
lo sto testando da un po e mi sembra stia funzionando bene... stiamo a vedere... :D
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

danix85 ha scritto:ok, risolto anche questo... :D

mi stavo chiedendo, in php si possono esportare le variabili?? mi spiego meglio...
ho una pagina interna al sito in cui memorizzo delle variabili che mi servono durante l'uso e che importo in tutte le pagine visibili agli utenti, tra queste variabili c'è il nome del sito o l'indirizzo email del webmaster o altro... mi interesserebbe poter visualizzare il nome dell'utente attualmente loggato da qualche parte nella pagina, ma non so come fare ad esportare questa variabile dalla pagina di acquisizione dei dati alla pagina delle variabili...
In pratica vorrei ottenere una cosa simile a quella che si vede qui su slacky una volta loggati sulla destra di tutte le pagine...

dite che è possibile?? se si, come si può fare??

EDIT:
ho provato a printare $_SESSION["utenteautorizzato"] e ho notato che mi restituisce l'indice relativo a quell'utente nella tabella del db... se invece dell'indice metto il nome come variabile di sessione può crearmi problemi?? perchè se non ci sono problemi risolvo in questo modo (ammesso che non ci siano altri metodi migliori f:D ...)
Ti sei fatto la domanda e ti sei dato la risposta! :D
Puoi registrare quante variabili di sessione vuoi con i dati che
preferisci.

Per quanto riguarda i dati costanti (tipo il nome del sito), ti
consiglio di definire, appunto, delle costanti in una pagina
da includere dove ti serve. Perché costanti e non variabili?
Perché semanticamente è opportuno in questi casi usare
delle costanti e, soprattutto, perché le costanti sono,
per loro natura, globali: il loro valore, cioè, sarà valido
in qualunque punto dello script, anche all'interno di classi,
funzioni, etc.

Ad esempio, scrivi un file con questo contenuto:

Codice: Seleziona tutto

<?php
define("COSTANTE_SITO","www.qualcosa.blabla");
define("COSTANTE_EMAIL","qualcuno@qualcosa.blabla");
?>
Poi la includi nelle pagine e saprai che in qualsiasi punto
tu richiamerai, ad esempio <?php echo COSTANTE_SITO ?>,
otterrai la visualizzazione dell'url del sito.

Se poi ti serve di passare una variabile da una pagina all'altra
puoi farlo benissimo nella querystring, nella solita forma:

Codice: Seleziona tutto

index.php?pagina=nonso&variabiledapassare=boh
Naturalmente, nella pagina nonso, la variabile sarà disponiile
come $_GET["variabiledapassare"], un po' come succede coi
form, insomma (solo che il metodo, in questo caso, è sempre get).

Ciao,
nino

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

un dubbio...
definendo una variabile di sessione, se allo stesso tempo fanno il login più utenti ognuno vedrà solo quello per cui il suo utente ha il permesso, giusto?? voglio dire, la cosa è gestita automaticamente dalle varie sessioni, no??

ah, un'altra domanda... quanto dura una sessione?? si può impostare in qualche modo la durata??
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

danix85 ha scritto:un dubbio...
definendo una variabile di sessione, se allo stesso tempo fanno il login più utenti ognuno vedrà solo quello per cui il suo utente ha il permesso, giusto?? voglio dire, la cosa è gestita automaticamente dalle varie sessioni, no??

ah, un'altra domanda... quanto dura una sessione?? si può impostare in qualche modo la durata??
Come dicevo qualche post fa, le sessioni hanno valenza locale.
In effetti (anche se non ho mai approfondito) la variabile prende
una specie di identificatore univoco. La variabile di sessione
rimane valida finché non chiudi il browser oppure finché non
dai un session_unset() che le annulla tutte o un
session_unregister("nomevariabile") per annullarne una specifica;
naturalmente, anche una nuova assegnazione annulla la precedente.

Quelli a cui puoi assegnare una durata sono i cookie.

Naturalmente, puoi anche definire una funzione a tempo per
far scadere una sessione...

Ciao,
nino

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

ok, tutto più chiaro adesso...
stavo guardando la reference e ho visto che ci sono un sacco di funzioni per imagemagick, ncurses e anche per i pdf... :shock:
ma php non era un linguaggio per il web building dinamico??
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da conraid »

danix85 ha scritto:ok, tutto più chiaro adesso...
stavo guardando la reference e ho visto che ci sono un sacco di funzioni per imagemagick, ncurses e anche per i pdf... :shock:
ma php non era un linguaggio per il web building dinamico??
imagemagik e pdf li puoi usare anche per generare output da mandare via web, ncurses invece è per la parte non web di php. Esiste anche phpGtk, ma imho per quelle cose meglio altro oggettivamente

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

danix85 ha scritto:ok, tutto più chiaro adesso...
stavo guardando la reference e ho visto che ci sono un sacco di funzioni per imagemagick, ncurses e anche per i pdf... :shock:
ma php non era un linguaggio per il web building dinamico??
Il php è enorme ed un vero linguaggio di programmazione a tutto
tondo (IMHO). Naturalmente, come dice giustamente conraid, ad
ogni uso il suo linguaggio!

Per quanto riguarda le funzioni per i pdf, hai visto il mio calendario
perpetuo?
http://aschenaz.netsons.org/calendario/
EDIT: come non detto! Con gli ultimi aggiornamenti di Netsons, mi
sa che s'è creato qualche problemino. Mi devo decidere a passare
su di un hosting normale, va...! :(

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

Grazie del chiarimento conraid... :D

stavo leggendo qualcosa a proposito di rand per generare numeri pseudo-casuali, e allora ho pensato di fare una funzione che genera una password di 8 caratteri alfanumerici più alcuni caratteri particolari per inserirla come "aiuto" al momento di effettuare la registrazione sul sito... ve la posto, ditemi come vi sembra...

Codice: Seleziona tutto

function randPassword() {
  $pw = '';
  srand ((double) microtime() * 1000000);
  for ($x = 1; $x <= 8; $x++) {
    switch ( rand(1, 4) ) {
    case 1:
      $pw .= rand(0, 9);
      break;
    case 2:
      $pw .= chr( rand(65, 90) );
      break;
    case 3:
      $pw  .= chr( rand(97, 122) );
      break;
    case 4:
      $pw  .= chr( rand(58, 64) );
      break;
    }
  }
  echo "$pw";
}

Ciau

PS.
Si Nino, conoscevo quella tua pagina ma non avevo capito come facessi a generare il calendario... :)
mi piace php, meno male che ci siete voi che mi date una mano... hehe...


Grazie mille di tutto...

EDIT:
Nino, guarda che ho controllato e ti stampa la pagina del calendario bianca, si legge solo la testata...

RIEDIT:
mi sa che te ne sei accorto :lol: ...
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

ho provato a "refreshare" qualche volta la pagina della registrazione e ho notato che a volte mi vengono date delle password a dir poco... particolari, dovendole inserire nel db, mi chiedevo se password come questa possano dare problemi...

=@=57@??
?0k9>vi:
X>ShU1v?


che ne dite??
è meglio se mi limito a password alfanumeriche (magari più lunghe di 8 caratteri) ??
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

Su database le salvi tranquillamente, ma poi potresti avere qualche
problema nel corpo degli script, se becchi, che so un $ o degli apici...
Io mi limiterei agli alfanumerici, mescolando maiuscole e minuscole.

Per quanto riguarda la funzione, molti consigliano mt_rand piuttosto
che rand. Infatti, come da manuale...
which will produce random numbers four times faster than what the average libc rand() provides.

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da danix »

annotato mt_rand, ho eliminato la parte relativa ai simboli e allungato di 2 cifre la lunghezza della password...

adesso vado a fare un giro, domani vedrò cosa riesco a tirare fuori riguardo alle immagini... :D


Grazie mille a tutti per l'aiuto...
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: php / sql - dubbi e domande varie...

Messaggio da aschenaz »

danix85 ha scritto:...domani vedrò cosa riesco a tirare fuori riguardo alle immagini...
Se ti interessa, io ho fatto una funzioncina per la creazione dei thumbnail
delle immagini caricate: in pratica, crea una miniatura proporzionale di
ogni immagine caricata.

Postilla:
In giro per la rete trovi milioni di classi e funzioni pronte per fare tutto quello
che vuoi. Ma io credo di aver capito il tuo spirito nell'affrontare questi
argomenti (che poi è simile al mio): preferisci fare con le tue mani, anche
sbagliando, ma imparando dagli errori. Qualcuno direbbe: reinventare la
ruota
! Ma, specialmente nel mio caso (nessun background informatico), è
l'unico modo efficace per imparare...

Rispondi