Semplice tutorial PHP

Usate questo forum per proporre nuovi articoli, creare gruppi di lavoro, segnalare problemi, collaborare in genere al progetto Wikislacky.

Moderatore: Staff

Regole del forum
1) Citare l'eventuale nome e link dell'articolo della wiki.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
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
bzImage
Linux 0.x
Linux 0.x
Messaggi: 68
Iscritto il: gio 7 giu 2007, 19:05
Slackware: 13
Contatta:

Re: Semplice tutorial PHP

Messaggio da bzImage »

appena ho tempo studio anche io :oops:
complimenti!
e un saluto a tutti...ma non vi sarò mancato :)

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

Grazie mille Nino per questo ottimo tutorial! 8) Me lo sono succhiato durante le feste per trasformare il vecchio sito. E' stato il passo decisivo per prendere di petto (era ora!) il php. Vengo al sodo riferendomi al modello proposto nel tutorial.
Ho creato due nuove directories, diciamo 'famiglia' ed 'amici', protette da htaccess (sono in hosting..). Non trovo il modo per mostrare le pagine protette sulla index. Cioè, se linko normalmente '<a href="amici/file.php"> il login è corretto ma mi mostra la pagina in html crudo (*.css sulla / per index float a 2 colonne..); se aggiungo 'include("amici/$pagina.php");' e linko '<a href="home.php?pagina=file"> il login viene eluso (addio protezione!), ma serve le pagine per bene. Questa settimana mi sono documentato molto sui login, e credo di non aver problemi in questo senso, sia con htaccess che con le sessioni. Il problema è rendere la pagina all'interno della colonna principale con php. :-k Grazie se puoi contribuire a muovermi le meningi..
Ultima modifica di kanzy il sab 31 gen 2009, 17:38, modificato 1 volta in totale.
l'uomo ha bisogno di cibo rifugio e storie

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

Re: Semplice tutorial PHP

Messaggio da danix »

kanzy ha scritto:Grazie mille Nino per questo ottimo tutorial! 8) Me lo sono succhiato durante le feste per trasformare il vecchio sito. E' stato il passo decisivo per prendere di petto (era ora!) il php. Vengo al sodo riferendomi al modello proposto nel tutorial.
Ho creato due nuove directories, diciamo 'famiglia' ed 'amici', protette da htaccess (sono in hosting..). Non trovo il modo per mostrare le pagine protette sulla index. Cioè, se linko normalmente '<a href="amici/file.php"> il login è corretto ma mi mostra la pagina in html crudo (*.css sulla / per index float a 2 colonne..); se aggiungo 'include("amici/pagina.php");' e linko '<a href="home.php?pagina=file"> il login viene eluso (addio protezione!), ma serve le pagine per bene. Questa settimana mi sono documentato molto sui login, e credo di non aver problemi in questo senso, sia con htaccess che con le sessioni. Il problema è rendere la pagina all'interno della colonna principale con php. :-k Grazie se puoi contribuire a muovermi le meningi..
io personalmente ci ho capito poco da quello che hai scritto... :D ma probabilmente sono lento io, comunque non puoi postare qualche pezzetto di codice così magari è più facile vedere se e dove sbagli qualcosa?? ;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

@danix

Grazie per il tuo interessamento.
Mi scuso se ti sembra che non sia stato abbastanza chiaro, ma pensavo che l'accenno fosse sufficiente.
kanzy ha scritto:Vengo al sodo riferendomi al modello proposto nel tutorial.
Non c'è codice errato, non c'è proprio perchè non so come fare.
Spiego passo per passo riprendendo dal tutorial.

index.php

<?php
// menu
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$vocimenu=array("home","bazzecole","quisquilie","pinzillacchere");
foreach($vocimenu as $voce) {
echo '<span style="padding-left: 1.5em;">';
if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
echo $voce;
if($pagina!=$voce) echo "</a>";
echo "</span>";
}
echo "\n";
?>
......
<!-- links a pagine protette da .htaccess -->
modo html
<a href="amici/storie.php">Storie</a>
<a href="famiglia/compleanni.php">Compleanni</a>
oppure modo php
<a href="index.php?pagina=storie">Storie</a>
<a href="index.php?pagina=compleanni>Compleanni</a>
......
<!-- colonna principale -->
<div id="main">
<h2><?php echo ucfirst($pagina) ?></h2>
<?php include("pagine/$pagina.php") ?>
</div>

Nel primo caso, il login avviene correttamente, ma ovviamente le pagine mostrate non vengono incluse nella colonna principale della index.
Nel secondo caso, aggiungendo un 'include("amici/$pagina.php");' sulla "main", il login viene saltato, ma le pagine vengono rese correttamente.
Naturalmente vorrei il login attivo e le pagine incluse, quello che si realizza in tutti i siti. E' sicuramente una cosa semplice, ma non la conosco perchè con php ho appena iniziato e non ho trovato un esempio che mi permetta di adattarlo alle mie necessità.
l'uomo ha bisogno di cibo rifugio e storie

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

Re: Semplice tutorial PHP

Messaggio da danix »

come avviene l'autenticazione?? tramite sessione?? In questo caso puoi definire un altro array di pagine "protette" e usare un if per verificare che la sessione sia attiva, in tal caso mostri anche i link alle pagine protette, altrimenti non li mostri. Allo stesso modo se qualcuno prova ad accedere ad una pagina protetta senza essersi autenticato puoi redirigerlo su una pagina di errore... ;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

@danix

... che è poi la soluzione sviluppata nel tutorial per gestire l'inserimento dati e le tabelle sul db. Una soluzione elegante ma molto personale, non sempre applicabile in presenza di molti links. All'inizio del tread ho letto che anche tu avevi problemi ad implementare una sessione autenticata... come hai risolto?
l'uomo ha bisogno di cibo rifugio e storie

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

Re: Semplice tutorial PHP

Messaggio da danix »

pomeriggio ti posto un po' di codice così vedi come ho risolto io... ;)
danix
myself 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: Semplice tutorial PHP

Messaggio da aschenaz »

kanzy ha scritto:Grazie mille Nino per questo ottimo tutorial! 8) Me lo sono succhiato durante le feste per trasformare il vecchio sito. E' stato il passo decisivo per prendere di petto (era ora!) il php. Vengo al sodo riferendomi al modello proposto nel tutorial.
Ho creato due nuove directories, diciamo 'famiglia' ed 'amici', protette da htaccess (sono in hosting..). Non trovo il modo per mostrare le pagine protette sulla index. Cioè, se linko normalmente '<a href="amici/file.php"> il login è corretto ma mi mostra la pagina in html crudo (*.css sulla / per index float a 2 colonne..); se aggiungo 'include("amici/pagina.php");' e linko '<a href="home.php?pagina=file"> il login viene eluso (addio protezione!), ma serve le pagine per bene. Questa settimana mi sono documentato molto sui login, e credo di non aver problemi in questo senso, sia con htaccess che con le sessioni. Il problema è rendere la pagina all'interno della colonna principale con php. :-k Grazie se puoi contribuire a muovermi le meningi..
Come diceva Danix neanch'io ci ho capito molto.

Il sistema di accesso autenticato del tutorial non fa riferimento a
htaccess, ma usa semplicemente una tabella di mysql, su cui ci
sono le password cifrate. Poi tutto è lasciato a php, che controlla
se esista la corrispondenza utente-password sul database e
permette l'accesso alle pagine che noi abbiamo stabilito essere
"riservate". In effetti, se le pagine sono tante (come dici tu), basta
inserirle tutte nell'array $pagineriservate.
Nel tutorial è spiegato tutto abbastanza bene:
http://www.slacky.eu/wikislack/index.ph ... utenticato

Ma, ripeto, probabilmente non ho capito bene io il problema... :-k

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

Re: Semplice tutorial PHP

Messaggio da danix »

stavo riguardando il codice su cui allora avevo problemi, e in effetti non è molto differente da quello del tutorial di Nino, la mia difficoltà allora era semplicemente quella di non aver capito come funzionassero le sessioni e come potevo lavorarci...

In pratica tu dovresti creare un form di login che indirizza i suoi dati sulla pagina che si occupa di gestirli (nel caso del tutorial getdata.php mi pare), in quella pagina php raccoglie i dati passati (usa lo stesso metodo che usi nel form per inviarli, mi raccomando) e li elabora. creando una sessione e attivandola.
Io nella mia sessione memorizzo anche il nome dell'utente per esempio (mi serve in vari punti del sito e in questo modo mi basta splittare la variabile per avere il nome), ma puoi farci davvero ciò che vuoi...

L'unico consiglio che posso darti è di provare a scrivere un po' di codice, attieniti strettamente al tutorial per iniziare e vedrai che capisci tutto, e se non capisci apri un thread e discutiamo di quello che non hai capito, ma senza una base è difficile aiutarti...

;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

@danix

Grazie per esserti preso la briga di andare a guardare, ma evidentemente non sono stato abbastanza chiaro perchè non ho problemi con il codice del tutorial. Adesso rispiego.. #-o

@aschenaz

Il tutorial - ripeto ottimo - l'ho capito e funge ok.
Passiamo oltre.

1. Sul modello del tutorial, ho creato una 'index.php' dove, tramite un menu simile, includo le pagine pubbliche presenti nella directory 'pagine'. Tutto uguale.
2. Ho creato due nuove directories, ognuna protetta con password diversa, 'amici' e 'famiglia' con molti files.
3. Non desidero utilizzare il metodo delle voci a s/comparsa per l'autenticazione, perchè i links sono in box differenti e in contesti diversi sulla colonna destra della 'index.php', e non saprei come renderli: dunque path tradizionali.
4. L'host ha inserito nelle directories gli .htaccess, con l'avvertenza di non modificarli.
5. Ho creato comunque un form per il login (includendo la funzione 'reindirizza' ed utilizzando la sezione LOGIN di 'raccoltadati.php'); un file 'check.php', da includere all'inizio dei files da proteggere, per chiamare il login e per evitare i soliti furbetti; ed un db per user/pass. Tutto ok.

Siamo arrivati al punto in cui la pagina scelta viene servita al browser.

a) Se ho aggiunto 'include("amici/$pagine.php")', le pagine vengono rese correttamente all'interno della 'index.php', ma sono visibili a tutti!, cioè possono essere richiamate direttamente rendendo assolutamente inutile il login;

b) Se non ho aggiunto 'include()', tutta la procedura di login avviene correttamente, ma la pagina viene resa in una nuova finestra fuori dalla index (naturalmente in questa modalità ho sostituito la query-strings con il path sia in chiamata, sia nella funzione 'reindirizza', che nella funzione header);

che fare per ottenere la pagina inclusa all'interno della index + una corretta protezione?..

Spero questa volta di essermi spiegato chiaramente.. :roll:
l'uomo ha bisogno di cibo rifugio e storie

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: Semplice tutorial PHP

Messaggio da aschenaz »

Credo che succeda perché, con quell''include("amici/$pagine.php")' diretto,
tu scavalchi ogni controllo... Ma il valore della variabile $pagine come viene
assegnato? Con una query-string passata dal browser? Dovresti porre una
condizione a monte dell'include, per dirottare al login se il valore di $pagine
è compreso tra quelle riservate. Ma, di fatto, è la stessa cosa del tutorial...

Se non posti una bella porzione di codice è difficile capire... :-k

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

Capito. \:D/
Modificando i relativi riferimenti sulla index ho risolto così:

<div id="main"><?php
include("pages/$page.php");
if(in_array($riservate) || isset($_SESSION["autorizza"])) {
include("amici/$page.php");
header("Location: index.php");
}
?></div>

Grazie. =D>

La mia difficoltà, per ora, non sono i tutorials o i manuali, ma calarmi nella mentalità da coder per applicarli. :roll:
l'uomo ha bisogno di cibo rifugio e storie

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: Semplice tutorial PHP

Messaggio da aschenaz »

kanzy ha scritto:Capito. \:D/
Modificando i relativi riferimenti sulla index ho risolto così:

<div id="main"><?php
include("pages/$page.php");
if(in_array($riservate) || isset($_SESSION["autorizza"])) {
include("amici/$page.php");
header("Location: index.php");
}
?></div>

Grazie. =D>

La mia difficoltà, per ora, non sono i tutorials o i manuali, ma calarmi nella mentalità da coder per applicarli. :roll:
Si, ma c'è qualcosa che non va nel tuo codice:
innanzitutto deve essere in_array($page,$riservate).
Poi vai a porre due condizioni opposte (la pagina è riservata oppure esiste la
sessione di autorizzazione); infine come risultato includi la pagina e poi
redirigi... :-k

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

aaargh!.. #-o in più sono venuti a galla altri problemi.. :oops: in settimana proverò con calma a rivedere il tutto. Per adesso grazie della tua disponibilità, sempre generosa..
l'uomo ha bisogno di cibo rifugio e storie

kanzy
Linux 2.x
Linux 2.x
Messaggi: 210
Iscritto il: sab 10 mag 2008, 15:02
Slackware: 14.2

Re: Semplice tutorial PHP

Messaggio da kanzy »

@aschenaz

Ho rifatto tutto da capo per cercare di cucirlo su misura. Credo di aver imparato molto in queste 2 settimane, ma una l'ho persa solo per un ? e un = . Nel file funzioni.php del tutorial ho aggiunto un ? alla location per riuscire a farlo girare.. è giusto?..

<?php
function reindirizza($paginainterna=0) {
$location="Location: ../index.php?";
if($paginainterna) $location.="$paginainterna";
header($location);
exit;
}
?>

Non c'è un debugger per il PHP?..
Una di queste sere ti posto una sintesi del codice, così - please! - quando hai tempo gli dai un occhio: è il mio primo pezzo di codice php!
l'uomo ha bisogno di cibo rifugio e storie

Rispondi