目前输入框input输入域名12.abb.cn 他会自动修改为abb.cn 我想输入域名12.abb.cn程序不修改
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎页面-L-admin1.0</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
{include file="head" /}
<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="x-body">
<form class="layui-form" id="form">
<div class="layui-form-item">
<label for="L_email" class="layui-form-label">
<span class="x-red">*</span>授权域名
</label>
<input type="hidden" name="url_id" autocomplete="off" class="layui-input" value="{$url.id}">
<div class="layui-input-inline">
<input type="text" name="url" autocomplete="off" lay-verify="url"
class="layui-input" value="{$url.url}">
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red">*</span>输入顶级域名、如:yhzf.a4ft3q.cn
</div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
</label>
<button class="layui-btn" lay-filter="add" lay-submit="">
提交
</button>
</div>
</form>
</div>
<script>
layui.use(['form','layer'], function(){
$ = layui.jquery;
var form = layui.form
,layer = layui.layer;
//自定义验证规则
form.verify({
url: function(value){
if(value.length < 3){
return '请输入正确的域名';
}
}
});
//监听提交
form.on('submit(add)', function(data){
console.log(data);
//发异步,把数据提交给php
var form = $("#form").serialize();
$.ajax({
url:'{:url("user/index/edit_wchat")}',
type:'post',
data:form,
dataType:'json',
success:function(data){
//console.log(data);
if(data.code == 1){
layer.alert(data.msg, {icon: 6},function () {
// 获得frame索引
var index = parent.layer.getFrameIndex(window.name);
//关闭当前frame
parent.layer.close(index);
//刷新父级页面
parent.location.reload();
});
return false;
}else{
layer.msg(data.msg,{icon:5,time:2000});
}
}
});
return false;
});
});
</script>
</body>
</html>
<?php
namespace app\user\controller;
use app\common\model\Open_user as openus;
use app\common\model\Open_welist as welist;
use app\common\model\Open_daili as daili;
use think\Controller;
use think\facade\Session;
class Index extends Controller
{
public function initialize()
{
if(!Session::get('user')){
return $this->error('未登录','/');
}
}
public function index()
{
return view();
}
public function home()
{
$uid = Session('user');
$user = openus::where('id',$uid)->find();
$daili = daili::get($user['oid']);
//单域名接口列表
$danlist = welist::where(['uid'=>$uid,'type'=>0])->order('id','desc')->paginate(10);
//多域名接口列表
$duolist = welist::where(['uid'=>$uid,'type'=>1])->order('id','desc')->paginate(10);
return view()->assign([
'user'=>$user,
'daili'=>$daili,
'danlist'=>$danlist,
'duolist'=>$duolist
]);
}
//多域名授权开通
public function many_buy()
{
$uid = Session('user');
$money = input('post.money');
$user = openus::where('id',$uid)->find();//查询会员
if($user['money'] < $money){//判断会员金额是否足够
return json(jsoncode(-1,'余额不足,请先充值!'));
}else{
$time = time();
//计算时间
if($money == 108){
$many_lstime = $time+3600*24*30;
}else if($money == 298){
$many_lstime = $time+3600*24*90;
}else{
$many_lstime = $time+3600*24*365;
}
//减去会员余额
$dec = openus::where('id',$uid)->setDec('money',$money);
if($dec){
//修改到期时间和类型为多域名授权
$sql = openus::where('id',$uid)->update([
'many'=>1,
'many_lstime'=>$many_lstime
]);
if($sql){
return json(jsoncode(1,'开通成功'));
}else{
return json(jsoncode(-1,'开通失败'));
}
}
}
}
//多域名添加
public function duourl_buy()
{
$uid = Session('user');
if(strstr(input('post.url'),'http://')==true || strstr(input('post.url'),'https://')==true){
$url = input('post.url');
}else{
$url = 'http://'.input('post.url');
}
$url = gethost($url);
//查询修改的域名是否存在
$isurl = welist::where('url',$url)->find();
if($isurl){
return json(jsoncode(-1,'该域名已存在!'.$url));
}
$money = input('post.money');
$user = openus::where('id',$uid)->find();//查询会员
if($user['many'] != 1){
return json(jsoncode(-1,'无权限,请开通多域名授权'));
}
//计算时间
$time = time();
if($money == 1){
$lstime = $time+3600*24*30;
}else if($money == 2){
$lstime = $time+3600*24*90;
}else if($money == 3){
$lstime = $time+3600*24*365;
}else{
$lstime = $user['many_lstime'];
}
$data = [
'uid'=>$uid,
'oid'=>$user['oid'],
'url'=>$url,
'rotime'=>$time,
'lstime'=>$lstime,
'type'=>1
];
$sql = welist::insert($data);
if($sql){
return json(jsoncode(1,'添加成功'));
}else{
return json(jsoncode(-1,'添加失败'));
}
}
//单域名授权添加
public function danurl_buy()
{
$uid = Session('user');
if(strstr(input('post.url'),'http://')==true || strstr(input('post.url'),'https://')==true){
$url = input('post.url');
}else{
$url = 'http://'.input('post.url');
}
$url = gethost($url);
//查询修改的域名是否存在
$isurl = welist::where('url',$url)->find();
if($isurl){
return json(jsoncode(-1,'该域名已存在!'.$url));
}
$money = input('post.money');
$user = openus::where('id',$uid)->find();//查询会员
if($user['money'] < $money){
return json(jsoncode(-1,'余额不足,请充值!'));
}
$daili = daili::get($user['oid']);
$time = time();
//计算时间
if($money == $daili['dan_yue']){
$lstime = $time+3600*24*30;
}else if($money == $daili['dan_ji']){
$lstime = $time+3600*24*90;
}else if($money == $daili['dan_nian']){
$lstime = $time+3600*24*365;
}
//返还百分比
$money = $money-$money*0.5;
//减去会员余额
$dec = openus::where('id',$uid)->setDec('money',$money);
if($dec){
$data = [
'uid'=>$uid,
'oid'=>$user['oid'],
'url'=>$url,
'rotime'=>$time,
'lstime'=>$lstime
];
$sql = welist::insert($data);
if($sql){
return json(jsoncode(1,'授权成功'));
}else{
return json(jsoncode(-1,'授权失败'));
}
}
}
//接口列表
public function wchat_list()
{
$uid = Session('user');
$user = openus::where('id',$uid)->find();
$list = welist::where('uid',$uid)->paginate(10);
return view()->assign([
'user'=>$user,
'list'=>$list
]);
}
//修改授权
public function edit_wchat()
{
$id = input('id');
if(request()->isPost()){
$url_id = input('post.url_id');
if(strstr(input('post.url'),'http://')==true || strstr(input('post.url'),'https://')==true){
$url = input('post.url');
}else{
$url = 'http://'.input('post.url');
}
$url = gethost($url);
//查询修改的域名是否存在
$isurl = welist::where('url',$url)->find();
if($isurl){
return json(jsoncode(-1,'该域名已存在!'.$url));
}
$sql = welist::where('id',$url_id)->update([
'url'=>$url
]);
if($sql){
return json(jsoncode(1,'修改成功'));
}else{
return json(jsoncode(-1,'修改失败'));
}
}
$url = welist::get($id);
return view()->assign([
'url'=>$url
]);
}
//删除授权
public function wchat_del()
{
if(\request()->isAjax()){
$sql = welist::where('id',input('id'))->delete();
if($sql){
return $this->success('删除成功');
}else{
return $this->error('删除失败');
}
}
}
//续费接口
public function xufei_wchat()
{
$id = input('id');
//查询当前接口信息
$url = welist::get($id);
//查询所属代理
$daili = daili::get($url['oid']);
if(request()->isPost()){
$url_id = input('post.url_id');
$money = input('post.money');
//查询该接口信息
$geturl = welist::get($url_id);
//查询会员信息
$user = openus::where('id',$geturl['uid'])->find();
//判断金额是否足够续费
if($user['money'] < $money){
return json(jsoncode(-1,'余额不足,请充值!'));
}
//计算时间,判断续费时间是否是过期后续费的
$datetime = time();
//如果续费的时候该接口还没有过期
if($geturl['lstime'] > $datetime){
$time = $geturl['lstime'];
}else{
$time = time();
}
//查询所属代理
$daili = daili::get($geturl['oid']);
//计算时间
if($money == $daili['dan_yue']){
$lstime = $time+3600*24*30;
}else if($money == $daili['dan_ji']){
$lstime = $time+3600*24*90;
}else if($money == $daili['dan_nian']){
$lstime = $time+3600*24*365;
}
//减去会员余额
$dec = openus::where('id',$geturl['uid'])->setDec('money',$money);
if($dec){
$sql = welist::where('id',$url_id)->update([
'lstime'=>$lstime
]);
if($sql){
return json(jsoncode(1,'续费成功'));
}else{
return json(jsoncode(-1,'续费失败'));
}
}
}
return view()->assign([
'url'=>$url,
'daili'=>$daili
]);
}
}
参考GPT:在前端 JavaScript 中,您可以使用 window.location.hostname 属性获取当前页面的主机名,然后将其与输入的域名进行比较。如果它们不匹配,则可以阻止表单的提交。
以下是一个示例代码片段:
layui.use(['form', 'layer'], function() {
var form = layui.form;
var layer = layui.layer;
form.verify({
url: function(value) {
if (value.length < 3) {
return '请输入正确的域名';
}
var inputHostname = value.split('.').slice(-2).join('.'); // 获取输入域名的顶级域名和二级域名
var currentHostname = window.location.hostname.split('.').slice(-2).join('.'); // 获取当前页面的顶级域名和二级域名
if (inputHostname !== currentHostname) {
return '禁止修改域名';
}
}
});
// 其他代码...
});
在这个代码中,form.verify() 函数用于添加自定义表单验证规则。url 验证规则使用了一个匿名函数来实现。如果输入的域名长度小于3,则返回一个错误消息。否则,它使用 .split('.') 将输入域名和当前页面的主机名分割成部分,然后使用 .slice(-2) 获取它们的最后两个部分(即顶级域名和二级域名),并使用 .join('.') 将它们连接成一个字符串。最后,它比较两个字符串是否相等,如果不相等则返回一个错误消息。
参考GPT和自己的思路:根据你提供的代码和问题描述,可以简单判断出,修改域名的逻辑在服务端处理。而异步监听指的是在客户端通过 JavaScript 监听服务端返回的数据并做出相应的处理。
如果你希望在客户端避免默认的域名修改行为,可以尝试在表单提交前,通过 JavaScript 禁止默认的表单提交行为,获取表单数据后,自行通过 AJAX 发送数据给服务端进行处理。具体实现方法可以参考 jQuery 的 preventDefault()
方法和 $.ajax()
方法。
同时,如果你希望在客户端提示用户输入不规范的域名,可以通过 layui 的表单验证功能,在表单元素上设置类似 lay-verify="required|url"
的属性,自动判断域名是否符合规范,并在用户输入不符合规范的域名时,提示相应的错误信息。
该回答引用于gpt与OKX安生共同编写:
在浏览器中,输入域名时会按照浏览器的默认行为进行自动处理和转换。如果你想禁止浏览器修改域名,可以使用 JavaScript 拦截表单提交事件,并手动获取表单数据并发送 Ajax 请求。
以下是一些可能有用的示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎页面-L-admin1.0</title>
<!-- 省略其他头部内容 -->
</head>
<body>
<div class="x-body">
<form class="layui-form" id="form">
<div class="layui-form-item">
<label for="L_email" class="layui-form-label">
<span class="x-red">*</span>授权域名
</label>
<input type="hidden" name="url_id" autocomplete="off" class="layui-input" value="{$url.id}">
<div class="layui-input-inline">
<input type="text" name="url" autocomplete="off" lay-verify="url" class="layui-input" value="{$url.url}">
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red">*</span>输入顶级域名、如:yhzf.a4ft3q.cn
</div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label"></label>
<button class="layui-btn" lay-filter="add" lay-submit="" id="submit-button">
提交
</button>
</div>
</form>
</div>
<script>
layui.use(['form','layer'], function(){
var form = layui.form, layer = layui.layer;
// 监听提交事件
$('#submit-button').on('click', function(event) {
event.preventDefault(); // 取消默认提交行为
// 获取表单数据并发送 Ajax 请求
var url = $('input[name=url]').val();
$.ajax({
url: '{:url("user/index/edit_wchat")}',
type: 'POST',
dataType: 'json',
data: {'url': url},
success: function(data) {
if (data.code == 1) {
layer.alert(data.msg, {icon: 6},function () {
// 获得frame索引
var index = parent.layer.getFrameIndex(window.name);
//关闭当前frame
parent.layer.close(index);
// 刷新父级页面
parent.location.reload();
});
} else {
layer.msg(data.msg, {icon: 5, time: 2000});
}
},
error: function(jqXHR, textStatus, errorThrown) {
// 处理错误情况
}
});
});
});
</script>
</body>
</html>
在这个示例中,我使用 jQuery 拦截了表单的提交事件,并手动获取了输入框中的值,然后通过 Ajax 发送请求到指定的 URL。注意,我使用了 event.preventDefault()
来取消默认的表单提交行为。
希望这些提示能够帮助你禁止浏览器修改域名!
浏览器会自动处理和转换输入的域名,并将其转换为符合规范的 URL。如果您想禁止浏览器修改域名,可以考虑使用 JavaScript 中的 URL
对象来手动解析和构建 URL。
具体来说,您可以使用以下代码获取当前页面的 URL,然后从中提取出域名部分:
var url = new URL(window.location.href);
var domain = url.hostname;
然后,您可以使用提取出的域名部分来构建新的 URL,并将其用于后续的操作:
var newUrl = 'https://' + domain + '/your/path';
// 然后使用 newUrl 进行后续操作
这样,您就可以避免浏览器对输入的域名进行处理和转换,从而确保您使用的始终是原始的输入域名。
希望这个解决方案能够帮助到您!
value="{$url.url}"修改为value="{$url}"试试
该回答引用ChatGPT
您好,在JavaScript中,无法禁止修改浏览器地址栏中的URL。这是由于浏览器的安全限制。但是,你可以使用History API或URL参数来模拟URL的修改,以避免实际上的URL修改
以下是一个使用History API的示例,可以防止浏览器在输入域名时默认修改为顶级域名:
if (typeof history.pushState === "function") {
var baseUrl = window.location.protocol + "//" + window.location.host;
var relativeUrl = window.location.pathname;
var fullUrl = baseUrl + relativeUrl;
history.pushState(null, null, fullUrl);
}
这段代码会使用history.pushState()方法将当前页面的URL设置为完整的URL,这样就可以避免浏览器默认修改URL了。请注意,这种做法可能会影响浏览器的前进和后退功能,因为实际上没有生成新的历史记录。
JavaScript 本身无法直接禁止修改域名,但是您可以在输入框的事件中进行判断和操作,使得用户无法修改域名。下面是一个简单的示例代码:
lua
Copy code
这段代码会在输入框中输入内容时监听 input 事件,如果用户尝试修改域名,那么输入框的值就会被重置为原来的值,并弹出一个警告框告诉用户域名不能修改。需要注意的是,这种方式并不是完全可靠的,因为用户仍然可以通过浏览器开发工具修改输入框的值,但是对于一般用户来说,应该足够了。如果您需要更高级的安全措施,可以考虑在后台对用户输入的域名进行验证和过滤。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以使用正则表达式和 JavaScript 来实现禁止修改域名的功能。在输入域名时,可以检查域名中是否有子域名,如果有,则禁止自动修改。
以下是可以添加到 your_page.tpl 文件的示例代码:
<div class="layui-input-inline">
<input type="text" name="url" id="url" autocomplete="off" lay-verify="url" class="layui-input" value="{$url.url}">
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red">*</span>输入顶级域名、如:yhzf.a4ft3q.cn
</div>
在下面的 JavaScript 代码中添加以下代码来检查输入域名中是否有子域名:
layui.use(['form', 'layer'], function () {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
// 自定义验证规则
form.verify({
url: function (value) {
if (value.length < 3) {
return '请输入正确的域名';
}
}
});
// 监听提交
form.on('submit(add)', function (data) {
var url = document.getElementById("url").value;
if (/^(?:[-A-Za-z0-9]+\.)?[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]\.[A-Za-z]{2,6}$/.test(url)) {
// 发异步,把数据提交给 PHP
var form = $("#form").serialize();
$.ajax({
url: '{:url("user/index/edit_wchat")}',
type: 'post',
data: form,
dataType: 'json',
success: function (data) {
if (data.code == 1) {
layer.alert(data.msg, { icon: 6 }, function () {
// 获得 frame 索引
var index = parent.layer.getFrameIndex(window.name);
// 关闭当前 frame
parent.layer.close(index);
// 刷新父级页面
parent.location.reload();
});
return false;
} else {
layer.msg(data.msg, { icon: 5, time: 2000 });
return false;
}
}
});
return false;
} else {
layer.msg('请输入正确的域名!', { icon: 5, time: 2000 });
return false;
}
});
});
在上面的代码中,我们使用了正则表达式来检查输入的域名的格式是否正确。如果输入的域名中有子域名,则不会自动更正。
希望这可以帮助到你。
如果我的回答解决了您的问题,请采纳!
JavaScript无法禁止修改域名,因为域名属于URL的一部分,而JavaScript无法修改URL。JavaScript只能修改当前文档中的内容和属性,但无法控制浏览器地址栏中的URL。此外,浏览器提供的一些防护措施也可以轻松地规避JavaScript对URL的修改。
如果你想保护网站免受DNS劫持等攻击,建议采取其他安全措施,例如使用HTTPS协议来保护数据传输的安全性,使用DNSSEC来防止DNS缓存污染等攻击。此外,可以使用Web应用程序防火墙(WAF)等工具来监视和过滤对您网站的恶意访问。