1
私のプログラムでは、ユーザーの電子メールを保存し、新しい電子メールまたはログインに電子メールが既に使用されている場合にログインできるようになっています。電子メールがすでにログインされていることをユーザーに警告する。問題は以前に使用されたかどうかを検証するために電子メールがテーブルに格納されていないことである。同じ資格情報でログインするたびに、私はErrorステートメントの代わりにおめでとうステートメントを取得します。誰が私が間違っているのか分かりますか?おそらく私の構文(私はこれを何時間も主演してきたので、問題を選ぶことはできません)。ありがとうございました!すべての入力をいただければ幸いです!MySQLとPHPの解析エラー
dbparams.txt
username=sdev_owner
password=sdev300
host=localhost
db=sdev
Disc_7.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Discussion 7 </title>
</head>
<body OnLoad="document.createlogin.uname.focus();">
<?php
if(isset($_POST["CreateSubmit"])) {
validate_form();
} else {
$messages = array();
show_form($messages);
}
?>
<?php
function show_form($messages) {
// Assign post values if exist
$uname="";
$email="";
if (isset($_POST["uname"]))
$uname=$_POST["uname"];
if (isset($_POST["email"]))
$email=$_POST["email"];
echo "<p></p>";
echo "<h2> Enter Login Information</h2>";
echo "<p></p>";
?>
<form name="createlogin" method="POST" action="Disc_7.php">
<table border="1" width="100%" cellpadding="0">
<tr>
<td width="157">Username:</td>
<td><input type="text" name="uname" value='<?php echo $uname ?>' size="30"></td>
</tr>
<tr>
<td width="157">Email:</td>
<td><input type="text" name="email" value='<?php echo $email ?>' size="30"></td>
</tr>
<tr>
<td width="157"><input type="submit" value="Submit" name="CreateSubmit"></td>
<td> </td>
</tr>
</table>
</form>
<?php
}
?>
<?php
function validate_form(){
$messages = array();
$redisplay = false;
$uname = $_POST["uname"];
$email = $_POST["email"];
$login = new LoginClass($uname,$email);
$count = countLogin($login);
if ($count==0) {
$res = insertLogin($login);
echo "<h3>Congratulations, you've logged in!</h3> ";
} else {
echo "<h3>Error: A login with that e-mail has already logged in.</h3> ";
}
}
function countLogin ($login){
$mysqli = connectdb();
$uname = $login->getUname();
$email = $login->getEmail();
$mysqli = connectdb();
$Myquery = "SELECT count(*) as count from LoginData where eMail='$email'";
if ($result = $mysqli->query($Myquery)) {
while($row = $result->fetch_assoc()) {
$count=$row["count"];
}
$result->close();
}
$mysqli->close();
return $count;
}
function insertLogin ($login){
$mysqli = connectdb();
$uname = $login->getUname();
$email = $login->getEmail();
$Query = "INSERT INTO LoginData (userName,eMail) VALUES ('$uname', '$email')";
$Success=false;
if ($result = $mysqli->query($Query)) {
$Success=true;
}
$mysqli->close();
return $Success;
}
function getDbparms(){
$trimmed = file('parms/dbparms.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$key = array();
$vals = array();
foreach($trimmed as $line){
$pairs = explode("=",$line);
$key[] = $pairs[0];
$vals[] = $pairs[1];
}
$mypairs = array_combine($key,$vals);
$myDbparms = new DbparmsClass($mypairs['username'],$mypairs['password'], $mypairs['host'],$mypairs['db']);
return $myDbparms;
}
function connectdb() {
$mydbparms = getDbparms();
$mysqli = new mysqli($mydbparms->getHost(), $mydbparms->getUsername(),$mydbparms->getPassword(),$mydbparms->getDb());
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
return $mysqli;
}
class DBparmsClass
{
private $username="";
private $password="";
private $host="";
private $db="";
public function __construct($myusername,$mypassword,$myhost,$mydb)
{
$this->username = $myusername;
$this->password = $mypassword;
$this->host = $myhost;
$this->db = $mydb;
}
public function getUsername()
{
return $this->username;
}
public function getPassword()
{
return $this->password;
}
public function getHost()
{
return $this->host;
}
public function getDb()
{
return $this->db;
}
// Set methods
public function setUsername ($myusername)
{
$this->username = $myusername;
}
public function setPassword ($mypassword)
{
$this->password = $mypassword;
}
public function setHost ($myhost)
{
$this->host = $myhost;
}
public function setDb ($mydb)
{
$this->db = $mydb;
}
} // End DBparms class
// Class to construct Students with getters/setter
class LoginClass
{
// property declaration
private $uname="";
private $email="";
// Constructor
public function __construct($uname,$email)
{
$this->uname = $uname;
$this->email = $email;
}
// Get methods
public function getUname()
{
return $this->uname;
}
public function getEmail()
{
return $this->email;
}
// Set methods
public function setUname ($value)
{
$this->uname = $value;
}
public function setEmail ($value)
{
$this->email = $value;
}
}
?>
</body>
</html>
こんにちは、あなたのテーブルはどのように設定されていますか? :)ユニークな制約?主キー? – Goikiu
@Goikiuこれはクラス用ですが、SQLでテーブルを構成することを理解していますが、私のインストラクタ(動作するプログラム)の例では、MySQLとPHP内のテーブルをどこで設定するか指定していません。 – pCaMp
**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'、' $ _GET'、**任意の**ユーザデータを直接クエリーに入れないでください。誰かがあなたのミスを悪用しようとすると非常に危険です。 – tadman