aiuto per database javascript

horusbird

Nuovo Utente
6 Ott 2005
5
0
0
Salve, ho trovato in rete un javascript che gestisce un semplice database, adesso vorrei fare una modifica in quanto vorrei che il form non accettasse valori composti da meno di 13cifre. Mi date una mano?
Adesso se non inserisco nessun valore mi rstituisce l'intero database cosa che non vorrei.
Grazie Mille


<script language="javascript">

var tutti = "_and"
var alcuni = "_or"
var tipo_ricerca = ""
var s = 0
var o = 5
var copia_risultati = new Array()
var doc = parent.frames[1].document

function filtro (query) {
if (query.charAt(0) == "+")
{
query = query.substring (1, query.length)
tipo_ricerca = tutti
}
else
{
tipo_ricerca = alcuni
}
while (query.charAt(0) == " ") query = query.substring(1, query.length)
document.forms[0]._query.value = query
while (query.charAt(query.length - 1) == " ") query = query.substring(0, query.length - 1)
document.forms[0]._query.value = query
formatta_stringa (query)
}

function formatta_stringa (query) {
var stringa_formata = query.split (" ")
if (tipo_ricerca == "_or")
cerca_or (stringa_formata)
else
cerca_and (stringa_formata)

}

function cerca_or (stringa_formata) {
var matrix = new Array()
for (i = 0; i < db.length; i++)
{
var stringaConfronto = db.toUpperCase()
var stringaUtile = stringaConfronto.substring(0,stringaConfronto.indexOf("|"))

for (j = 0; j < stringa_formata.length; j++)
{
var stringaUtente = stringa_formata[j].toUpperCase()
if (stringaUtile.indexOf(stringaUtente) != -1)
{
matrix[matrix.length] = db
break
}
}
}
verifica(matrix)
}

function cerca_and (stringa_formata) {
var matrix = new Array()
for (i = 03; i < db.length; i++)
{
var coincidenza = true
var stringaConfronto = db.toUpperCase()
var stringaUtile = stringaConfronto.substring(0,stringaConfronto.indexOf("|"))

for (j = 0; j < stringa_formata.length; j++)
{
var stringaUtente = stringa_formata[j].toUpperCase()
if (stringaUtile.indexOf(stringaUtente) == -1)
coincidenza = false
}
if (coincidenza)
matrix[matrix.length] = db
}
verifica(matrix)
}

function verifica (matrix) {
if (matrix.length == 0)
{
doc.open()
doc.write('<html><head></head><body bgcolor="white"><hr size="1" noshade>')
doc.write('<font face="Verdana, Arial, sans" size="3"><div align="center">Spiacente, non ho trovato elementi corrispondenti</div></font><hr size="1" noshade></body></html>')
doc.close()
}
else
{
array_risultati = matrix.sort()
stampa_risultati(array_risultati, s, o)
}
}

function stampa_risultati(array_risultati, s, o) {
var limite = (array_risultati.length < s + o) ? array_risultati.length : (s + o)
doc.open()
doc.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><base TARGET="_new"></head><body bgcolor="white">' + '<table width="90%" border="0">' + '<tr><td><hr size="1" noshade><tr><td><font face="Verdana, Arial, sans" size="2"><b>Chiave di ricerca: ' + '<i>' + parent.frames[0].document.forms[0]._query.value + '</i>' + '<br>Risultati:' + '<i>' + ' da ' + (s + 1) + ' a ' + limite + ' di ' + array_risultati.length + '</i></font>' + '</b><hr size="1" noshade>')
for (i = s; i < limite; i++)
{
var splitta = array_risultati.split("|")
doc.write('<tr><td><dl><font face="Verdana, Arial, sans" size="2">' + splitta[0].link(splitta[2]) + '&nbsp;&nbsp;<i>' + splitta[1] + '</i></font>')
}
doc.write('</table>')
visualizza_pulsanti (array_risultati, s, o)
doc.write('</body></html>')
doc.close()
}

function visualizza_pulsanti(array_risultati, s, o) {
doc.write('<form><div align="center">')
if (s + o < array_risultati.length)
{
doc.write('<input type="button" value="successivi" onClick="parent.frames[0].stampa_risultati(parent.frames[0].array_risultati, ' + (s + o) + ', ' + o + ')">')
}
if (s > 0)
{
doc.write('<input type="button" value="precedenti" onClick="parent.frames[0].stampa_risultati(parent.frames[0].array_risultati, ' + (s - o) + ', ' + o + ')">')
}
doc.write('</div></form>')
}

</script>

</head>
<body bgcolor="white">
<basefont face="Arial, Verdana, sans" size="2">

<form name ="cerca" onSubmit="filtro(document.forms[0].elements[0].value); return false">





<div align="center">
<table width="500" border="0">
<tr>
<td width="442"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">CERCA
NEL NOSTRO DATABASE</font><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">&nbsp;</font><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<input type="text" name="_query" ddv-minlength=”5” size="30">
</font></td>
<td width="50">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="help.html" target="bot">HELP</a></font></div>
</td>
</tr>
</table>

</div>
</form>
 
Prova così: ;)

Nella function filtro aggiungi la parte in blu:

...
function filtro (query) {
var verifica_lunghezza;
verifica_lunghezza = query.value;

if (query.charAt(0) == "+")
{
query = query.substring (1, query.length)
tipo_ricerca = tutti
}
else
{
tipo_ricerca = alcuni
}
while (query.charAt(0) == " ") query = query.substring(1, query.length)
document.forms[0]._query.value = query
while (query.charAt(query.length - 1) == " ") query = query.substring(0, query.length - 1)
document.forms[0]._query.value = query
if (verifica_lunghezza.length<13) {window.alert('Devi inserire almeno 13 caratteri');}
else
{
formatta_stringa (query);}
}
...
...


Se hai problemi fammi sapere! :fonzie:

SaLuT!
:byebye:
 
purtroppo non funziona, non da nessun errore, semplicemente se metto qualsiasi valore resta li senza alert e senza andare avanti...
 
Davvero strano... :confused:

Prova a guardare nella status bar dopo aver cliccato, se c'è un errore di scripting ti apparirà a sinistra un triangolo giallo col punto esclamativo.
Cliccalo, ti si aprirà la finestra di errore con la descrizione di quest'ultimo. ;)

Ascolta, ora devo andare a pranzo, se nessun'altro nel frattempo ti aiuta appena ho tempo torno da te! :fonzie:

:byebye:
 
In realta' appare un errore che poi pero' scompare immediatamente, credo dipenda dal fatto che i risultati del form visualizzano i dati in un frame diverso da quello in cui e' il form.
Ho provato a lanciare solo il frame in cui e' presente il form e il javascript e l'errore visualizzato e':

riga 13

'parent.frames.1.document' e' nullo o non e' un oggetto

nella riga 13 appunto c'e' la definizione della variabile:

var doc = parent.frames[1].document

ma non capisco perche' senza la tua modifica funziona bene e con la modifica no... :(
 
Ti da quell'errore perchè è strutturato per lavorare coi frames, non puoi aprirlo da solo! ;)

Ascolta, fai così, postami il link da cui hai scaricato lo script, così vado a darci un'occhiata per intero e vediamo di metterlo a posto come vogliamo noi! :fonzie:
 
Ultima modifica:
Grazie sei gentilissimo, il file e' a questo indirizzo http://www.javascript.it/scripts.php?STATO=1&cate=Database
ed e' quello che si chiama motore di ricerca client-side

Io in parte l'ho gia modificato poiche' mi serve che faccia la ricerca solo nel primo campo del database (e questo l'ho sistemato) ma soprattutto mi serve che per fare la ricerca io debba inserire nel form il numero esatto di caratteri di cui e' composto il campo altrimenti adesso se non inserisco nulla viene fuori l'elenco di tutto il database e se metto parte del nome trova tutti quelli che hanno quella parte di nome. Tutte cose carine ma che a me creano problemi.
Ho chiesto di fare il controllo sul numero di cifre del campo proprio per evitare tutte quelle ricerche strane che non occorrono.
Spero di essere stato chiaro.. :-)
Grazie
 
Ecco fatto!

Horus, eccoti la soluzione: :cool:

Cancella le righe che ti ho dato prima e aggiungi queste in blu, sempre alla function filtro():

function filtro (query) {
if (query.length<13){window.alert("Ci sono meno di 13 caratteri")}
else
{

if (query.charAt(0) == "+")
{
query = query.substring (1, query.length)
tipo_ricerca = tutti
}
else
{
tipo_ricerca = alcuni
}
while (query.charAt(0) == " ") query = query.substring(1, query.length)
document.forms[0]._query.value = query
while (query.charAt(query.length - 1) == " ") query = query.substring(0, query.length - 1)
document.forms[0]._query.value = query
formatta_stringa (query)
}
}

:byebye:
 

Discussioni simili