RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-517449

Ian Markov's questions

Martin Hope
Ian Markov
Asked: 2022-09-07 17:38:59 +0000 UTC

modx 显示来自 ipb 论坛的最新主题

  • 0

modx 上有一个站点(MODX 3.0.1),还有一个 ipb 论坛(Invision Community v4.7.1),php 8.1。
我想将 ipb 论坛的最新主题带到 modx 站点。
在网上找到了关于modx和vbulletin整合的文章( https://habr.com/ru/post/93572/),以及vbulletin论坛到modx网站的话题输出( https://habr.com/ru/post/93572/ ) /habr.com/ru/post/93943/)。
我试图通过与这些文章类比来做到这一点。
从第一篇文章开始,我不明白全局 $vbulletin 来自哪里;
也许我不明白 ipb 中的哪个文件需要复制到 global_modx.php,所以我决定跳过它..

Для начала нам необходимо подготовиться, и первым будет файл global.php форума.
Я сделал так: скопировал его в global_modx.php (.../forum/global_modx.php), открыл для редактирования и удалил все после 891 строки (напоминаю, версия форума 3.8.1) — подключение стилей и т.д., т.е. последней строчкой в файле у меня вызов функции verify_ip_ban();

从论坛撤话题的文章来看,一切似乎都清楚了。我用 ipb 替换表和列的名称,添加到论坛外部数据库的连接,结果如下:

<?php
define('MODX_CORE_PATH', '/path/to/revo/core/');
define('MODX_CONFIG_KEY','config');
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
 
// Задаем подключения к сторонней базе данных:
$host = 'localhost';
$username = 'root';
$password = '123456';
$dbname = 'forum';
$port = 3306;
$charset = 'utf8';
 
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
$xpdo = new xPDO($dsn, $username, $password);

$count = 10;
$forumlink = 'https://forum.mysite.ru/';
$sql = 'SELECT title as topic,tid,last_post,last_poster_id,last_poster_name,title_seo
FROM `forums_topics`
WHERE forum_id NOT IN ()
ORDER BY `last_post` DESC
LIMIT '.$count.';';
        
$res = $xpdo->query($sql); 
$txt = '';

while ($f_res = $modx->db->getRow($res, 'assoc')) {
//элементы массива названы вполне себе понятно
$txt .= $modx->parseChunk('forum_last_messages', 
    array(
        'forumlink' => $forumlink,
        'postid' => $f_res['last_poster_id'],                  
        'threadtitle' => $f_res['topic'],
        'title_seo' => $f_res['title_seo'],
        'lastposter' => $f_res['last_poster_name'],
        'forum' => $f_res['forum'],
        'postdate' => date("H:i", $f_res['last_post'])   //формат даты
        ),
    '[+',
    '+]'
    );
}
return $txt;

结果,网站错误

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ') ORDER BY 附近使用的正确语法last_post/public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php:2549 第 3 行的 DESC LIMIT 10' 堆栈跟踪:#0 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO。 php(2549): PDO->query('SELECT title as...') #1 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/17.include.cache.php(25): xPDO \xPDO->query('SELECT title as...') #2 /public_html/core/src/Revolution/modScript.php(88): include('/home/zamorinpa...') #3 /public_html/ core/src/Revolution/modParser.php(505): MODX\Revolution\modScript->process(NULL) #4 /public_html/core/src/Revolution/modParser.php(218): MODX\Revolution\modParser->processTag (Array, true) #5 /public_html/core/src/Revolution/modResource.php(521): MODX\Revolution\modParser->processElementTags('', '...', true, false, '[[', ']]', 大批,9) #6 /public_html/core/src/Revolution/modResource.php(469): MODX\Revolution\modResource->parseContent() #7 /public_html/core/src/Revolution/modResponse.php(72): MODX\ Revolution\modResource->prepare() #8 /public_html/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent(Array) #9 /public_html/core/src/Revolution/modRequest. php(138): MODX\Revolution\modRequest->prepareResponse() #10 /public_html/core/src/Revolution/modX.php(1495): MODX\Revolution\modRequest->handleRequest() #11 /public_html/index. php(63): MODX\Revolution\modX->handleRequest() #12 {main} 在第 2549 行的 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php 中抛出MODX\Revolution\modResource->prepare() #8 /public_html/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent(Array) #9 /public_html/core/src/Revolution/ modRequest.php(138): MODX\Revolution\modRequest->prepareResponse() #10 /public_html/core/src/Revolution/modX.php(1495): MODX\Revolution\modRequest->handleRequest() #11 /public_html/ index.php(63): MODX\Revolution\modX->handleRequest() #12 {main} 在第 2549 行的 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php 中抛出MODX\Revolution\modResource->prepare() #8 /public_html/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent(Array) #9 /public_html/core/src/Revolution/ modRequest.php(138): MODX\Revolution\modRequest->prepareResponse() #10 /public_html/core/src/Revolution/modX.php(1495): MODX\Revolution\modRequest->handleRequest() #11 /public_html/ index.php(63): MODX\Revolution\modX->handleRequest() #12 {main} 在第 2549 行的 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php 中抛出handleRequest() #11 /public_html/index.php(63): MODX\Revolution\modX->handleRequest() #12 {main} 在 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php 中抛出在线 2549handleRequest() #11 /public_html/index.php(63): MODX\Revolution\modX->handleRequest() #12 {main} 在 /public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDO.php 中抛出在线 2549

在 WHERE forum_id NOT IN () 这一行中固定 WHERE forum_id NOT IN (0),忘记了 0。
现在报错是这样的

致命错误:未捕获错误:在 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/17.include.cache.php:28 中调用 null 上的成员函数 getRow() 堆栈跟踪:#0 /public_html /core/src/Revolution/modScript.php(88): include() #1 /public_html/core/src/Revolution/modParser.php(505): MODX\Revolution\modScript->process(NULL) #2 /public_html /core/src/Revolution/modParser.php(218): MODX\Revolution\modParser->processTag(Array, true) #3 /public_html/core/src/Revolution/modResource.php(521): MODX\Revolution\modParser ->processElementTags('', '...', true, false, '[[', ']]', Array, 9) #4 /public_html/core/src/Revolution/modResource.php(469): MODX \Revolution\modResource->parseContent() #5 /public_html/core/src/Revolution/modResponse.php(72): MODX\Revolution\modResource->prepare() #6 /public_html/core/src/Revolution/modRequest.php(154): MODX\Revolution\modResponse->outputContent(Array) #7 /public_html/core/src/Revolution/modRequest.php(138): MODX\Revolution\modRequest->prepareResponse() #8 /public_html/core/src/Revolution/modX.php(1495): MODX\Revolution\modRequest->handleRequest() #9 /public_html/index.php(63): MODX\Revolution\modX->handleRequest() #10 {main} 在第 28 行的 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/17.include.cache.php 中抛出MODX\Revolution\modX->handleRequest() #10 {main} 在第 28 行的 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/17.include.cache.php 中抛出MODX\Revolution\modX->handleRequest() #10 {main} 在第 28 行的 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/17.include.cache.php 中抛出

modx
  • 0 个回答
  • 0 Views
Martin Hope
Ian Markov
Asked: 2022-09-01 11:57:09 +0000 UTC

Modx - 通过登录包同时在两个数据库中注册和更改密码

  • 0

刚开始使用Modx。
我按照说明通过登录包设置了用户的注册和授权https://itchief.ru/modx/login-registration
在网站上注册成功。但我需要,除了在网站本身上注册,还需要到另一个数据库(游戏)。

现在看起来太复杂了:

  1. 用户在网站上注册一个帐户;
  2. 进入信用证;
  3. 在个人账号中去链接注册一个游戏账号。

使用单独的代码段实现游戏帐户的注册:

<?php
//Подключение к игровой БД 
if(!@mysql_connect('127.0.0.1','user','pswd') || !@mysql_select_db('db_name')) 
    echo "<div class='callout callout-danger'>
                <h4>Сторонние силы вмешались в процесс!</h4>
          </div>"; 
else {
$trules = 
'<form name="reg_rules" method="post" action=""> 
            <div class="callout callout-info">
                <h4><i class="icon fa fa-info"></i> Прочти перед регистрацией!</h4>

                <p>Текст</p>
            </div>
                
            <input type="hidden" name="step" value="2"> 
            <input type="checkbox" name="rules"> Согласен<br>
            <center><input type="submit" value="Далее" class="btn btn-block btn-success"> </center>
</form>'; 
$tform = 
'<form name="reg_form" method="post" action="">
      <div class="form-group has-feedback">
        <input placeholder="Логин" name="login" type="text" class="form-control" maxlength="14">  
        <span class="glyphicon glyphicon-user form-control-feedback"></span>
      </div>
      <div class="form-group has-feedback">
        <input name="email" placeholder="Email" type="text" class="form-control"> 
        <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
      </div>
      <div class="form-group has-feedback">
        <input name="pass" placeholder="Пароль" type="password" class="form-control" maxlength="16"> 
        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
      </div>
      <div class="form-group has-feedback">
        <input name="repass" placeholder="Повтор пароля" type="password" class="form-control" maxlength="16"> 
        <span class="glyphicon glyphicon-log-in form-control-feedback"></span>
      </div>
      
              
        <input type="hidden" name="step" value="3">
        <center><input type="submit" value="Создать" class="btn btn-block btn-success"></center>
</form>'; 

$step = $_POST['step']; 

if (isset($_POST['step'])){ 
switch ($step){ 
case '2':{ 
$rules = $_POST['rules']; 
if ($rules == "on") 
//На шаге 2 выводится форма, если пользователь согласен с правилами 
$centertext = $tform; 
else 
//Если не согласен 
$centertext = '
<div class="callout callout-warning">
                <h4>Что-то не так!</h4>

                <p>Регистрация невозможна без согласия с правилами сервера!</p>
              </div>
<center><input type="button" onclick="history.back(-2); return false;" value="Назад" class="btn btn-block btn-success"></center>
'; 
break; 
} 
case '3':{ 
if ((isset($_POST['login']))AND(isset($_POST['pass']))AND(isset($_POST['repass']))AND(isset($_POST['email']))){ 
$login = $_POST['login']; 
$pass = $_POST['pass']; 
$repass = $_POST['repass']; 
$email = $_POST['email']; 
$ip = $_SERVER["REMOTE_ADDR"];

if(strlen($login) < 6 or strlen($login) > 16) 
$err[] = '<div class="callout callout-warning"><p>Минимальная длинна логина - 6 символов. Максимальная длина логина - 16 символов</p></div>'; 
if(strlen($pass) < 8 or strlen($pass) > 16) 
$err[] = '<div class="callout callout-warning"><p>Минимальная длинна пароля - 8 символов. Максимальная длина пароля - 16 символов</p></div>'; 
if($pass==$login) 
$err[] = '<div class="callout callout-warning"><p>Не разрешено использовать одинаковые логин и пароль</p></div>'; 
if($pass!=$repass) 
$err[] = '<div class="callout callout-warning"><p>Введенные пароли не совпадают</p></div>'; 
if(!preg_match("/^[A-Za-z0-9]{6,}$/",$login)) 
$err[] = '<div class="callout callout-warning"><p>Логин содержит запрещенные символы.</p></div>'; 
if(!preg_match("/^[A-Za-z0-9]{6,}$/",$pass)) 
$err[] = '<div class="callout callout-warning"><p>Пароль содержит запрещенные символы.</p></div>';
if(!eregi("^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$", $email)) 
$err[] = '<div class="callout callout-warning"><p>Не правильный формат адреса электронной почты</p></div>'; 
if (preg_match('/[а-я]/i', $pass))
$err[]  = '<div class="callout callout-warning"><p>Пароль не может содержать кириллицу</p></div>';
if (preg_match('/[а-я]/i', $login))
$err[]  = '<div class="callout callout-warning"><p>Логин не может содержать кириллицу</p></div>';

if ($err!='') 
$centertext = implode('', $err); 
} 
else{ 
$centertext = '<div class="callout callout-warning"><p>Не заполнены все обязательные поля.</p></div>'; 
} 
if ($centertext ==""){ 

$db = mysql_pconnect('127.0.0.1','user','pswd'); 
mysql_query('SET CHARACTER SET utf8mb4'); 
mysql_select_db('db_name'); 
$result = mysql_query("SELECT login FROM `accounts` WHERE login='$login'"); 
if(mysql_num_rows($result)==0){ 
$gamepass = base64_encode(hash('whirlpool', $pass, true)); 
mysql_query("INSERT INTO accounts(login, password, lastactive, accessLevel, lastIP, lastServerID, l2email) VALUES('".$login."' , '".$gamepass."', '1', '0', '".$ip."', '1', '".$email."');") or die(mysql_error()); 
$centertext = "Добро пожаловать. Аккаунт $login успешно создан."; 
} 
else{ 
$centertext = "К сожалению этот логин уже занят."; 
} 
} 
break; 
} 
default:{ 
$centertext = ""; 
} 
} 
} 
if ($centertext == "") 
$centertext = $trules; 
echo $centertext;
}    

我想进行一次注册,以便在网站上创建帐户时,立即创建一个游戏帐户。因此,在更改帐户密码时,游戏帐户的密码也会更改。

但是我不知道如何以及在哪里更改登录包代码以添加与游戏数据库的连接,并且注册和更改密码时的数据已写入游戏数据库。

请帮忙。

php
  • 1 个回答
  • 30 Views

Sidebar

Stats

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

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 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