WhatIsTheMatrix.IT – Il Sito Italiano su Matrix

WhatIsTheMatrix.IT – Il Sito Italiano su Matrix

WhatIsTheMatrix.IT – Il Sito Italiano su Matrix

Home // Forum

Forum breadcrumbs - Sei qui:ForumZION: CavernaProgrammazione
o Registrati per creare messaggi e topic.

Programmazione

[INTRO]
Allora il PHP come altri linguaggi di programmazione ha delle impostazioni. REGISTER_GLOBALS è una di queste.
Ogni pagina PHP (ad esempio prova.php) può ricevere dei "parametri" (cioè delle informazioni), ad esempio, potrei chiamare dal browser "prova.php'nome=dambala" passando in questo modo al programma prova.php una variabile (parametro o informazione) chiamata nome che "vale" dambala.
A questo punto il programma potrebbe visualizzare il mio nome dato che lo possiede tra i suoi dati.
Se REGISTER_GLOBALS è attivo ogni parametro che passiamo al PHP, viene AUTOMATICAMENTE reso disponibile al programma. Se invece è disattivo le informazioni passate il programma se le deve "cercare".
Il problema di Draco (da quello che ho capito) consiste nel fatto che lui ha sempre fatto assunzione che queste variabili gli vengano passate in automatico, e quando questo non avviene si trova nei guai.
[/INTRO]

Un metodo che uso è quello di prelevare SEMPRE le variabili "a mano", senza affidarmi all'automatismo.
[code:1:4612483d03]// Legge un parametro dello script
function getParam($name){
if(array_key_exists($name,$_REQUEST))
return $_REQUEST[$name];
if($_POST[$name]!="")
return $_POST[$name];

return "";
}

// Si può usare così
$nome=getParam("nome");
[/code:1:4612483d03]

La variabile viene prelevata sia dall'URL che dalle variabili postate.
Se questa non esiste viene ritornata una stringa vuota.

A me funziona sempre.

Vediamo se ho capito, nella prima parte del codice richiami le variabili, nella seconda parte le imposti.

Quindi dovrei usare questo procedimento ogni volta che ho a che fare con delle variabili' (anche se generate e richiamate nella stessa pagina)

Una volta che hai definito la funzione getParam() da qualche parte nel codice (magari in un libreria), la devi richiamare così:

$nome_var1=getParam("nome_variabile1");
$nome_var2=getParam("nome_variabile2");
...
$nome_varN=getParam("nome_variabileN");

Per OGNI variabile che ti arriva da un altro script.
Ovviamente i nomi delle varibili li puoi modificare 😀
In pratica definisci solo la variabile, da quel punto in poi la puoi usare come fosse una qualunque altra variabile definita da te.
Per le variabili locali che invece crei e usi tu normalmente, non devi fare nulla.

Chiaro! :ok:

Ovviamente i nomi delle varibili li puoi modificare 😀

Ho capito che sono pivello...ma così tanto no 😉

Grazie dambala per la spiegazione e l'esempio della gallery!
Appena ho fatto...ti mando il link della pagina web, così potrai vedere il risultato della tua cortesia!!! :ok:

il vb è il 6.0 professional.

ES:

creo un file di testo ciao.txt con scritto auguri. ora lo rinomino dsd.DSD (ovvero l'unica estensione che il filtro del mio program, mi fa leggere)

Quando avvio il programma e clicco apri (dalla barra creata con vb) mi compare la finestra di dialogo apri. quando io apro il documento voglio far vedere il un text box quanto scritto nel file ciao.DSD ovvero auguri, , mi indica solo la path C:|windows...ciao.DSD

Ora credo di aver capito quale è il problema.
In pratica tu assegni al testo del TextBox il nome del file e non il suo contenuto.
Per ottenere il contenuto del file, lo devi aprire e leggerlo...

Ecco il tuo codice leggermente modificato:
[code:1:77ec3f8ae3]Private Sub Command1_Click()

With dlgCommonDialog
.DialogTitle = "Apri"
.CancelError = False
'Da fare: impostare i flag e gli attributi del controllo CommonDialog.

.Filter = "Dark Side Documents (*.DSD) |*.DSD|"
.ShowOpen
'Text6.Text =.FileName

If Len(.FileName) = 0 Then
Exit Sub
End If
sFile =.FileName
End With
'Da fare: aggiàngere il codice per l'elaborazione del file aperto.
'If DSD = sFile Then

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile(sFile)
Text6.Text = a.ReadAll
a.Close

'Text6.Text = sFile
'End If
End Sub
[/code:1:77ec3f8ae3]

In pratica non assegno a Text6 nulla finché il file non è stato letto.
Il file viene aperto e letto tutto in una volta (readAll).
Spero sia la soluzione che cercavi :ok:

Dunque dunque...
Ho un piccolo problema sempre con php.

Mettiamo di realizzare una serie di pagine che permettono una registrazione utente mediante database mysql. Ho alcune difficoltà ad impedire che un nuovo utente si registri con un username già esistente. La soluzione che ho trovato per ora è questa, ma non è efficace nel caso si usino medesimi username con maiuscole e minuscole in ordini diversi:

<'
//richiamo gli username uguali all'username inserito dal nuovo utente

$verifica= "SELECT username, email FROM utenti WHERE username LIKE '$usernamè OR email LIKE '$email'";
$query1= mysql_query($verifica, $conn);
$lista= mysql_fetch_array($query1);
$nome= $lista['usernamè];
$newmail= $lista['email'];

//impedendo la registrazione
}
elseif( $nome==$username ){
echo"Esiste già un utente con questo username!
<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}
elseif( $newmail==$email ){
echo"Questa mail è già stata registrata da un altro utente!
<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}

Il systema me lo sono inventato al momento, di certo ci sarà un modo migliore per ottenere un risoltato più efficente :'

Inoltre volevo sapere come impedire la registrazione di dati che non hanno almeno un determinato numero di caratteri.

Chiedo aiuto insistentemente 😉 e magari un parere sulle compilazioni che faccio, visto che mi sembrano un gran casino :mrgreen:

Per quanto riguarda le maiuscole/minuscole, se per te "Dambala" e "dambalA" sono lo stesso utente, ti basta convertire tutti gli username inseriti nel DB in minuscole. Devi convertire anche lo username con cui qualcuno sta tentando di registrarsi con la funzione:

[code:1:78ec6ce879]$username_minuscolo=strtolower($username);[/code:1:78ec6ce879]

Lo script che hai scritto tu, non credo dia problemi di efficienza con un numero di utenti inferiori ai 100/200.
Da quello che ricordo dall'esame di "Basi di dati", mi pare che fare una query su 1000 (diciamo) tuple (record) per richiedere un'array sia molto più pesante che non farsi dire semplicemente se esiste un record con un campo pari a quello che cerchi.
Inoltre la funzione LIKE è pesantina, quindi se la possiamo evitare è meglio.
Io farei così (non è il metodo migliore in assoluto):

[code:1:78ec6ce879]$lunghezza_minima_username=5;

$utenti=sql_num_rows(sql_query("SELECT * FROM utenti WHERE username='$usernamè"));
if( $utenti>0 ){
echo"Esiste già un utente con questo username!".
"<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
} else {
$email=sql_num_rows(sql_query("SELECT * FROM utenti WHERE email='$email'"));
if( $email>0 ){
echo"Questa mail è già stata registrata da un altro utente!".
"<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}
} else {
if(strlen($username)<$lunghezza_minima_username){
echo"Il nome utente deve essere lungo almeno $lunghezza_minima_username caratteri!".
"<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}
}
[/code:1:78ec6ce879]

Prima di farti dare l'array risultato della query, chiedi subito quante siani i record risultanti. In questo modo eviti al DBMS di dover copiare tutti i record in memoria, ed eviti di far cercare al php nell'array (es. $email["prova"]).

Tieni presente che non l'ho testato ed attualmente non ho script simili, quindi me lo sono un pò inventato.

Perfetto, ho fatto un pò diversamente da come mi hai indicato, ma i controllo di stringa mi sono tornati molto utili.

Non ho capito bene il systema che hai usato per verificare i dati già esistenti nel database, num rows dovrebbe restituire il numero complessivo di righe nella tabella no' Sinceramente solo ora mi accorgo che il like non serviva a nulla 😉 bastava cercare una semplice uguaglianza 😳

$verifica= "SELECT username, email FROM utenti WHERE username = '$usernamè OR email = '$email'";
$query1= mysql_query($verifica, $conn);
$lista= mysql_fetch_array($query1);
$listuser= strtolower($lista['usernamè]);
$listmail= strtolower($lista['email']);
$newuser= strtolower($username);
$newmail= strtolower($email);

}
elseif( $listuser==$newuser ){
echo"Esiste già un utente con questo username!
<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}
elseif( $listmail==$newmail ){
echo"Questa mail è già stata registrata da un altro utente!
<meta http-equiv=refresh content=3;url="main.php'name=iscrizione1">";
}
elseif( strlen($username)<4 OR strlen($password)<4 ){
echo"Username e Password devono essere composti da almeno 4 caratteri.";
}

Così sembra che tutto funzioni a meraviglia, a dir la verità non ho capito bene come tratta le uguaglianze, perchè dal db lui preleva un "username" considerandolo uguale a "Username", ma poi li vede diversi se li paragono direttamente tra loro :-_-:
EDIT: Provo a rispondermi dasolo, dimmi se sbaglio, nel prelevare i dati dal database io uso "=" mentre nel confrontarli uso "==", c'entra qualcosa'

Ah...grazie infinite per l'aiuto 😉

All "Matrix" related material is property of Village Roadshow Film Ltd. and Warner Bros. - a Time Warner Entertainment company
PHP Code Snippets Powered By : XYZScripts.com