Autor Zpráva
donjirka
Profil
Zdravím všechny, prosím o pomoc s jedním javascriptem. Jedná se o program který posílá SMS přes t-mobile, jmenuje se t-mobile SMS brána a potřeboval bych předvyplnit telefonní čísla do formuláře, tak aby se při načtení stránky ve formuláři objevili čísla např. ze souboru seznam.txt. Potřebuji to zrovna takhle protože budu občas nějaké číslo přidávat nebo mazat a nerad bych to dělal přímo v html kódu. Doufám že jsem to napsal alespoň trochu srozumitelně.celý program vypadá takto


kód vypadá takto:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>T-Mobile</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<link href="global.css" rel="stylesheet" type="text/css">
<script language="javascript">

var validPrefixes = Array();
// The following line may also be used:
// var validPrefixes = Array("+420603", "603");

function replaceSubStr(str, oldSub, newSub)
{
if(str == null)return "";
var ret = str;
for(;;)
{
var i = ret.indexOf(oldSub);
if(i == -1)break;
ret = ret.substring(0, i) + newSub + ret.substring(i + oldSub.length);
}
return ret;
}

function splitStr(str, sep)
{
var ret = new Array();
var i = 0, istart = 0, iend;
for(;;)
{
iend = str.indexOf(sep, istart);
ret[i++] = (iend == -1) ? str.substring(istart) : str.substring(istart, iend);
if(iend == -1)break;
istart = iend + sep.length;
}
return ret;
}

function parseQueryString(str)
{
str = str ? str : location.search;
var query = str.charAt(0) == '?' ? str.substring(1) : str;
var args = new Object();
if(query)
{
var fields = splitStr(query, '&');
for(var f = 0; f < fields.length; f++)
{
var field = splitStr(fields[f], '=');
var str_idx = unescape(replaceSubStr(field[0], '+', ' '));
if(args[str_idx] == null)args[str_idx] = new Array();
var int_idx = args[str_idx].length;
args[str_idx][int_idx] = unescape(replaceSubStr(field[1], '+', ' '));
}
}
return args;
}

function FillForm()
{
var numbers = "";

var args = parseQueryString();
for(var arg in args)
{
if(arg.toLowerCase() == "da")
{
for(var i = 0; i < args[arg].length; i++)
{
if(numbers.length > 0)numbers += ',';
numbers += args[arg][i];
}
}
else
if(arg.toLowerCase() == "ondisp")document.forms[0].OnDisp.selectedIndex = (args[arg][0] != 0) ? 1 : 0;
else
if(arg.toLowerCase() == "mailto")document.forms[0].MailTo.value = args[arg][0];
}

document.forms[0].DA.value = numbers;
}

function enc(str)
{
var ret = "";
for(i = 0; i < str.length; i++)
{
if(str.charAt(i) == '\r' && str.charAt(i+1) == '\n')i++
ret += str.charAt(i);
}
ret = escape(ret);

ret = replaceSubStr(ret, "@", "%40");
ret = replaceSubStr(ret, "+", "%2B");
ret = replaceSubStr(ret, "/", "%2F");
return ret;
}

function ValidateNumber(number)
{
if(number == null)return false;
var i = 0;
if(number.charAt(i) == '+')i++;
if(i >= number.length)return false;
for(; i < number.length; i++)if(isNaN(parseInt(number.charAt(i))))return false;

if(validPrefixes.length > 0)
{
for(i = 0; i < validPrefixes.length; i++)
{
var s = validPrefixes[i];
if(number.substring(0, s.length) == s)return true;
}
return false;
}

return true;
}

function SendSms()
{
if(document.forms[0].DA.value != "")
{
var addresses = splitStr(document.forms[0].DA.value, ',');

var url = "sendsms.htm?UD=" + enc(document.forms[0].UD.value);
for(var i = 0; i < addresses.length; i++)
{
var str = addresses[i];
if(!ValidateNumber(str))
{
var s = "Řetězec '" + str + "' není platné telefonní číslo. Číslo může obsahovat pouze číslice a jako první znak může obsahovat '+'. Chcete-li odeslat zprávu na více telefonních čísel současně, oddělte je čárkami.";
for(var ipfx = 0; ipfx < validPrefixes.length; ipfx++)
{
if(ipfx == 0)s += "\n\nDále jsou platná pouze čísla začínající na jedno z těchto předčíslí:";
s += "\n" + validPrefixes[ipfx];
}
alert(s);
return;
}
url += "&DA=" + enc(str);
}
if(document.forms[0].OnDisp.selectedIndex == 1)url += "&OnDisp=1";
if(document.forms[0].MailTo.value != "")url += "&MailTo=" + enc(document.forms[0].MailTo.value);
location = url;
}
else alert("Zadejte alespoň jedno telefonní číslo.");
}

var lock = false;
function countit()
{
if (!lock)
{
lock=true;

var slen = (document.forms[0].OnDisp.selectedIndex == 1) ? 160 : 780;

str = document.forms[0].UD.value;
strlength = 0;
for(i = 0; i < str.length; i++, strlength++)if(str.charAt(i) == '\r' && str.charAt(i+1) == '\n')i++
if (strlength > slen)
{
document.forms[0].cntr1.value="!!!";
alert("Text je príliš dlouhý!");
document.forms[0].UD.value=str.substring(0,slen);
}
else document.forms[0].cntr1.value = slen - strlength;

document.forms[0].cntr2.value=strlength;

i = (strlength > 160) ? Math.floor((155+strlength)/156) : 1;
if(i == 0)i = 1;
document.forms[0].cntr3.value = i;

lock=false;
}

}

function cleantext()
{
document.forms[0].UD.value = "";
countit();
document.forms[0].UD.focus();
}

function OnPageLoad()
{
FillForm();
countit();
if(document.forms[0].DA.value == "")document.forms[0].DA.focus();
else { document.forms[0].UD.focus(); document.forms[0].UD.select(); }
}

</script>
</head>
<body bgcolor="#ffffff" onload="OnPageLoad()" alink="#ff0066" vlink="#ff0066" link="#ff0066" rightmargin="0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,255)">
<form>
<div align="center"><img src="odeslani_sms.gif" width="170" height="23">
<br>
<br>
<table width="450" border="0" cellspacing="0" cellpadding="5" bgcolor="#e7e7e7">
<tbody>
<tr>
<td>
<table cellspacing="0" width="100%">
<tbody>
<tr>
</tr>
<tr>
<td align="left" width="130"><b><font face="Arial, Helvetica, sans-serif">&nbsp;Telefonní
čísla:</font></b></td>
<td><font face="Arial, Helvetica, sans-serif"> <input name="DA" size="20"> </font>
</td>
<td bgcolor="#cccccc"><font face="Arial, Helvetica, sans-serif">&nbsp;Zbývá ještě:</font></td>
<td bgcolor="#cccccc">
<font face="Arial, Helvetica, sans-serif"><input name="cntr1" value="?" readonly size="3">
znaků. </font>
</td>
</tr>
<tr>
<td align="left" width="130"><b><font face="Arial, Helvetica, sans-serif">&nbsp;Doručenku
na e-mail:&nbsp;</font></b></td>
<td><font face="Arial, Helvetica, sans-serif"> <input name="MailTo" size="20"> </font>
</td>
<td bgcolor="#cccccc"><font face="Arial, Helvetica, sans-serif">&nbsp;Napsáno je:</font></td>
<td bgcolor="#cccccc">
<font face="Arial, Helvetica, sans-serif"><input name="cntr2" value="?" readonly size="3">
znaků. </font>
</td>
</tr>
<tr>
<td align="left" width="130"><b><font face="Arial, Helvetica, sans-serif">&nbsp;Zprávu
zaslat:</font></b></td>
<td><font face="Arial, Helvetica, sans-serif">
<select name="OnDisp" onchange="countit()">
<option value="1" selected>normálně
</option>
<option value="2">jen na display
</option>
</select>
</font>
</td>
<td bgcolor="#cccccc"><font face="Arial, Helvetica, sans-serif">&nbsp;Použito: </font>
</td>
<td bgcolor="#cccccc"><font face="Arial, Helvetica, sans-serif"> <input name="cntr3
Darker
Profil
Pokud chceš načítat data ze souboru do PHP skriptu, použij funkci file_get_contents().
Pro rozdělení dat v souboru na celky můžeš použít použit funkci explode().
Pokud tedy chceš na určité místo pouze vypsat obsah souboru, stačí prosté řešení:
<div id="seznam_cisel">
<?php 
 echo nl2br(file_get_contents("seznam.txt"));
?>
</div> 

Soubor by vypadal takhle:
473 012 604
800 666 666
314 159 265
donjirka
Profil
Darker:
díky vyzkouším
donjirka
Profil
Darker:
Tak jsem to vyzkoušel a ten program T-mobile brána vytváří web server ale bez podpory PHP :-/. Musím ještě vyzkoušet rozjet ten webserver přes IIS nebo Apache a možná že by to šlo protože to jen zachytává příkaz na port přes adresní řádek. Docela se divím že t-mobile prodává službu na posílání firemních SMS a je to takové dodělej si sám... Mám velikou chuť jim to hodit na hlavu.
Medvídek
Profil
donjirka:
SMS connect od T-Mobilu máme ve firmě a je lepší odesílat SMS přes API. Tam si mužeš dovolit prakticky cokoliv.
donjirka
Profil
Medvídek:
Jak to myslíš? Nevím co je API.
nakonec jsem to vyřešil takhle přidal jsem další formulář kde si člověk může nadefinovat skupiny čísel oddělené čárkou. Videl jsem javascript poprvé a jsem z toho tak trochu jelen ale řekl bych že se to povedlo protože to funguje celkem dobře.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: