RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1102793
Accepted
Pashok
Pashok
Asked:2020-03-30 19:25:16 +0000 UTC2020-03-30 19:25:16 +0000 UTC 2020-03-30 19:25:16 +0000 UTC

会话在 joomla 中不起作用

  • 772

情况是这样的:有2个材料:regis和profil,有一个连接到regis的ajax脚本,有一个通过ajax发送到saveUser.php的表单处理程序。如果您使用以下代码,那么一切都会正常运行(所有检查都有效,一切都已保存,它会从 regis 切换到 profil)。

注册:

<div id="result_form"> </div>
<form id="reg_form" class="form" action="" method="POST">
<div class="form-group"><label>Ваш логин для входа на сайт:</label><br /> <input class="form-control" maxlength="50" name="login" type="text" placeholder="Your login..." data-validate="" /><span class="hint">Обязательно для заполнения</span></div>
<div class="form-group"><label>Ваш пароль:</label><br /> <input class="form-control" maxlength="50" name="password" type="password" placeholder="Your pASS..." data-validate="" /><span class="hint">Обязательно для заполнения</span></div>
<div class="form-group"><label>Ваша должность:</label><br /> <input class="form-control" maxlength="50" name="position" type="text" placeholder="Your position..." data-validate="" /><span class="hint">Обязательно для заполнения</span></div>
<div class="form-group"><label>Ваше место работы:</label><br /> <input class="form-control" maxlength="50" name="placeJob" type="text" placeholder="Your place job..." data-validate="" /><span class="hint">Обязательно для заполнения</span></div>

<div class="form-group"><input id="reg_btn" class="btn btn-primary" name="submit" type="submit" value="Зарегистрироваться" /></div></form>

profile - 这里应该通过 sourcerer 插件从会话中输出一个值

{source} <?php
echo("Hello");
?> {/source}

阿贾克斯:

$( document ).ready(function() {
    $("#reg_btn").click(
        function(ev){
          ev.preventDefault();
          var forma = $("#reg_form");
          var field = [];
          var leng = 0;
          forma.find('input[data-validate]').each(function() {
            field.push('input[data-validate]');
            var value = $(this).val();
            var line = $(this).closest('.form-group');
              if(!value){
                line.addClass('emptyField');
                setTimeout(function() {
                  line.removeClass('emptyField')
                }.bind(this),3000);
              }else{leng++;}            
          });
          if(leng == field.length){
            sendAjaxForm('result_form', 'reg_form', 'http://ip/nameSite/templates/bootstrap4/dopScripts/saveUser.php');
            return false;            
          }
        }
    );
});

function sendAjaxForm(result_form, reg_form, url) {
    $.ajax({
        url:     url, 
        type:     "POST", 
        dataType: "html", //формат данных
        data: $("#"+reg_form).serialize(),  
        success: function(response) { 
          result = $.parseJSON(response);
          if(result.already == "True"){
            var message = document.getElementById('result_form');
            message.innerHTML = "<p style='color: red;'>Такой логин уже существует</p>";            
            message.scrollIntoView();
          }else{
            window.location.href = 'moj-profil';            
          }
        },
        error: function(response) {
            $('#result_form').html('Ошибка. Данные не отправлены.');
        }
    });
}

保存用户.php:

<?php
  if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
  if (isset($_POST['password'])) { $password = $_POST['password']; if ($password =='') { unset($password);} }
  if (isset($_POST['position'])) { $position = $_POST['position']; if ($position =='') { unset($position);}}
  if (isset($_POST['placeJob'])) { $placejob = $_POST['placeJob']; if ($placejob =='') { unset($placejob);}}  
  include('bd.php');
  $checkUser="SELECT nick FROM registration WHERE nick = ?";
  $query = $db->prepare($checkUser);
  $query->bind_param("s", $login);
  $query->execute();
  $query->store_result();
  $query->bind_result($check_email);
  $query->fetch();
  $empty = $query->num_rows();
  if($empty != 0){
    $already="True";
    $result = array('already'=>$already);
  }else{
    $insert = "INSERT INTO registration (nick, pass, position, placejob)VALUES (?, ?, ?, ?)";
    $qinsert = $db->prepare($insert);
    $qinsert->bind_param("ssss", $login, $password, $position, $placejob);
    $qinsert->execute();
    $already="False";
    //THIS PLACE 
    $result = array(
        'already' => $already,
        'login' => $login
    );
  }
  echo json_encode($result);
?>

现在的问题。很多资料表明,session_start(); $_SESSION['']jooml 中的常规构造会话不起作用,应使用以下构造:

报名参加会议

define( '_JEXEC', 1 );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
define( 'DS', DIRECTORY_SEPARATOR );
require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$mainframe = JFactory::getApplication('site');
$session = JFactory::getSession();
$session->set('myVar', array('login'=>$login, 'first'=>1));

要获得会话:

{source} <?php
define( '_JEXEC', 1 );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
define( 'DS', DIRECTORY_SEPARATOR );
require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$session = JFactory::getSession();
$mySess = $session->get('myVar', array());
echo("Hello $mySess");//Результат Hello Array
foreach($mySess as $one){
echo("Hello".$one['login']." ".$one['first']);//Результат пуст
}
?> {/source}

但它不起作用,因为如果会话入口代码插入//THIS PLACE到 saveUser.php 文件或任何其他地方,那么所有内容都将写入数据库,但 ajax 不会重定向到新页面并会说Uncaught SyntaxError: Unexpected end in JSON,如果使用defined('_JEXEC') or die;或Uncaught SyntaxError: Unexpected token < in JSON,如果使用define('_JEXEC', 1);。 我是joomle的新手,不太了解。您能告诉我如何修复此错误,以便会话正常连接、保存和工作吗?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Pashok
    2020-04-08T00:08:47Z2020-04-08T00:08:47Z

    事实证明,问题出在define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']). 文件路径指定不正确。我试图制作define('JPATH_BASE', dirname(dirname(__FILE__)) )其他类似物,但他们指出了一个带有文件的文件夹,然后他们试图通过require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php'). 没有这样的路径,您需要获取服务器的根并为此修复它:define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']."/nameSite"). 好吧,这是最终的工作代码。

    要注册一个会话:

    define( '_JEXEC', 1 );
    define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']."/nameSite"); 
    define( 'DS', DIRECTORY_SEPARATOR );
    
    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
    
    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();
    $string = JFactory::getSession();
    $string->set('some',array('mass'=>123,'data'=>$data));
    

    要获得会话:

    {source}
    
    <?php
    $data = JFactory::getSession();
    $data2 = $data->get('some', array());
    echo "first ". (string)$data2['mass']." second ".(string)$data2['data'];
    ?>
    {/source}
    
    • 1

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5