Come da titolo come ci si cancella dal forum ?
- Home
- aragonesse
- Post
aragonesse
@aragonesse
Post creati da aragonesse
-
Cancellarsi dal forum
-
RE: Controllo checkbox non selezionata
@Protone86 said:
Niente da fare, ho risolto sostituendo il tutto con un pulsante "radio". Grazie comunque!
Di niente ...
-
RE: Codice per scrivere il passaggio dello spider
@netgreg said:
Sembra che il modulo sia presente, perchè queste due righe di codice, molto simili, funzionano bene:
la prox riga redirect da senza www a con www
RewriteCond %{HTTP_HOST} ^xprenotare.it
RewriteRule ^(.*)$ www xprenotare.it/$1 [R=301,L]RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^BlackWidow RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:[email protected] RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw RewriteCond %{HTTP_USER_AGENT} ^DISCo RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon RewriteCond %{HTTP_USER_AGENT} ^eCatch RewriteCond %{HTTP_USER_AGENT} ^EirGrabber RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE RewriteCond %{HTTP_USER_AGENT} ^FlashGet RewriteCond %{HTTP_USER_AGENT} ^GetRight RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It RewriteCond %{HTTP_USER_AGENT} ^GrabNet RewriteCond %{HTTP_USER_AGENT} ^Grafula RewriteCond %{HTTP_USER_AGENT} ^HMView RewriteCond %{HTTP_USER_AGENT} ^HTTrack RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker RewriteCond %{HTTP_USER_AGENT} ^InterGET RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja RewriteCond %{HTTP_USER_AGENT} ^JetCar RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider RewriteCond %{HTTP_USER_AGENT} ^larbin RewriteCond %{HTTP_USER_AGENT} ^LeechFTP RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX RewriteCond %{HTTP_USER_AGENT} ^Navroad RewriteCond %{HTTP_USER_AGENT} ^NearSite RewriteCond %{HTTP_USER_AGENT} ^NetAnts RewriteCond %{HTTP_USER_AGENT} ^NetSpider RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire RewriteCond %{HTTP_USER_AGENT} ^NetZIP RewriteCond %{HTTP_USER_AGENT} ^Octopus RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator RewriteCond %{HTTP_USER_AGENT} ^PageGrabber RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto RewriteCond %{HTTP_USER_AGENT} ^pcBrowser RewriteCond %{HTTP_USER_AGENT} ^RealDownload RewriteCond %{HTTP_USER_AGENT} ^ReGet RewriteCond %{HTTP_USER_AGENT} ^Siphon RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger RewriteCond %{HTTP_USER_AGENT} ^SmartDownload RewriteCond %{HTTP_USER_AGENT} ^SuperBot RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP RewriteCond %{HTTP_USER_AGENT} ^Surfbot RewriteCond %{HTTP_USER_AGENT} ^tAkeOut RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro RewriteCond %{HTTP_USER_AGENT} ^VoidEYE RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker RewriteCond %{HTTP_USER_AGENT} ^WebAuto RewriteCond %{HTTP_USER_AGENT} ^WebCopier RewriteCond %{HTTP_USER_AGENT} ^WebFetch RewriteCond %{HTTP_USER_AGENT} ^WebReaper RewriteCond %{HTTP_USER_AGENT} ^WebSauger RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor RewriteCond %{HTTP_USER_AGENT} ^WebStripper RewriteCond %{HTTP_USER_AGENT} ^WebWhacker RewriteCond %{HTTP_USER_AGENT} ^WebZIP RewriteCond %{HTTP_USER_AGENT} ^Wget RewriteCond %{HTTP_USER_AGENT} ^Widow RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider RewriteCond %{HTTP_USER_AGENT} ^Zeus RewriteRule ^.*$ **METTI QUA QUELLO CHE VUOI **[L,R]
Prova questo
-
RE: Controllo checkbox non selezionata
Dunque.
Quando invii una form, quale che sia il campo (testo, password, checkbox, ecc) ciò che puoi recuperare è solamente la coppia NomaCampo=>Valore
accedendo solamente al suo valore.Esempi
[php]<input type="text" name="username">
echo $_POST['username']; // Stampa Aragonesse se l'ho messo<input type="checkbox" name="pubblicata" value="true">
echo $_POST['pubblicata']; // Stampa true se seleziono la checkbox[/php]
Ora, il tuo codice è perfetto così com'è. Prima controlli se è settato una valore che è sempre settato dato che un array di checkbox
può contenere anche 1000 controlli 999 dei quali deselezionati ma ne basta uno perchè la condizione sia vera e faccia partire il foreach che
del resto fa esattamente ciò per cui tu, o chi per te, l'ha scritto; non c'è niente di sbagliato ne niente da correggere.Il contrario di questo discorso è che se non metto uno username o se su 1000 checkbox ne deseleziono 1000 gli echo mi ritornano
un errore di indice non definito e per quella sessione, fino al ricaricamento della pagina, tali variabili non esistono in nessun scope
quindi non sono utilizzabili, gestibili, individuabili in nessun modo, per nessuno scopo o motivo senza un punto d'appoggio.Ergo:
-
Dicci cosa vuoi fare perchè così stai chiedendo una cosa inutile oltre che impossibile senza sapere com'è strutturato il tuo codice e
quindi se eventualmente ci sono punti d'appoggio intermedi sui quali operare altri controlli e scremare quelle valorizzate da quelle
non valorizzate; anche se poi mi è oscuro cosa tu possa fartene di un qualcosa che non esiste se non essere a conoscenza di questo
fatto. -
Spiegati un pò meglio.
Ciao
-
-
RE: Controllo checkbox non selezionata
Dovresti postare un pò di codice in più perchè mi sfugge il senso del discorso.
Se una checkbox è selezionata ha un detminato valore ma se non lo è che valore ha ?
-
RE: Gestione di un form iscrizione a numero chiuso
@ada50 said:
Ok funziona grazie c'era un errore questo
[PHP]if ($result =>[/PHP]
che andava cambiato con
[PHP]if ($result > =[/PHP]Ciao e grazie ancora
O beh. Quel errore è il mio marchio di fabbrica. Lo faccio 15 volte su 10....tutto nella norma
-
RE: HELP: Perso in un bicchier d'acqua con un semplice if else :(
@meis said:
Ciao Aragonesse, prova a inserire questi link in un database. In questo modo nel [PHP]while($var=mysql_fetch_array($staceppa))...[/PHP] puoi inserire una variabile $_GET su cui eseguire il controllo. L'unica cosa negativa è che nell'URL avrai delle variabili GET
EDIT: ho appena rivisto il tuo codice, potresti anche crearti un array del tipo
[PHP]
$links = array("nonhovoglia" => "Non ho voglia", "vattelappesc" => "Vattelo a Pesc", eccecc);
foreach($links as $var => $nome)
{
if ( isset ( $_GET['action'] ) && ( $_GET['action'] == $var ) )
{echo "<img src=\"bullet.gif\"><a href=\"".$var.".php?action=".$var."\">Sezione ".$nome."</a>";
} else {
echo "<a href=\"".$var.".php?action=".$var."\">Sezione ".$nome."</a>";
}
}
[/PHP]Pur quanto non volessi ne ricorrere al database ne creare un array mi sa che l'unica soluzione è la prima che mi è venuta in mente ieri mattina ovvero creare una tabella con il nome di tutte le sezioni e il loro codice, leggera dal database (così se per caso c'è da aggiungere o rimuovere voci basta agire sul database) e scorrerla come array esattamente come hai detto tu. In pratica
[php]
$strQuery = "SELECT * FROM menu";
$objStatement = $objPDO->prepare($strQuery);
$objStatement->execute();
while ($arRow = $objStatement->fetch(PDO::FETCH_ASSOC))
{
print "Row $i";
foreach ($arRow as $key => $value)
{
if ( isset ( $_GET['option'] ) && ( $_GET['option'] == 'X' ) ) // Dove X è il numero del opzione
{
echo "<img src="bullet.gif"><a href="percorso" . ds . $value . "'.php?option=" . $key . "'>Sezione" . " " . $value . "</a>";
} else {
echo <a href="percorso . ds . $value . '.php?option=" . $key . "'>Sezione" . " " . $value . "</a>";
}
}
$i++;
}
[/php]Ma guarda te se per una semplice immagine devo fare tutto sto casino
Grazie
-
HELP: Perso in un bicchier d'acqua con un semplice if else :(
Come da titolo mi sono perso in un bicchier d'acqua o meglio non ho voglia di stare a scrivere una cinquantina di cicli if per determinare se caricare una semplice immagine di 11x11 prima di una scritta in Verdana 9 giusto per dare le dimensioni della cosa
Il problema: Ho questo pannello di controllo e a qualcuno il 15 di Agosto (della serie un vanno al mare sti qua) sapendo che le mie ferie iniziano il 24 e sono ancora disponibile ha deciso di mandarmi una mail con scritto più o meno questo: Necessita una piccola modifica grafica ovvero dato che sulla sinistra del pannello abbiamo tutte le voci cliccabili (semplici tag <a hef></a>) andrebbe contrassegnata la sezione attualmente in uso mettendo una piccola iconcina verde prima del nome per indicare dove ci si trova; il brutto è che ho capito al volo cosa voleva e mi sono pure dato da fare.
In pratica:
[php]
<a href="vatteloapesc.php?action=vatteloapesc">Sezione Vattelo a Pesc</a>
<a href="nonhovoglia.php?action=nonhovoglia">Sezione Non ho voglia di farlo</a><!-- Molti altri link -->
/**
*- Dovrebbe diventare in pratica una cosa simile
*/
if ( isset ( $_GET['action'] ) && ( $_GET['action'] == "vatteloapesc" ) )
{echo "<img src=\"bullet.gif\"><a href=\"vatteloapesc.php?action=vatteloapesc\">Sezione Vattelo a Pesc</a>";
} else {
echo "<a href=\"vatteloapesc.php?action=vatteloapesc\">Sezione Vattelo a Pesc</a>";
}
if ( isset ( $_GET['action'] ) && ( $_GET['action'] == "nonhovoglia" ) )
{echo "<img src=\"bullet.gif\"><a href=\"nonhovoglia.php?action=nonhovoglia\">Sezione Non ho voglia di farlo</a>";
} else {
echo "<a href=\"vatteloapesc.php?action=vatteloapesc\">Sezione Vattelo a Pesc</a>";
}
// ................ molti altri if
[/php]Dicevo ma non c'è un sistema più spiccio per fare una cosa simile ? Anche a usare l'operatore terniario diventa snervante la cosa
Ciao
-
RE: Problema di sicurezza sito - accesso violato
Ciao. Se non lo fai da qualche altra parte non lo so ma nei tre file che hai postato non c'è uno straccio di algoritmo per criptare la password.
Adderittura tu hai una query di questo tipo:
[php]
$selezione="SELECT utente,pass FROM accessoadmin WHERE utente='".mysql_real_escape_string($_POST['nickname'])."' AND pass='".mysql_real_escape_string($_POST['password'])."'";
[/php]
in cui la parte dedicata al nickname è anche una ripetizione visto che controlli a inizio del file se $_POST['nickname'] è settato e nel caso lo passi con la funzione mysql_real_escape_string come giusto che sia ritornando il suo valore
eventualmente ripulito nella variabile $nickname che potresti usare per accorciare la query al posto di tutta quella pappardella
Quello che rappresenta un grosso problema, come ti dicevo poco sopra, è che se è giusto estrarre un nickname in "chiaro" non lo è più di tanto estrarre la password che almeno dovrebbe essere criptata in md5 o sha1
direttamente nel database e quindi la query dovrebbe diventare un qualcosa di simile a:
[php]
$selezione="SELECT utente,pass FROM accessoadmin WHERE utente='".mysql_real_escape_string($_POST['nickname'])."' AND pass='".mysql_real_escape_string(md5($_POST['password']))."'";
[/php]
che starebbe a significare la presenza di una password criptata nel database (tua e possibilmente di tutti gli utenti) e quindi inviolabile; nota l'md5 messo prima di $_POST['password'].
Per tornare alla tua domanda più che un bug è una grossa falla di sicurezza sfruttata da qualcuno che si è trovato nickname e password in chiaro sotto mano.Ciao
-
RE: Gestione di un form iscrizione a numero chiuso
Nella pagina che riceve i dati della form ovvero quella che poi materialmente esegue la query. In pratica
[php]
$maxIscritti = 'X';
$strQuery = "SELECT * from X"; // Dove X è il nome delle tabella
$query = mysql_query($strQuery);
$result = mysql_num_rows($query);
if ($result => $maxIscritti)
{
header("Location: infoProssimoCorso.php");
// die non sarebbe necessario ma ti eviti che venga eseguito altro
// codice dopo.
die;
} else {
$strQuery = "INSERT INTO /** nome tabella / ( /* nome dei campi / ) VALUES ( /* valori */ )";
}
[/php]Non è il sistema migliore ma funziona ed è spiccio
-
Un ciò voglia di dormì stanotte: Mo beccateve sto ORM va
Asd ... cosa vuol dire ORM ?
ObjectRelationMapping ovvero Mappatura delle Relazioni tra gli Oggetti.
Senza stare troppo a sottilizzare sul fatto che ogni database ha un linguaggio a se stante (bella rottura di beep beep .. autocensura) possiamo mappare gli oggetti che arrivano da una form con i campi del database in modo da non smaronarci più di tanto dato che le operazioni CRUD sono sempre 4 e di solito 1 non si attua in questa forma. CRUD = Create, Read, Update, Delete e solitamente quando si lavora su un database succede che:
- Quando vengono inseriti dei dati si ha un C=Create
- Quando si aggiornano dei dati si ha un U=Update
- Quando si cancellano dei dati si ha un D=Delete che solitamente avviene a metodo esterno (nomeOggetto->delete(IDDaDeletareComprensivoDiTuttoQuelloCheLoRiguarda))
Mentre l'R (Read) solitamente avviene mediante query che poi vengono più o meno artisticamente impaginate. Ergo una buona classe ORM deve contenere solamente 2 metodi + 1 che marca i dati per la cancellazione.
La classe in questione (la terza C o i ragazzi del muretto si vi aggrada) si chiama DataBoudObject e non è niente di eccezionale. Semplicemente si appoggia su una sua figlia (class AggiungiRecord extends DataBoundObject) per ciò che concerne le relazioni tra i campi della form e quelli del database oltre a costruirsi le query da sola.
Ok mo vediamo come va:
[php]
<?phpabstract class DataBoundObject
{protected $ID; protected $objPDO; protected $strTableName; protected $arRelationMap; protected $blForDeletion; protected $blIsLoaded; protected $arModifiedRelation; abstract protected function DefinedTableName(); abstract protected function DefineRelationMap(); public function __construct(PDO $objPDO, $id = null) { $this->strTableName = $this->DefineTableName(); $this->arRelationMap = $this->DefineRelationMap(); $this->objPDO = $objPDO; $this->blIsLoaded = false; if (isset($id)) { $this->ID = $id; } $this->arModifiedRelations = array; } public function Load() { if (isset($this->ID)) { $strQuery = "SELECT "; foreach ($this->arRelationMap as $key => $value) { $strQuery .= "\"" . $key . "\","; } $strQuery = substr($strQuery, 0, strlen($strQuery) -1 ); $strQuery .= " FROM " . $this->strTableName . " WHERE \"id\" = :eid"; $objStatement = $this->objPDO->prepare($strQuery); $objStatement->bindParam(':eid', $this->ID, PDO::PARAM_INT); $objStatement->execute(); $arRow = $objStatement->fetch(PDO::FETCH_ASSOC); foreach ($arRow as $key => $value) { $strMember = $this->arRelationMap[$key]; if (property_exists($this, $strMember)) { if (is_numeric($value)) { eval('$this->' . $strMember . ' = ' . $value . ';'); } else { eval('$this->' . $strMember . ' = "' . $value . '";'); } } } $this->blIsLoaded = true; } public function Save() { if (isset($this->ID)) { $strQuery = 'UPDATE "' . $this->strTableName . '" SET '; foreach ($this->arRelationMap as $key => $value) { eval ('$actualVal = &$this->' . $value . ';'); if (array_key_exists($value, $this->arModifiedRelations)) { $strQuery .= '"' . $key . "\" = :$value, "; } } $strQuery = substr($strQuery, 0, strlen($strQuery) -2); $strQuery .= ' WHERE "id" = :eid'; unset($objPDOStatement); $objStatement = $this->ObjPDO->prepare($strQuery); $objStatement->bindValue(':eid', $this->ID, PDO::PARAM_INT); foreach ($this->arRelationMap as $key => $value) { eval('$actualVal = &$this->' . $value . ';'); if (array_key_exists($value, $this->arModifiedRelations)) { if ((is_int($actualVal) || ($actualVal == null)) { $objStatement->bindValue(':' . $value, $actualVal, PDO::PARAM_STR); } } } $objStatement->execute(); } else { $strValueList = ""; $strQuery = 'INSERT INTO "' . $this->strTableName . '"('; foreach ($this->arRelationMap as $key => $value) { eval('$actualVal = &$this->' . $value . ';'); if (isset($actualVal)) { if (array_key_exists($value, $this->arModifiedRelation)) { $strQuery .= '"' . $key . '", '; $strValueList .= ":$valuem "; } } } $strQuery = substr($strQuery, 0, strlen($strQuery) -2); $strValueList = substr($strValueList, 0, strlen($strVaueList) -2); $strQuery .= ") VALUES ("; $strQuery .= $strValueList; $strQuery .= ")"; unset ($objStatement); $objStatement = $this->objPDO->prepare($strQuery); foreach ( $this->arRelationMap as $key => $value) { eval('$actualVal = &$this->' . $value . ';'); if (isset($actualVal)) { if (array_key_exists($value, $this->arModifiedRelations)) { if ((is_int($actualVal) || ($actualVal == null)) { $objStatement->bindValue(':' . $value, $actualVal, PDO::PARAM_STR); ] } } } $objStatement->execute(); $this->ID = $this->objPDO->LastInsertId($this->strTableName . "_id_seq"); } } public function MarkForDeletion() { $this->blForDeletion = true; } public function __destruct() { if (isset($this->ID)) { if ($this->blForDeletion == true) { $strQuery = 'DELETE FROM "' . $this->strTableName . '" WHERE "id" = :eid'; $objStatement = $this->objPDO->prepare($strQuery); $objStatement->bindValue(':eid', $this->ID, PDO::PARAM_INT); $objStatement->execute(); } ] ] public function __call($strFunction, $arArguments) { $strMethodType = substr($strFunction, 0 ,3); $strMethodMember = substr($strFunction, 3); switch ($strMethodType) { case "set": return ($this->SetAccessor($strMethodMember, $arArguments[0])); break; case "get": return ($this->GetAccessor($strMethodMember)); break; } return false; } private function setAccessor($strMember, $strNewValue) { if (property_exists($this, $strMember)) { if (is_numeric($strNewValue)) { eval ('$this->' . $strMember . ' = ' . $strNewValue . ';'); } else { eval ('$this->' . $strMember . ' = "' . $strNewValue . '";'); } $this->arModifieldRelations[$strMember] = "1"; } else { return false; } } private function GetAccessor($strMember)) { if ($this->blIsLoaded != true) { $this->Load(); } if (property_exists($this, $strMember) { eval ('$strRetVal = $this->' . $strMember . ';'); return $strRetVal; } else { return false; } }
}
[/php]Ok mo che abbiamo fatto ? Nulla di che. Solamente definito una classe astratta che a sua volta definisce, ma non implementa, due metodi astratti che ci permetteranno di gestire il database oltre al fatto che i metodi Load e Save le query se le fanno da soli
Il motivo per cui si ridefiniscono i metodi astratti è semplice. Supponiamo che voglia immettere nel mio database i seguenti dati relativi a un utente: Nome, Cognome, Username, Password, Mail, Avatar e che il mio collega pinco pallo voglia mettrci gli stessi miei ma con in più Indirizzo reale, cap, comune, città, numero di cellulare.
A questo punto possiamo usare tutti e due la stessa classe solo che io definirò una sottoclasse come la seguente, lui una con alcuni campi in più.
[php]
class User extends DataBoundObject
{protected $FirstName; protected $LastName; protected $Username; protected $Password; protected $EmailAddress; protected $DataLastLogin; protected $TimeLastLogin; protected $DataAccountCreated; protected $TimeAccountCreated; protected function DefineTableName() { return "User"; } protected function DefineRelationMap() { return array( "id" => "ID", "firstName" => "FirstName", "lastName" => "LastName", "username" => "Username", "md5Pw" => "Password", "emailAddress" => "EmailAddress", "dateLastLogin" => "DateLastLogin", "timeLastLogin" => "TimeLastLogin", "dateAccountCreated" => "DateAccountCreated", "timeAccountCreated" => "TimeAccountCreated" ); }
}
[/php]Come si nota estendendo la classe principale implemento due metodi.
Il primo indica al motore del database su che tabella lavorare
Il secondo su quali campi.Si potrebbe estendere la classe principale anche in questo modo:
[php]
class Product extends DataBoundObject
{protected $ProductName; protected $ProductDescription; protected $ProductQuantity; protected $ProductPrice; protected $ProductImage; protected function DefineTableName() { return "Product"; } protected function DefineRelationMap() { return array( "id" => "ID", "productName" => "ProductName", "productDescription" => "ProductDescription", "productQantity" => "ProductQuantity", "productPrice" => "ProductPrice", "productImage" => "ProductImage" ); }
}
[/php]Ovviamente in entrambi i casi bisogna che si conoscano i veri campi nel database. In questi esempi ho usato le mie nomenclature
-
Classe per gestire siti in multilingua
Ho buttato giù questa. Che ne pensate ?
[php]
<?php
class Language
{/** * * Language accepted by browser * * @params string * */ private static $_strBrowserLang = null; /** * * Directory with contains the language definition files * * @params string * */ private static $_strDirectoryLang = 'language/'; // private static $_strDirectoryLangua = LanguageNamespace\DIRECTORY; /** * * Predefinited language * * @params string * */ private static $_strDefaultLang = 'it_IT'; // private static $_strDefaultLang = LanguageNamespace\DEFAULT; /** * * Array contains language name for all world * * @params array */ private static $_arLangName = array( 'AF' => 'Afghanistan', 'AX' => 'Aland Islands', 'AL' => 'Albania', 'DZ' => 'Algeria', 'AS' => 'American Samoa', 'AD' => 'Andorra', 'AO' => 'Angola', 'AI' => 'Anguilla', 'AQ' => 'Antarctica', 'AG' => 'Antigua and Barbuda', 'AR' => 'Argentina', 'AM' => 'Armenia', 'AW' => 'Aruba', 'AU' => 'Australia', 'AT' => 'Austria', 'AZ' => 'Azerbaijan', 'BS' => 'Bahamas', 'BH' => 'Bahrain', 'BD' => 'Bangladesh', 'BB' => 'Barbados', 'BY' => 'Belarus', 'BE' => 'Belgium', 'BZ' => 'Belize', 'BJ' => 'Benin', 'BM' => 'Bermuda', 'BT' => 'Bhutan', 'BO' => 'Bolivia', 'BA' => 'Bosnia and Herzegovina', 'BW' => 'Botswana', 'BV' => 'Bouvet Island', 'BR' => 'Brazil', 'IO' => 'British Indian Ocean Territory', 'BN' => 'Brunei', 'BG' => 'Bulgaria', 'BF' => 'Burkina Faso', 'BI' => 'Burundi', 'KH' => 'Cambodia', 'CM' => 'Cameroon', 'CA' => 'Canada', 'CV' => 'Cape Verde', 'KY' => 'Cayman Islands', 'CF' => 'Central African Republic', 'TD' => 'Chad', 'CL' => 'Chile', 'CN' => 'China', 'CX' => 'Christmas Island', 'CC' => 'Cocos Islands', 'CO' => 'Colombia', 'KM' => 'Comoros', 'CG' => 'Congo', 'CD' => 'Congo', 'CK' => 'Cook Islands', 'CR' => 'Costa Rica', 'CI' => 'Coste d\'Ivoire', 'HR' => 'Croatia', 'CU' => 'Cuba', 'CY' => 'Cyprus', 'CZ' => 'Czech Republic', 'DK' => 'Denmark', 'DJ' => 'Djibouti', 'DM' => 'Dominica', 'DO' => 'Dominican Republic', 'EC' => 'Ecuador', 'EG' => 'Egypt', 'SV' => 'El Salvador', 'GQ' => 'Equatorial Guinea', 'ER' => 'Eritrea', 'EE' => 'Estonia', 'ET' => 'Ethiopia', 'FK' => 'Falkland Islands', 'FO' => 'Faroe Islands', 'FJ' => 'Fiji', 'FI' => 'Finland', 'FR' => 'France', 'GF' => 'French Guiana', 'PF' => 'French Polynesia', 'TF' => 'French Southern Territories', 'GA' => 'Gabon', 'GM' => 'Gambia', 'GE' => 'Georgia)', 'DE' => 'Germany', 'GH' => 'Ghana', 'GI' => 'Gibraltar', 'GR' => 'Greece', 'GL' => 'Greenland', 'GD' => 'Grenada', 'GP' => 'Guadeloupe', 'GU' => 'Guam', 'GT' => 'Guatemala', 'GG' => 'Guernsey', 'GN' => 'Guinea', 'GW' => 'Guinea-Bissau', 'GY' => 'Guyana', 'HT' => 'Haiti', 'HM' => 'Heard Island and McDonald Islands', 'HN' => 'Honduras', 'HK' => 'Hong Kong', 'HU' => 'Hungary', 'IS' => 'Iceland', 'IN' => 'India', 'ID' => 'Indonesia', 'IR' => 'Islamic Republic of Iran', 'IQ' => 'Iraq', 'IE' => 'Ireland', 'IM' => 'Isle of Man', 'IT' => 'Italy', 'JM' => 'Jamaica', 'JP' => 'Japan', 'JE' => 'Jersey', 'JO' => 'Jordan', 'KZ' => 'Kazakhstan', 'KE' => 'Kenya', 'KI' => 'Kiribati', 'KW' => 'Kuwait', 'KG' => 'Kyrgyzstan', 'LA' => 'Laos', 'LV' => 'Latvia', 'LB' => 'Lebanon', 'LS' => 'Lesotho', 'LR' => 'Liberia', 'LY' => 'Libya', 'LI' => 'Liechtenstein', 'LT' => 'Lithuania', 'LU' => 'Luxembourg', 'MO' => 'Macao', 'MK' => 'Macedonia', 'MG' => 'Madagascar', 'MW' => 'Malawi', 'MY' => 'Malaysia', 'MV' => 'Maldives', 'ML' => 'Mali', 'MT' => 'Malta', 'MH' => 'Marshall Islands', 'MQ' => 'Martinique', 'MR' => 'Mauritania', 'MU' => 'Mauritius', 'YT' => 'Mayotte', 'MX' => 'Mexico', 'FM' => 'Micronesia', 'MD' => 'Moldova', 'MC' => 'Monaco', 'MN' => 'Mongolia', 'ME' => 'Montenegro', 'MS' => 'Montserrat', 'MA' => 'Morocco', 'MZ' => 'Mozambique', 'MM' => 'Myanmar', 'NA' => 'Namibia', 'NR' => 'Nauru', 'NP' => 'Nepal', 'NL' => 'Netherlands', 'AN' => 'Netherlands Antilles', 'NC' => 'New Caledonia', 'NZ' => 'New Zealand', 'NI' => 'Nicaragua', 'NE' => 'Niger', 'NG' => 'Nigeria', 'NU' => 'Niue', 'NF' => 'Norfolk Island', 'MP' => 'Northern Mariana Islands', 'KP' => 'North Korea', 'NO' => 'Norway', 'OM' => 'Oman', 'PK' => 'Pakistan', 'PW' => 'Palau', 'PS' => 'Palestinian Territories', 'PA' => 'Panama', 'PG' => 'Papua New Guinea', 'PY' => 'Paraguay', 'PE' => 'Peru', 'PH' => 'Philippines', 'PN' => 'Pitcairn', 'PL' => 'Poland', 'PT' => 'Portugal', 'PR' => 'Puerto Rico', 'QA' => 'Qatar', 'RE' => 'Reunion', 'RO' => 'Romania', 'RU' => 'Russia', 'RW' => 'Rwanda', 'SH' => 'Saint Helena', 'KN' => 'Saint Kitts and Nevis', 'LC' => 'Saint Lucia', 'PM' => 'Saint Pierre and Miquelon', 'VC' => 'Saint Vincent and the Grenadines', 'WS' => 'Samoa', 'SM' => 'San Marino', 'SA' => 'Saudi Arabia', 'SN' => 'Senegal', 'RS' => 'Serbia', 'CS' => 'Serbia and Montenegro', 'SC' => 'Seychelles', 'SL' => 'Sierra Leone', 'SG' => 'Singapore', 'SK' => 'Slovakia', 'SI' => 'Slovenia', 'SB' => 'Solomon Islands', 'SO' => 'Somalia', 'ZA' => 'South Africa', 'GS' => 'South Georgia and the South Sandwich Islands', 'KR' => 'South Korea', 'ES' => 'Spain', 'LK' => 'Sri Lanka', 'SD' => 'Sudan', 'SR' => 'Suriname', 'SJ' => 'Svalbard and Jan Mayen', 'SZ' => 'Swaziland', 'SE' => 'Sweden', 'CH' => 'Switzerland', 'SY' => 'Syria', 'TW' => 'Taiwan', 'TJ' => 'Tajikistan', 'TZ' => 'Tanzania', 'TH' => 'Thailand', 'TL' => 'Timor-Leste', 'TG' => 'Togo', 'TK' => 'Tokelau', 'TO' => 'Tonga', 'TT' => 'Trinidad and Tobago', 'TN' => 'Tunisia', 'TR' => 'Turkey', 'TM' => 'Turkmenistan', 'TC' => 'Turks and Caicos Islands', 'TV' => 'Tuvalu', 'UG' => 'Uganda', 'UA' => 'Ukraine', 'AE' => 'United Arab Emirates', 'GB' => 'United Kingdom', 'US' => 'United States', 'UM' => 'United States minor outlying islands', 'UY' => 'Uruguay', 'UZ' => 'Uzbekistan', 'VU' => 'Vanuatu', 'VA' => 'Vatican City', 'VE' => 'Venezuela', 'VN' => 'Vietnam', 'VG' => 'Virgin Islands, British', 'VI' => 'Virgin Islands, U.S.', 'WF' => 'Wallis and Futuna', 'EH' => 'Western Sahara', 'YE' => 'Yemen', 'ZM' => 'Zambia', 'ZW' => 'Zimbabwe' ); /** * * Prevent constructor creation * */ private function __construct() { } /** * * Determine if exists a previous cookie * * @params string * @return bool * */ public static function checkCookieLang() { if ( isset ( $_POST['lang'] ) ) { setcookie ( 'lang', $_POST['lang'], time()+2592000 ); return true; } if ( isset ( $_COOKIE['lang'] ) ) { return true; } else { return false; } } /** * * Get Browser language and set a cookie for user * * @params string * @return string * */ public static function getLanguage() { self::$_strBrowserLang = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); if ( is_dir ( self::$_strDirectoryLang . self::$_strBrowserLang ) ) { if ( $iterator = new DirectoryIterator(self::$_strDirectoryLang . self::$_strBrowserLang) ) { foreach ( $iterator as $fileinfo ) { if ( $fileinfo->isDot() && !$fileinfo->isFile() ) { setcookie ( 'lang', self::$_strDefaultLang, time()+2592000 ); // 2592000 = 30 days - 3600x24x30 } else { setcookie ( 'lang', self::$_strBrowserLang, time()+2592000 ); // 2592000 = 30 days - 3600x24x30 } } } } else { setcookie ( 'lang', self::$_strDefaultLang, time()+2592000 ); // 2592000 = 30 days - 3600x24x30 } } /** * * Swow select menù for language * * @return string * */ public static function menuLang() { if ( is_dir ( self::$_strDirectoryLang ) ) { $iterator = new DirectoryIterator(self::$_strDirectoryLang); foreach ( $iterator as $dirinfo ) { if ( !$dirinfo->isDot() ) { echo "<option value=\"" . $dirinfo . "\">"; $partial = substr($dirinfo, 3); foreach ( self::$_arLangName as $key => $value ) { if ( $key == $partial ) { echo $value . '</option>'; } } } } } else { return false; } }
}
?>
[/php]
Metodi esposti:
**checkCookieLang: **Verifica se c'è un cookie settato o se è stato inviato un cambio di lingua dal menù a tendina
getLanguage: Estrapola la lingua accettata dal browser e verifica se esiste una directory per tale lingua e se esiste e il suo contenuto sono i dot (. e ..) e non sono file setta un cookie sulla lingua di default altrimenti su quella accettata dal browser.
menuLang: Si basa sul array $_arLangName per scorrere la directory delle lingue (codificato come it_IT, en_GB, de_DE, ecc) e creare un mnù a tendina per il cambio lingua. In pratica se è stata fatta una traduzione associa roba del tipo it_IT, de_DE, en_GB a Italiano, Tedesco, Inglese => e via dicendoUna volta inclusa la classe il menù a tendina può essere generato con un codice simile a questo
[php]
echo "<form name="language" method="post" action="index.php">";
echo "<select onchange="document.language.submit()" name="lang">";
echo "<option value="" selected="selected">Selezionare la lingua</option>";
echo "<option value="">------------</option>";
Language::menuLang();
echo "</select>";
echo "</form>";
[/php]Consigli ? Suggerimenti ? Cordiali vattelo a piglià .....
Tutto bene accetto
-
RE: Gestione di un form iscrizione a numero chiuso
[php]
$maxAllowed = "X"; // Dove X rappresenta il massimo di iscritti.
$strQuery = "SELECT * from X"; // Dove X è il nome delle tabella
$query = mysql_query($strQuery);
$result = mysql_num_rows($query);
($result => $maxAllowed) ? header("Location: pagina_con_i_dati_del_prossimo_corso") : /** funzione o altro che registra nel database */;
[/php] -
RE: Codice per scrivere il passaggio dello spider
@netgreg said:
Ho gia risposto ma non vedo nulla, riscrivo.
Non credo che il mio hoster mi faccia toccare quel file, penso che oltre htaccess non mi lasci andare.
Ad oggi ho provato vari per rendere il sito invisibile a vari bot, ma son riuscito sono con Deny Num_ip. Se il bot cambia ip... non funziona piu.
Inoltre il server ho notato che risponde in modo strano: prima 301 e subito dopo 401.
Senza contare che una volta in mezzo a due 401 ha risposto con un 200!Se non posso rendere il sito invisibile almeno redirigere le richieste ad un sito inesistente, come il codice sotto, che non va:
#sbarazziamoci dei bot
RewriteCond %{HTTP_USER_AGENT} ^BadBot
RewriteCond %{HTTP_USER_AGENT} ^scoutjet
RewriteCond %{HTTP_USER_AGENT} ^woopingbot
RewriteRule ^(.)$ http: //go.away/
#RewriteRule ^.$ http: //127.0.0.1 [R,L]Ti manca il mod_rewrite
-
RE: pagina recensioni e commenti
@nicolass2008 said:
non so prioprio da dove partire... sono a digiuno di php....
a tal proposito in rete ho trovato poco di pronto, e mi sono soffermato su questiQuello che segue è il codice che salva quanto nel database quanto scritto nel modulo
<?php
$commento = $_POST['commento'];
$data = date('Y/m/d');
$db = mysql_connect("localhost", "stichtom",""); /accedo al database/
if(!$db) /se c'é stato qualche errore:/
die('ERRORE: non posso accedere al database!');
mysql_select_db("my_stichtom",$db); /scegli il tuo database/
$testo="INSERT INTO commenti (commento,data) VALUES ('$commento','$data')";
if(!mysql_query($testo,$db)) /eseguo la query e controllo se va a buon fine ^^/
die('Errore: non riesco a eseguire la query');
mysql_close($db);
?>Quello che segue è il codice che permette di leggere quanto scritto nel modulo e salvato precentemente
<?php
$contatore = 0;
$db = mysql_connect("localhost", "stichtom",""); /accedo al database/
if(!$db) /se c'é stato qualche errore:/
die('ERRORE: non posso accedere al database!');
mysql_select_db("my_stichtom",$db); /scegli il tuo database/
$testo="SELECT * FROM commenti WHERE 1";
if(!$query = mysql_query($testo,$db)) /eseguo la query e controllo se va a buon fine ^^/
die('Errore: non riesco a eseguire la query');
echo "<html><head><title>Pagina di commenti</title></head><body>";
while($array = mysql_fetch_array($query))
{
echo "<strong>Commento</strong>del ".$array['data'].":<font color='red'>\n".$array['commento']."</font><br>";
}
echo "<br></body></html>";
mysql_close($db);
?>Nel mio database ho creato una tabella immettendo la seguente query con il comando sql
CREATE TABLE commenti (id INT (5) UNSIGNED not null AUTO_INCREMENT, commento VARCHAR (200),data VARCHAR(10), PRIMARY KEY (id))
Ilmio problema è che non riesco a connettermi al database.
i dati/credenziali del mio database sono:
- Server: commentipiedini.db.4077739.hostedresource.com (xx.xx.xxx.x via TCP/IP)
- Utente: commentipiedini xx.xxx.xxx.xx
- nome database: commentipiedini
- nome tabella: commenti
questa tabella l'ho creata con la seguente query:
CREATE TABLE commenti (id INT (5) UNSIGNED not null AUTO_INCREMENT, commento VARCHAR (200),data VARCHAR(10), PRIMARY KEY (id))Ora vorrei sapere dove inserire queste credenziali nei codici php indicati sopra e per potermi connettere e scrivere nella tabella del database
[php]
try
{
$objPDO = new PDO ( $strDSN, $strUser, $strPass, array(PDO::ATTR_PERSISTENT => true) );
$objPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$strQuery = "INSERT INTO commenti (commento, data) values ($_POST['commento'], date('Y/n/d'))";
$objPDO->exec($strQuery);
} catch ( PDOException $e) {
die ( "Errore: " . $e->getMessage() );
}
$objPDO = null;
[/php][php]
i = 0;
$strQuery = "SELECT * FROM commenti";
$objStatement = $objPDO->prepare($strQuery);
$objStatement->execute();
while ($arRow = $objStatement->fetch(PDO::FETCH_ASSOC))
{
print "Row $i";
foreach ($arRow as $key => $value)
{
print " - Commento: $value<br />";
}
$i++;
}
[/php] -
RE: web app per staff discoteca
Concordo in pieno con rexromae. Ad occhio e croce la cosa che chiedi non presenta grossi ostacoli se hai un minimo di cognizioni però dovresti fare due cose:
- Domande mirate
- Sperare che non te lo facciamo noi
-
RE: Trovare una riga conoscendo un valore (MYSQL)
SELECT * FROM users WHERE mail = $mail
-
RE: Codice per scrivere il passaggio dello spider
@netgreg said:
Grazie Aragonese,
avevo provato un codice simile a qualo consigliato da te, ma non sono riuscito a farlo funzionare. Era diverso, non a veva il tag location.
Ma spiegami meglio: va messo in htaccess, vero?apache.conf
-
RE: Utilizzo metodo GET e POST
@supercapocc said:
- Un database deve essere ottimizzato, quindi ogni tabella deve avere la sua funzione. Il codice di attivazione una volta utilizzato non servirà più, quindi facciamo una tabella apposita.
- No, $_GET si deve usare nella pagina di arrivo. $_GET , in inglese afferrare, prendere. Non significa trasmettere.
Nella pagina di partenza strutturi il link della pagina di arrivo, passandogli una coppia chiave-valore che sarà recuperata in seguito.
[PHP]
tuosito.com/activation.php?code='.$code;
[/PHP]Ciao e buon PHP.
A cosa serve una tabella apposita totalmente inutile ?
Quando registri un utente nel tabella utenti, user, users o vatteloapesc devi mettere due campi che sono: SIDREGISTRATION e ACTIVATION. Quando l'utente si registra il primo contiene l'id di sessione e l'altro uno 0. Al momento in cui la mail viene autenticata il primo contiene uno 0 e il secondo un 1; attivazione fatta fine del discorso.
Una tabella relazionale come dici tu è improponibile.
Pensa a questo scenario: Ho un database dove in una tabella registro gli utenti, un'altra se sono attivi o no, un'altra per i permessi e una per le relazioni con i contenuti che immettono e una per i contenuti. Vuoi forse dirmi che ogni volta che devo andare a guardare chi ha immesso cosa devo anche controllare se si è autenticato ? Giammai. Se non si è autenticato non immette un bel niente quindi non ho niente da controllare.
L'ottimizzazione delle tabelle come dici tu, nei database relazionali, non riguarda certamente un campo com il SID di autenticazione. Si usa dividere i dati degli utenti su più tabelle per non stressare i database in base a quelli che possono variare nel tempo e quelli che non verieranno mai o quelli che possono aggiungersi (post, ordini evasi in un ecommerce, articoli inviati in un cms, altre forme di archivio).
Tra le altre cose usando una tabella come dici tu ogni volta che un utente si autentica dovresti prima fare una query sulla tabella utenti poi se la coppia username=>password è corretta una seconda query sulla tabella dei codici di attivazione. E' semplicemente una scemenza enorme.
[php]
$strQuery = "SELECT username, password, activation FROM users WHERE userID = $userID";
[/php]Semplice, chiara e concisa
-
RE: Utilizzo metodo GET e POST
Ciao icex,
non so come hai risolto visto che non hai postato il codice però avresti potuto fare una cosa molto seplice:
- Una form con i dati che ti interessava registrare nel database.
- Registrare una sessione
- Comporre una mail assegnando ad un qualcosa tipo "autorizzati" (?autorizzati=QuaIDDiSessione) l'id di sessione registrato e che è registarto nel database
- Inviare la mail
- Quando l'utente apre la mail e si trova sul sito un update del campo con l'id di sessione portandolo a 0 e quello con l'id di autentificazione portandolo a 1
5 Semplici passaggi che consentono di registrare un utente senza dover fare voli pindarici o andare da Bologna a Milano senza passare prima da Tokyo come hai fatto tu.
Ciao