Archivio per April, 2006

Obiettivo
In questo articolo tratteremo come Conoscere la posizione orizzontale e verticale di un tag <div></div>.

Le funzioni
Le funzioni che ci danno la posizione x e y del nostro div sono

<script>
function getPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x)
curleft += obj.x;
alert(curleft);
return curleft;
}

function getPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
alert(curtop);
return curtop;
}
</script>

Supponiamo che il testo in cui si trovano i div da trovare sia

carrello è implementato con un database mysql.Per tenere informazioni sui dati dell eventuale acquisto,
i dati sono memorizzati nel database e non con i cookies cosi da
essere sempre visibili su qualsiasi browser.
<div id="pippo"><a href="#" onclick="javascript:getPosX(document.getElementById('pippo'));javascript:getPosY(document.getElementById('pippo'))">posizione</a></div>
L utente che vuole fare acquisti deve registrarsi obbligatoriamente.Nel modulo di registrazione ci
sono più controlli per verificare l esattezza dei dati inseriti.Nel momento in cui
l utente fa il
login,il nome utente è memorizzato in variabili di sessione.
<div id="pippo2"><a href="#" onclick="javascript:getPosX(document.getElementById('pippo2'));javascript:getPosY(document.getElementById('pippo2'))">posizione</a></div>

Le funzioni che ci servono sono due getPosX(obj) e getPosY(obj) che ci danno rispettivamente la posizione x e y del tag.
Sono richiamate da:

<div id="pippo"><div>
...
javascript:getPosX(document.getElementById('pippo'));

dove pippo è l'identificatore del tag

30
04

Pagamenti online con banca sella

posted di Administrator, in php, tutorials. No Commenti

Obiettivo
In questo articolo tratteremo come creare un sistema di pagamento con php e banca sella

Passo 1. Registrarsi al sito:

https://www.sella.it/AuthenticationDelegatedServlet?delegated_service=208

finita la registrazione, nel nostro indirizzo di posta ci arriva una email di iscriviti@sella.it
che ci da il benvenuto

Passo 2. Scegliere i servizi:

http://www.sellanet.it/ecoframe.asp e mettiamo i dati forniti con la registrazione.

Clicchiamo su codici test->prosegui

http://www.easynolo.it/ecoframe.asp?to=downloadguidato&where=codtest

dobbiamo inserire di nuovo i dati e arriviamo in una pagina in cui dobbiamo scegliere il tipo di piano
che vogliamo usare:

BASIC ADVANCED PROFESSIONAL

Passo 3. Il piano da scegliere

Io visto che sto provando, scelgo professional. Scegliamo e clicchiamo su procedi.
Ci viene chiesto che tipo di interfaccia scegliere tra

Compatibile O.T.P. Crittografia

Passo 4. Tipo di interfaccia

Tra questi noi scegliamo Crittografia e clicchiamo su procedi.
Fatto cio' nel nostro indirizzo di posta, ci arriva il codice esercente tipo

"GESPAYxxxxx"

che ci servira' per accedere a tutti i servizi del sito

Passo 5. Configurazione dell'ambiente lato admin

https://ecomm.sella.it/gestpay/backoffice/LoginGestPay.asp

e mettiamo i dati identificativi siamo portati alla pagina

https://ecomm.sella.it/gestpay/backoffice/Wizard.asp

e qui dobbiamo scelgiere tra

Tecnica* Amministrativa

e noi scegliamo "tecnica"

Passo 6. Parte tecnica

poi ci viene chiesto l'indirizzo ip del sito che fara' le richieste alla banca e noi lo mettiamo

Poi ci viene chiesto

E-mail per risposta positiva
E-mail per risposta negativa
URL del nostro sito per risposta positiva (sotto https)
URL del nostro sito per risposta negativa (sotto https)
URL Server to Server

Fatto cio' scegliamo la pagina del pagamento e clicchiamo su procedi.

Passo 7. Parte amministrativa

Veniamo riportati alla pagina in cui si sceglieva tra parte amministrativa e parte tecnica
e scegliamo amministrativa e clicchiamo prosegui. Ci viene chiesto di inserire:

mail informazioni
Email Customer Care
Telefono Customer Care

Alla prossima pagina ci viene chiesto le impostazioni del m.o.t.o. (Mail Order Telephone Order
vengono indicate le transazioni effettuate senza la presenza fisica del compratore presso il negozio).

Alla schermata successiva ci viene poi chiesto di inserire dei parametri relativi alla categoria del sito
e poi siamo pronti per partire cliccando su "accedi". Se tutto e' andato bene, dovremmo essere su

https://ecomm.sella.it/gestpay/backoffice/menu.asp

Passo 8. Lato client

Scarichiamo la libreria per gestire le comunicazioni con la banca su http://gestpaycryptphp.sourceforge.net
e scarichiamo il file gestpaycrypt-php-2.0.1.tar.gz cliccando il link.

Passo 9. Gli script

Vediamo come creare lo script; iniziamo a creare la pagina del pagamento

<?
require_once "GestPayCrypt.inc.php";
$objCrypt = new GestPayCrypt();

$myshoplogin = "GESPAY33330"; // Es. 9000001
$mycurrency = "242"; //Es. 242 per euro o 18 lira
$myamount = "1.0"; // Es. 1256.28
$myshoptransactionID="34az846or9"; //Es. "34az85ord19"

$mybuyername= "antonio lopez"; //Es. "Mario Bianchi"
$mybuyeremail= "pippo@hotmail.com"; // Es. "Mario.bianchi@isp.it"
$mylanguage= "1"; //Es. 3 per spagnolo

$objCrypt->SetShopLogin($myshoplogin);
$objCrypt->SetCurrency($mycurrency);
$objCrypt->SetAmount($myamount);
$objCrypt->SetShopTransactionID($myshoptransactionID);

$objCrypt->Encrypt();

$ed=$objCrypt->GetErrorDescription();
if($ed!="")
{
echo "Errore di encoding: " . $objCrypt->GetErrorCode() . " " . $ed . "
";
}
else
{
$b = $objCrypt->GetEncryptedString();
$a = $objCrypt->GetShopLogin();
}
?>

Cliccare su OK per inviare i dati a Banca Sella
<form action="https://ecomm.sella.it/gestpay/pagam.asp">
<input name="a" type="hidden" value="<? echo $a; ?>">
<input name="b" type="hidden" value="<? echo $b; ?>">
<input type="submit" value=" OK " name="submit">
</form>

Vediamo la pagina di risposta in cui la banca ci manda l'esito della transazione "response.php".

<?php
require_once "GestPayCrypt.inc.php";
if (empty($_GET["a"])) {
die("Parametro mancante: 'a'\n");
}
if (empty($_GET["b"])) {
die("Parametro mancante: 'b'\n");
}

$crypt = new GestPayCrypt();
$crypt->SetShopLogin($_GET["a"]);
$crypt->SetEncryptedString($_GET["b"]);
if (!$crypt->Decrypt()) {
die("Error: ".$crypt->GetErrorCode().": ".$crypt->GetErrorDescription()."\n");
}

$amount=$crypt->GetAmount();
$tid=$crypt->GetShopTransactionID();
$order_id=substr($tid,strpos($tid,"-")+1,strlen($tid));
$op_result=$crypt->GetTransactionResult();

switch ($op_result) {
case "XX":
break;
case "KO":
break;
case "OK":
$pstatus="Completed";
echo"[Completed]
";
break;
default:
die("Esito transazione indefinito\n");
}
?>

<form method="post" action="fine.php">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="right" width="100%" class="globalButtons">
<input type="submit" name="" value="Continua">
</td>
</tr>
</table>
<input type="hidden" id="" name="payment_date" value="<?php echo date("d-m-Y h:i:s");?>">
<input type="hidden" id="" name="txn_type" value="web_accept">
<input type="hidden" id="" name="mc_currency" value="EUR">
<input type="hidden" id="" name="txn_id" value="<?php echo $tid;?>">
<input type="hidden" id="" name="payment_status" value="<?php echo $pstatus;?>">
<input type="hidden" id="" name="sella_reply" value="<?php echo $op_result;?>">
</form>

e la pagina che comunica l'esito "fine.php"

<?php
echo $_POST["payment_date"]."<br>";
echo $_POST["txn_type"]."<br>";
echo $_POST["mc_currency"]."<br>";
echo $_POST["txn_id"]."<br>";
echo $_POST["payment_status"]."<br>";
echo $_POST["sella_reply"]."<br>";
?>

Obiettivo
In questo articolo tratteremo come proteggere i moduli con la chiave di sicurezza

Articolo
Spesso puo' capitare che qualche programma o sito esterno possano inserire dei dati nel nostro database tramite un
nostro modulo sfruttando l'invio di dati post. La pagina che processa i dati del modulo,
come fa a distinguere in quale sito si trova il modulo che sta inviando i dati. Potremmo mettere in questa pagina qualche
controllo sull'indirizzo ip della pagina che effettua l'invio oppure possiamo creare una immagine che mostra mostra dei
numeri che possono vedere solo coloro che rempiono i campi nel nostro modulo e non pagine esterne. La cosiddetta chiave di sicurezza.
Per implementare questo meccanismo, il nostro server deve supportare le librerie grafiche gd. La funzione che scrive un
testo in un'immagine e' la funzione

imagestring(identificare_img,dim_font,x_inziale,y_iniziale,testo,identificare_colore);

Nella pagina in cui vogliamo vedere l'immagine mettiamo:

<?php
$numgen=random();
print "<img border='1' src='prova.php?numero=$numgen'>";

function random(){
$numeri=array("a","b","c","d","e","f","g","h","i","1","2","3","4","5","l","m","n","o","p",
"q","r","s","t","u","v","z","w","x","k","j","y","6","7","8","9","0");
$pass="";
for($i=0;$i<=8;$i++){
$indice=rand(0,35);
$pass=$pass.$numeri[$indice];
}

$pas=crypt($pass);
$pas=substr($pass,0,5);
return $pas;
}
?>

La pagina prova.php che genera l'immagine è la seguente:

<?php
// Set the content-type
header("Content-type: image/png");
// Create the image
$im = imagecreate(80, 30);
$text=$_GET['numero'];
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
// The text to draw
$text = random();
// Replace path by your own font path
imagestring($im, 10, 0, 10, $text,$black );
// Using imagepng()
imagepng($im);
imagedestroy($im);
?>
<?

?>

nella pagina in cui mettiamo l'immagine, metteremo tutti campi del form, supponiamo di voler mettere il campo "note". Il
nostro form sara' composto allora da due campi, in uno mettiamo il numero visto nell'immagine mentre nell'altro le note.

<form action="leggi.php?numero=$numgen" method="post">
<input type="text" name="numeroinserito">
<input type="text" name="note">
</form>

la pagina che leggera i dati "leggi.php" controllera' se il campo "numeroinserito" e' uguale alla variabile GET "numero".

<?
if($_GET['numero']==$_POST['numeroinserito']) {
//procedi
}
?>

Obiettivo
In questo articolo tratteremo come conoscere se una richiesta è fatta da una pagina sotto ssl

<?
if ('on' == $_SERVER['HTTPS']) {
print "Sicuro";
} else {
print "Non sicuro";
}
?>

Obiettivo
In questo articolo tratteremo come conoscere se una stringa è un numero

Ls funzione che ci viene in aiuto è la funzione is_numeric() che ci restituisce un valore true
se la stringa è un numero altrimenti false.

<?
if (is_numeric('cinque')) { /* false */ }
if (is_numeric(5)) { /* true */ }
if (is_numeric('5')) { /* true */ }
if (is_numeric(-5)) { /* true */ }
if (is_numeric('-5')) { /* true */
?>

30
04

Inviare una semplice email con php

posted di Administrator, in php, tutorials. No Commenti

Obiettivo
In questo articolo tratteremo come inviare una email in php.

Inviare una email
Per inviare una email in php, usiamo la funzione mail(...).
La sintassi di questa funzione e':

bool mail(string destinatario, string oggetto, string messaggio, string additional_headers).

Supponiamo di voler inviare una email a pippo@pippo.it mettendo come oggetto "ciao" e come messaggio "un saluto" .
Il codice e':

<?
mail("pippo@pippo.it","ciao","un saluto");
?>

se i destinatari sono piu' di uno, occorre solamente separali da una virgola

<?
mail("pippo@pippo.it, mario@pippo.it","ciao","un saluto");
?>

E' possibile inserire il mittente della email tramite il parametro "additional_headers".
Se il mittente fosse: antonio@hotmail.com allora

$header = "From: antonio <antonio@hotmail.com>\n";
$header .= "Reply-To: antonio <antonio@hotmail.com>\n";
$header .= "X-Mailer: PHP/" . phpversion() . "\n";
$header .= "X-Priority: 1";

Dove:

From : indica il mittente
Reply-To : l'indirizzo email per la risposta

Ad esempio:

<?
mail("pippo@pippo.it, mario@pippo.it","ciao","un saluto",$header);
?>

30
04

Usare le api di google con php

posted di Administrator, in php, tutorials. No Commenti

Obiettivo
In questo articolo vedremo come sia possibile mettere le il motore di ricerca di gooogle nel nostro sito.

Limitazioni
Abbiamo solo due limitazioni: non deve essere per fini commerciali e possiamo fare al massimo 1000 ricerche al giorno.

La chiave da google
Per poter usufruire delle API di google dobbiamo registrarci al sito di google e ottenere una chiave che ci servirà per le ricerche.
La procedura e' facile e veloce e soprattutto gratuita.L'indirizzo e':

http://api.google.com/createkey

La libreria opensource Nusoap
una volta ottenuta la chiave dobbiamo scaricare la libreria che ci servirà per comunicare tramite soap
con il motore di ricerca di google. Questa libreria opensource chiamata nusoap è disponibile all'indirizzo
http://dietrich.ganx4.com/nusoap/

Articolo
Appena abbiamo finito il download, vediamo cosa fare per utilizzare il tutto. Innanzitutto occorre mettere il file
"nusoap.php" che abbiamo scaricato in precedenza, nella stessa directory in cui metteremo lo script di ricerca.
Per utilizzare la libreria occorre richiamarla includendola nel nostro script:

include 'nusoap.php';

dopodiche' dobbiamo istanziare un oggetto della classe "soapclient".

$soapclient = new soapclient("http://api.google.com/GoogleSearch.wsdl","wsdl");

preparare il messaggio xml da inviare al web service di google impostando i vari parametri

$params = array('key' => 'qui la chiave ottenuta da google',
'q' => '$query',
'start' => 0,
'maxResults' => 100, //numero massimo di risultati
'filter' => false,
'restrict' => '',
'safeSearch' => false,
'lr' => '',
'ie' => '',
'oe' => ''
);

madare effettivamente il messaggio e ricevere come risposta un array di risultati

$result = $soapclient->call("doGoogleSearch", $params);

infatti

$result['estimatedTotalResultsCount']

contiene il numero di risultati trovati mentre

$result['resultElements']

e' un array associativo che contiene titolo,descrizione e link dei risultati

<?php
include 'nusoap.php';

$query=$_POST['query']; //query proveniente da un form

$soapclient = new soapclient("http://api.google.com/GoogleSearch.wsdl","wsdl");
$params = array('key' => 'qui la chiave ottenuta da google',
'q' => '$query',
'start' => 0,
'maxResults' => 100, //numero massimo di risultati
'filter' => false,
'restrict' => '',
'safeSearch' => false,
'lr' => '',
'ie' => '',
'oe' => ''
);

$result = $soapclient->call("doGoogleSearch", $params);
if($result['estimatedTotalResultsCount'] > 0){
echo "Ci sono {$result['estimatedTotalResultsCount']} risultati<br>";
foreach($result['resultElements'] as $v){
$title = $v['title'];
$url = $v['URL'];
$snippet = $v['snippet'];
echo "<a href=\"{$url}\">{$title}</a><br>{$snippet}<br>";
}
}
else{
echo "nessun risultato";
}
?>

Obiettivo
In questo articolo tratteremo come copiare, cancellare e rinominare un file.

Copiare un file

Per copiare un file dobbiamo usare la funzione copy():

int copy(string source, string destination);

Questo copia il file indicato nel primo parametro source nel secondo file destination. Se l'operazione ha sucesso ritorna true altrimenti false.
Se ad esempio per salvare una copia di backup di un file nella directory /temp/ dalla directory corrente dobbiamo fare:

$filename = "text.txt";
copy($filename, "../temp/" . $filename); //Copia in /temp/text.txt

Cancellare un file

Per cancellare un file in modo definitivo, usiamo la funzione unlink():

int unlink(string filename);

Questo cancella il file e ritorna true in caso di successo altrimenti false

Rinominare un file

Per rinominare un file, usiamo la funzione rename():

int rename(string oldname, string newname);

Questo cambia il nome del file oldname nel nuovo nuovo newname.

LA funzione ritorna true in caso di successo altrimenti false

30
04

Lavorare con le directory in php

posted di Administrator, in php, tutorials. No Commenti

Come per i file, in php possiamo manipolare le directory. La funzione piu' semplice, e' la funzione chdir(), che setta la directory corrente:

int chdir(string directory);

Questa funzione specifica la corrente directory, di default la directory corrente e' ad esempio "/apache/htdocs".

Per aprire una directory, dobbiamo utilizzare la funzione

int opendir(string path);

che apre la directory specificata nell'argomento e ritorna un "directory handle". E' un intero che e' usato come riferimento per riferirsi a questa directory appena aperta.
Per riferirci alla directory corrente possiamo usare la stringa "." mentre la stringa ".." per la directory genitore.
Per esempio

chdir("/temp");
$dir = opendir(".");

Per leggere il contenuto della directory occorre usare

string readdir(int dir_handle);

Che ritorna il nome della directory. L'unico parametro da passare e' directory handle che e' ritornato da opendir().
Se non c'e' niente in directory, o se la directory handle non e' valida , la funzione ritornera' false. Possiamo usare la funzione while() per iterare tutti gli elementi della directory finche non viene restituito false:

chdir("/temp");
$dir = opendir("..");
while ($file=readdir($dir)) {
echo("$file
");
}

Appena abbiamo finito con la directory, possiamo chiudere e liberare le risorse:

void closedir(int dir_handle);

E mettendo anche qui la directory handle come parametro.

Adding and Deleting Directories

Come per i file, anche le directory possono essere aggiunte e cancellare. Per creare una nuova directory, noi usiamo la funzione mkdir():

int mkdir(string pathname, int mode);

Il primo dei due parametro e' il percorso della directory creata; il secondo specifica I permessi di accessi per una directory unix mentre questo parametro e' ignorato in windows, normalmente viene usato "0700". La funzione ritorna true se ha avuto successo, altrimenti false.:

<?
if (mkdir("/temp/new", 0700)) {
echo("Directory creata!");
} else {
echo("Non posso creare la directory!");
}
?>

Supponendo di avere I permessi corretti, possiamo cancellare una directory tramite la funzione rmdir():

int rmdir(string dirname);

Lavora solo se la directory e' vuota.

30
04

Creare un file rss dinamico con php

posted di Administrator, in php, tutorials. No Commenti

Obiettivo
In questo articolo vedremo come creare un file rss dinamico che legge i contenuti da un database mysql.

Articolo
In un articolo precedente, abbiamo visto cosa e' un file rss e le sue componenti principali, adesso vediamo come
costruirne uno in modo dinamico.
Innanzitutto partiamo dal database. Supponiamo di avere una tabella "articoli" cosi strutturata:

CREATE TABLE `articoli` (
`id` int(11) NOT NULL auto_increment,
`titolo` varchar(100) NOT NULL default '',
`link` varchar(200) NOT NULL default '',
`autore` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

Quello che vogliamo far vedere a un lettore di file rss , sono gli ultimi 10 articoli pubblicati. Cominciamo col
nostro script:

header("Content-disposition: filename=index.xml");
header("Content-type: application/octetstream");
header("Pragma: no-cache");
header("Expires: 0");

Impostiamo il tipo del documento che e' di tipo xml.

$sito="http://www.sastgroup.com";
$email="sandro@sastgroup.com";

impostiamo le variabili da utilizzare

echo"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
echo"<rss version=\"0.92\">";
echo"<channel>";
echo"<title>$sito Rss Generator by sastgroup.com</title>";
echo"<description>Contenuti del sito</description>";
echo"<link>$sito</link>";
echo"<language>it</language>";
echo"<copyright>Sandro Stracuzzi 2004</copyright>";
echo"<managingEditor>$email</managingEditor>";

echo"<item>";
echo"<title>Ultimi 10 articoli</title>";
echo"vdescription>";
echo"<![CDATA[";
echo"Ultimi 10 articoli<br>";

connessione_al_db();
$dati=mysql_query("select * from articoli order by id desc limit 10");
while($array=mysql_fetch_array($dati)){
echo"$array[titolo]</br>";
}

echo"]]>";
echo"</description>";
echo"<link>$sito</link>";
echo"<author>$email</author>";
echo"<category>Articoli di $sito</category>";
//echo"<pubDate>$data</pubDate>";
echo"</item>";

echo"</channel>";
echo"</rss>";

e creiamo lo script:

<?
header("Content-disposition: filename=index.xml");
header("Content-type: application/octetstream");
header("Pragma: no-cache");
header("Expires: 0");

$sito="http://www.sastgroup.com";
$email="sandro@sastgroup.com";

echo"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
echo"<rss version=\"0.92\">";
echo"<channel>";
echo"<title>$sito Rss Generator by sastgroup.com</title>";
echo"<description>Contenuti del sito</description>";
echo"<link>$sito</link>";
echo"<language>it</language>";
echo"<copyright>Sandro Stracuzzi 2004</copyright>";
echo"<managingEditor>$email</managingEditor>";

echo"<item>";
echo"<title>Ultimi 10 articoli</title>";
echo"vdescription>";
echo"<![CDATA[";
echo"Ultimi 10 articoli<br>";

connessione_al_db();
$dati=mysql_query("select * from articoli order by id desc limit 10");
while($array=mysql_fetch_array($dati)){
echo"$array[titolo]</br>";
}

echo"]]>";
echo"</description>";
echo"<link>$sito</link>";
echo"<author>$email</author>";
echo"<category>Articoli di $sito</category>";
//echo"<pubDate>$data</pubDate>";
echo"</item>";

echo"</channel>";
echo"</rss>";
?>

web tracker