我的PHP脚本有问题。当我尝试保存数据时,它显示错误。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
require_once 'user.php';
if ( (isset($_POST["send"])) && ($_POST["send"] == 1)) {
if ( isset($_Post["login"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["login"]));
} else {
$login='';
}
if ( isset($_Post["pass"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass"]));
} else {
$pass='';
}
if ( isset($_Post["pass_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"]));
} else {
$pass_v='';
}
if ( isset($_Post["email"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email"]));
} else {
$email='';
}
if ( isset($_Post["emai_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"]));
} else {
$email_v='';
}
$existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM login WHERE login='$login' LIMIT 1"));
$existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM Email WHERE email='$email' LIMIT 1"));
$errors = '';
if (!$login || !$email || !$pass || !$pass_v || !$email_v ) $errors .= '- Musisz wypełnić wszystkie pola<br />';
if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />';
if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />';
if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />';
if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />';
if ($errors != '') {
echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>';
} else {
$pass = user::passSalter($pass);
try {
$pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132');
$pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v) VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')";
if ($pdow->query($sqlw)) {
echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>";
} else{
echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>";
}
$pdow = null;
} catch(PDOException $w) {
echo $w->getMessage();
}
//mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
echo '<p class="success">'.$login.', zostałeś zarejestrowany.<br /><a href="login.php">Logowanie</a></p>';
}
}
?>
<form method="post" action="">
<label for="login">Wprowadź nazwę użytkownika</label>
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/>
<label for="pass">Wprowadź hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/>
<label for="pass_again">Wprowadź ponownie hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/>
<label for="email">Wprowadź E-mail</label>
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/>
<label for="email_again">Potwierdź Email</label>
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br />
<input type="hidden" name="send" value="1" />
<input type="submit" value="Zarejestruj" />
<input type="submit" value="Zmień hasło" />
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a>
</form>
<?php
require 'footer.php';
?>
</body>
</head>
错误讯息:
警告:mysql_fetch_array()要求参数1为资源,第45行的C:\ xampp \ htdocs \ CDR \ register.php中给出布尔值
警告:mysql_fetch_array()期望参数1为资源,第46行的C:\ xampp \ htdocs \ CDR \ register.php中给出布尔值
我更正了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
require_once 'user.php';
try {
$pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132');
$pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v)
VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')";
if ($pdow->query($sqlw)) {
echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>";
}
else{
echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>";
}
$pdow = null;
}
catch(PDOException $w)
{
echo $w->getMessage();
}
$result = $mysqeli->query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1"); // btw, this query is vulnerable to SQL injection
$existsLogin = $result->fetch_array();
if ( (isset($_POST["send"])) && ($_POST["send"] == 1)) {
if ( isset($_POST["login"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["login"]));
} else {
$login='';
}
if ( isset($_POST["pass"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass"]));
} else {
$pass='';
}
if ( isset($_POST["pass_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"]));
} else {
$pass_v='';
}
if ( isset($_POST["email"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email"]));
} else {
$email='';
}
if ( isset($_POST["emai_v"]) ){
$login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"]));
} else {
$email_v='';
}
$existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1"));
$existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE email='$email' LIMIT 1"));
$errors = '';
if (!$login || !$email || !$pass || !$pass_v || !$email_v ) $errors .= '- Musisz wypełnić wszystkie pola<br />';
if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />';
if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />';
if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />';
if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />';
if ($errors != '') {
echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>';
}
else {
$pass = user::passSalter($pass);
//mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
echo '<p class="success">'.$login.', zostałeś zarejestrowany.
<br /><a href="login.php">Logowanie</a></p>';
}
}
?>
<form method="post" action="">
<label for="login">Wprowadź nazwę użytkownika</label>
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/>
<label for="pass">Wprowadź hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/>
<label for="pass_again">Wprowadź ponownie hasło</label>
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/>
<label for="email">Wprowadź E-mail</label>
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/>
<label for="email_again">Potwierdź Email</label>
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br />
<input type="hidden" name="send" value="1" />
<input type="submit" value="Zarejestruj" />
<input type="submit" value="Zmień hasło" />
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a>
</form>
<?php
require 'footer.php';
?>
</body>
</html>
并且有错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'login']','['pass']','['pass_v']','['email']','['email_v']')' at line 2
Notice: Undefined variable: mysqeli in C:\xampp\htdocs\CDR\register.php on line 38
Fatal error: Call to a member function query() on null in C:\xampp\htdocs\CDR\register.php on line 38
答案 0 :(得分:1)
您正在将deprecated mysql_*
函数与更现代的PDO接口混合。
只要您在开始时没有mysql_connect()
来电,mysql_*
功能将无效。
mysql_query()
在无法连接到数据库时返回false
,从而导致出现错误消息。
将代码更改为仅使用PDO。
另一件事,$_Post
将不起作用。 PHP区分大小写,正确的变量名称为$_POST
。
答案 1 :(得分:0)
您必须将mysql_connect
的结果作为第一个参数传递给mysql_fetch_array
。但不推荐使用mysql
扩展程序,请使用mysqli
或PDO
。
$db = new mysqli('127.0.0.1', 'your_user', 'your_pass', 'your_db');
$result = $mysqli->query("SELECT COUNT(*) FROM login WHERE login='$login' LIMIT 1"); // btw, this query is vulnerable to SQL injection
$existsLogin = $result->fetch_array();
可以找到更多示例here。