  {"id":55,"date":"2011-03-02T22:37:10","date_gmt":"2011-03-02T21:37:10","guid":{"rendered":"http:\/\/gironi.it\/blog\/?p=55"},"modified":"2024-09-20T14:08:32","modified_gmt":"2024-09-20T13:08:32","slug":"pagine-con-piu-scopi-in-php","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/pagine-con-piu-scopi-in-php\/","title":{"rendered":"Pagine con piu&#8217; scopi in php"},"content":{"rendered":"<p>Pagine con piu&#8217; scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu&#8217; condizioni. La lettura del <a href=\"http:\/\/education.mondadori.it\/Libri\/SchedaLibro.asp?IdLibro=88-04-53965-8\" target=\"_blank\" rel=\"noopener\">bel libro di Kevin Yank<\/a> e&#8217; stata illuminante&#8230;<\/p>\n<p>Vediamo un esempio:<\/p>\n<pre class=\"brush: xml; ruler: true;\">&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd\"&gt;\r\n&lt;html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;Sample Page&lt;\/title&gt;\r\n&lt;meta http-equiv=\"content-type\" content=\"text\/html; charset=iso-8859-1\" \/&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;?php if (!isset($_GET['name'])): ?&gt;\r\n\r\n  &lt;!-- Nessun nome assegnato, per cui viene richiesto all'utente --&gt;\r\n\r\n  &lt;form action=\"&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;\" method=\"get\"&gt;\r\n  &lt;label&gt;Please enter your name: &lt;input type=\"text\" name=\"name\" \/&gt;&lt;\/label&gt;\r\n  &lt;input type=\"submit\" value=\"GO\" \/&gt;\r\n  &lt;\/form&gt;\r\n\r\n&lt;?php else: ?&gt;\r\n\r\n  &lt;p&gt;Your name: &lt;?php echo $_GET['name']; ?&gt;&lt;\/p&gt;\r\n\r\n  &lt;p&gt;This paragraph contains a &lt;a href=\"newpage.php?name=&lt;?php echo urlencode($_GET['name']); ?&gt;\"&gt;link&lt;\/a&gt; that passes the name variable on to the next document.&lt;\/p&gt;\r\n\r\n&lt;?php endif; ?&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p><!--more--><\/p>\n<p>Qualche picola nota:<\/p>\n<p>E&#8217; da da notare, l&#8217;uso della funzione <strong>isset<\/strong>.<br \/>\nQuesta funzione ritorna un valore &#8220;vero&#8221; se alla variabile e&#8217; assegnato un valore e &#8220;falso&#8221; se la variabile non esiste.<\/p>\n<p>Interessante anche l&#8217;uso della variabile $_SERVER[&#8216;PHP_SELF&#8217;], utilizzata per specificare l&#8217;attributo <em>action<\/em> del form.<\/p>\n<p>$_SERVER[&#8216;PHP_SELF&#8217;] e&#8217; sempre configurata sull&#8217;URL della pagina corrente, quindi il form, una volta inviato, carichera&#8217; sempre la stessa pagina, ma con la variabile settata.<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Immaginiamo ora di avere un sito gestito attraverso database. Il problema e&#8217; quello di creare due differenti versioni di ciascuna pagina: una per l&#8217;utente non loggato (con la form per fare il login), una per l&#8217;utente regolarmente loggato.<br \/>\nUsando la tecnica delle pagine con piu&#8217; scopi il problema ha in php una soluzione semplice ed elegante. L&#8217;esempio che riporto e&#8217; tratto da un articolo di Kevin Yank (<a href=\"http:\/\/www.devarticles.com\/c\/a\/PHP\/Developing-Multipurpose-Pages-With-PHP\" target=\"_blank\" rel=\"noopener\">questo il link all&#8217;articolo originale<\/a>).<\/p>\n<p>Bob ha una pagina con delle news e un piccolo riquadro di login. Ecco il codice:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: xml; ruler: true;\">&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;Bob's Login Site&lt;\/title&gt;\r\n&lt;body bgcolor=\"#00cc00\"&gt;\r\n&lt;?php\r\nif ($_POST['login'] == \"do\") {\r\n$name = $_POST['name'];\r\n$pass = $_POST['password'];\r\n$db_cnct = mysql_connect(\"localhost\", \"user\", \"pass\") or die(\"Could not connect to the database!\");\r\n$db = mysql_db_select(\"users\", $db_cnct);\r\n$sql = \"SELECT user, pass FROM users WHERE user = \\\"$name\\\" and pass = \\\"md5($pass)\\\"\";\r\n\/\/ This is for an encrypted password-protection database\r\n$check_user = mysql_query($sql);\r\n$users = mysql_num_rows($check_user);\r\nif ($users &lt; 1) {\r\necho (\"&lt;center&gt;Invalid Password!&lt;\/center&gt;\");\r\necho ('&lt;form action=\"'.$PHP_SELF.'\" method=\"post\"&gt;');\r\necho ('&lt;input type=\"text\" name=\"name\"&gt;&lt;br \/&gt;');\r\necho ('&lt;input type=\"password\" name=\"password\"&gt;&lt;br \/&gt;');\r\necho ('&lt;input type=\"hidden\" name=\"login\" value=\"do\"&gt;');\r\necho ('&lt;input type=\"submit\" value=\"Log-in\"&gt;');\r\necho ('&lt;\/form&gt;');\r\n}\r\nelse {\r\necho (\"Welcome, $name!\");\r\n}\r\n}\r\nelse {\r\necho ('&lt;form action=\"'.$PHP_SELF.'\" method=\"post\"&gt;');\r\necho ('&lt;input type=\"text\" name=\"name\"&gt;&lt;br \/&gt;');\r\necho ('&lt;input type=\"password\" name=\"password\"&gt;&lt;br \/&gt;');\r\necho ('&lt;input type=\"hidden\" name=\"login\" value=\"do\"&gt;');\r\necho ('&lt;input type=\"submit\" value=\"Log-in\"&gt;');\r\necho ('&lt;\/form&gt;');\r\n?&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>Lo script controlla se ci sono username e password (passati tramite il metodo HTTP\u00a0POST).<br \/>\nSe non ci sono, lo script mostrera&#8217; il codice che chiedera&#8217; di loggarsi.<\/p>\n<p>Se ci sono, lo script interroga il database per controllare se si tratta di una coppia di valori validi.<br \/>\nSe e&#8217; tutto ok, verra&#8217; mostrata la scritta &#8220;Welcome, $name!&#8221;, altrimenti verra&#8217; stampata a schermo una indicazione di errore e verra&#8217; riproposto il modulo di login.<\/p>\n<p>Ed ecco un esempio pratico un po&#8217; piu&#8217; evoluto:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: xml;\">&lt;?PHP\r\n$forum = $_GET['forum'];\r\nif (!isset ($forum) ) {\r\n$sql = \"SELECT forums, ID FROM master_list\";\r\n$get_forums = mysql_query($sql);\r\nwhile ($forums = mysql_fetch_array($get_forums) ) {\r\necho ('&lt;a href=\"forums.php?forum'.$forums[\"ID\"].'\"&gt;'.$forums[\"forums\"].'&lt;\/a&gt;&lt;br \/&gt;');\r\n}\r\n}\r\n\r\nelse {\r\n$thread = $_GET['thread'];\r\nif (!isset ($thread) ) {\r\n$sql = \"SELECT thread, ID FROM forum\".$forum;\r\n$get_threads = mysql_query($sql);\r\nwhile ($threads = mysql_fetch_array($get_forums) ) {\r\necho ('&lt;a href=\"forums.php?forum='.$forum.'&amp;thread='.$threads[\"ID\"].'\"&gt;');\r\necho ($threads[\"thread\"].'&lt;\/a&gt;&lt;br \/&gt;');\r\n}\r\n}\r\nelse {\r\n$sql = \"SELECT messages FROM thread\".$thread;\r\n$get_messages = mysql_query($sql);\r\nwhile ($messages = mysql_fetch_array($get_messages) ) {\r\necho ('&lt;table&gt;&lt;tr&gt;&lt;td&gt;'.$messages[\"message\"].'&lt;\/td&gt;&lt;\/tr&gt;&lt;\/table&gt;');\r\n}\r\n}\r\n?&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Pagine con piu&#8217; scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu&#8217; condizioni. La lettura del bel libro di Kevin Yank e&#8217; stata illuminante&#8230; Vediamo un esempio: &lt;!DOCTYPE html PUBLIC &#8220;-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN&#8221; &#8220;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd&#8221;&gt; &lt;html xmlns=&#8221;http:\/\/www.w3.org\/1999\/xhtml&#8221;&gt; &lt;head&gt; &lt;title&gt;Sample Page&lt;\/title&gt; &lt;meta http-equiv=&#8221;content-type&#8221; content=&#8221;text\/html; charset=iso-8859-1&#8243; \/&gt; &lt;\/head&gt; &lt;body&gt; &lt;?php if (!isset($_GET[&#8216;name&#8217;])): &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/pagine-con-piu-scopi-in-php\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Pagine con piu&#8217; scopi in php&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1015],"tags":[1017,1019,1021,1023],"class_list":["post-55","post","type-post","status-publish","format-standard","hentry","category-sviluppo-web-it","tag-mysql-it","tag-php-it","tag-sviluppo-it","tag-web-it"],"lang":"it","translations":{"it":55},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"paolo","author_link":"https:\/\/www.gironi.it\/blog\/author\/paolo\/"},"uagb_comment_info":2,"uagb_excerpt":"Pagine con piu&#8217; scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu&#8217; condizioni. La lettura del bel libro di Kevin Yank e&#8217; stata illuminante&#8230; Vediamo un esempio: &lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd\"&gt; &lt;html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"&gt; &lt;head&gt; &lt;title&gt;Sample Page&lt;\/title&gt; &lt;meta http-equiv=\"content-type\" content=\"text\/html; charset=iso-8859-1\" \/&gt; &lt;\/head&gt; &lt;body&gt; &lt;?php if (!isset($_GET['name'])):&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=55"}],"version-history":[{"count":1,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":3203,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/55\/revisions\/3203"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}