小编Spu*_*pud的帖子

查询产生意外结果(sha1)

我有一个更新用户数据的表单.它发布到这个页面:

<?php
    //Update user table
    session_start();
    include 'sql_connect_R.inc.php';

    $id = mysql_real_escape_string($_POST['userID']);
    $password = mysql_real_escape_string($_POST['user_passwrd']);

    $salt = time();
    $hash = sha1($password . $salt);

    mysql_query("UPDATE users SET user_passwrd = '$hash', stamp = '$salt', pending = 'yes'
    WHERE userID = '$id'");

    mysql_close($con);
?>
Run Code Online (Sandbox Code Playgroud)

(我已经删除了与这个问题无关的事情)

我相信正在发生的事情是当'stamp'字段填充$ salt时,它获得的值与计算$ hash时的值不同.因此,当用户登录并在此处进行检查时:

$qry="SELECT * FROM users WHERE userlogin = '$login' AND user_passwrd = sha1(CONCAT('$password', stamp))";
    $result=mysql_query($qry);
    $row = mysql_fetch_assoc($result);
    $num = mysql_num_rows($result);
Run Code Online (Sandbox Code Playgroud)

当我回显$ num时,它返回值0.我想知道是否有办法确保$ salt的值在$ hash中使用时保持不变,然后当它更新字段'stamp时".任何人都可以帮助我或指出我正确的方向吗?提前致谢.干杯

php mysql

6
推荐指数
1
解决办法
499
查看次数

需要使用同一数据库中另一个表中的数据填充一个表

我试图用mysql从另一个表填充一个表.第一个表是用户,第二个表是技术人员.

用户包含:userID,surname,firstname,loginid,password,accesslevel.

技术人员包含:techID,tech_surname,tech_firstname,tech_loginid,tech_password,tech_accesslevel.

当我添加用户时,如果accesslevel = tech并且users.loginid不等于technicians.tech_loginid,我希望技术人员表填充.

我已经尝试了几件事,结果是没有添加记录,或者每次添加accesslevel = tech的用户中的所有记录,给我几个重复的记录.

我试过这个:

INSERT INTO technicians (techID, tech_surname, tech_firstname, tech_loginid, tech_passwrd, tech_accesslevel)
SELECT firstname, surname, loginid, accesslevel, passwrd, tech_loginid
FROM users, technicians
WHERE accesslevel='tech' AND 'loginid!=tech_loginid'
Run Code Online (Sandbox Code Playgroud)

它不起作用,如果我从WHERE子句中删除AND语句,每次使用accesslevel = tech添加新用户时,它都会推送所有记录.

我究竟做错了什么?我已经搜索了几个小时的答案.

干杯

mysql

4
推荐指数
1
解决办法
6469
查看次数

CAP_FIRST函数给出了语法错误

我发现这个函数用于大写字符串中单词的第一个字母,但当我尝试在PHPMyadmin中的SQL中运行它时,它在第8行给出了语法错误.任何人都可以帮我解决问题所在吗?这是代码:

CREATE FUNCTION CAP_FIRST (input VARCHAR(255))

RETURNS VARCHAR(255)

DETERMINISTIC

BEGIN
DECLARE len INT;
DECLARE i INT;

SET len   = CHAR_LENGTH(input);
SET input = LOWER(input);
SET i = 0;

WHILE (i < len) DO
    IF (MID(input,i,1) = ' ' OR i = 0) THEN
        IF (i < len) THEN
            SET input = CONCAT(
                LEFT(input,i),
                UPPER(MID(input,i + 1,1)),
                RIGHT(input,len - i - 1)
            );
        END IF;
    END IF;
    SET i = i + 1;
END WHILE;

RETURN input;
END;
Run Code Online (Sandbox Code Playgroud)

这就是错误:MySQL说:文档#1064 - 你的SQL语法有错误; …

mysql

3
推荐指数
1
解决办法
1148
查看次数

标签 统计

mysql ×3

php ×1