Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP不工作,数据库不更新_Php_Mysql_Sql_Break - Fatal编程技术网

PHP不工作,数据库不更新

PHP不工作,数据库不更新,php,mysql,sql,break,Php,Mysql,Sql,Break,我写这个php脚本是为了更新用户密码,需要旧密码、新密码和新密码的确认。这一切都正常,似乎取决于实际的UPDATE mysql语句。不知道我做错了什么,艾尔 另外,我知道它不安全,所以,我只是想让它先工作,我是一个php新手 我正在抓狂,当我运行此程序时,一切似乎都正常,除了它在$error为空之前中断{,我已经测试了会话电子邮件的echo,它显示了这一点,但是它不会用新密码更新数据库。请帮助!下面是我的代码: <?php session_start(); include('databa

我写这个php脚本是为了更新用户密码,需要旧密码、新密码和新密码的确认。这一切都正常,似乎取决于实际的UPDATE mysql语句。不知道我做错了什么,艾尔

另外,我知道它不安全,所以,我只是想让它先工作,我是一个php新手

我正在抓狂,当我运行此程序时,一切似乎都正常,除了它在$error为空之前中断{,我已经测试了会话电子邮件的echo,它显示了这一点,但是它不会用新密码更新数据库。请帮助!下面是我的代码:

<?php
session_start();

include('database_connection.php');

$error = array();

if (empty($_POST['oldpassword'])){
$error[] ='You did not enter your current password!';
} else {
    $oldpassword = $_POST['oldpassword'];
}



if (empty($_POST['newpassword'])){

    $error[] = 'You did not enter a new password!';
} else {
    if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["newpassword"])){
        $newpassword = $_POST['newpassword'];
    } else{
        $error[] = 'Password must be at least 8 characters and must contain at least one lower case letter, one upper case letter and one digit!';
    }
}

if (empty($_POST['newpasswordcon'])){
    $error[] = 'You did not enter your new password confirmation!';
} else {
    if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["newpasswordcon"])){
        $newpasswordcon = $_POST['newpasswordcon'];
    } else{
        $error[] = 'Password must be at least 8 characters and must contain at least one lower case letter, one upper case letter and one digit!';
    }
}


if($_POST['newpassword'] != $_POST['newpasswordcon']){
$error[] ='New password and confirmation do not match!' ;
}


$sql = "SELECT password FROM users WHERE email='" . $_SESSION['email'] . "'";
$result = mysql_query($sql);


if( $r = mysql_fetch_array($result) ) {
extract($r);



if($_POST['oldpassword'] != $password);{
$error[] ='Incorrect current password!';

}

//breaks here
echo $_SESSION['email'];

if (empty($error)){

echo $_SESSION['email'];
mysql_query("UPDATE users SET password='$newpassword' WHERE email='" . $_SESSION['email'] . "'");


echo '<p class ="alert alert-success fade in">Success! Your password has been updated!</p>';

}
} else{

    foreach ($error as $key => $values) {

            echo '<p class ="alert alert-error fade in">'.$values.'</p>';


}
}
?>

我在您的代码中没有看到任何addslashes,我想知道您是否有匹配项?

有一个分号不应该在那里

if ($_POST['oldpassword'] != $password);{ // <- remove this semicolon after )
   $error[] ='Incorrect current password!';
}

检查函数mysql\u query返回的错误,在您的空条件之前检查startprint\u r$错误,它是否包含任何内容?如果我在phpmyadmin中运行它,将$newpassword替换为'hello'和$\u SESSION['email']似乎可以工作使用有效的emailescape数据,哈希密码纯文本密码wth?,并在准备好的语句中使用mysqli或PDO。如果$\u POST['oldpassword']!=$password;{OP已经注意到,他知道自己的代码不安全。addslashes目前被认为不足以抵御SQL注入,因为你可以通过谷歌搜索或阅读链接到的页面轻松发现,尽管我承认我不完全了解存在的漏洞或如何再次执行攻击安装一个使用addslashes的站点。@MarkAmery-我看到了他的便条,但这与安全性无关,更重要的是想知道输入是否有任何字符被诸如魔术引号或环境设置之类的东西混为一谈。那是在我看到分号tho之前。即使是几年后的现在:你也可以使用文本编辑器,比如TextMate不同编码语言的语法验证。这是我生活中的日常帮助…;谢谢,我现在确实使用了Sublime之类的东西,尽管我不再使用PHP-我的大部分工作都是用C语言完成的,我还是很感谢您的回复!