0

mayan_users という名前のデータベースにユーザーを登録する必要がある登録フォームを Web サイトに作成しましたが、フォームに詳細を入力して送信すると、「クエリ エラー」が表示されます。以下のコードを含めました。ありがとう。

<?php
     include("dbconnect.php");
     $firstname=$_POST['first_name'];
     $lastname=$_POST['last_name'];
     $address=$_POST['address'];
     $postcode=$_POST['postcode'];
     $emailaddress=$_POST['emailaddress'];
     $password=$_POST['password'];
     $query = "select emailaddress FROM mayan_users  where emailaddress='$emailaddress'";
      $link = mysql_query($query);
     if (!$link) {
      die('query error');
     }
     $num=mysql_num_rows($link);
     if ($num>0){
      die('email already exists'); //email already taken
     }
     $query = "insert into mayan_users (firstname, lastname, address, postcode, emailaddress, password) values('$firstname','$lastname','$address','$postcode', '$emailaddress','$password')";
     $link = @ mysql_query($query);
     if (!$link) {
      die('table write error');
     }
     ?>
4

2 に答える 2

0

以下を試してみてください。

HTML 部分 :

<form action="" method="post" name="register">
<table>
<tr><td>First Name</td><td><input type="text" name="first_name" /></td></tr>
<tr><td>Last Name</td><td><input type="text" name="last_name" /></td></tr>
<tr><td>Address</td><td><input type="text" name="address" /></td></tr>
<tr><td>Postal Code</td><td><input type="text" name="postcode" /></td></tr>
<tr><td>Email</td><td><input type="text" name="emailaddress" /></td></tr>
<tr><td>Password</td><td><input type="password" name="password" /></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="register" value="Register" /></td></tr>
</table>
</form>

PHP 部分:

<?php
$con = mysql_connect("localhost","root","") or die(mysql_error());
$select_db = mysql_select_db("mayan",$con);
if(isset($_POST['register']))
{
     $firstname = mysql_real_escape_string($_POST['first_name']);
     $lastname = mysql_real_escape_string($_POST['last_name']);
     $address = mysql_real_escape_string($_POST['address']);
     $postcode = mysql_real_escape_string($_POST['postcode']);
     $emailaddress = mysql_real_escape_string($_POST['emailaddress']);
     $password = mysql_real_escape_string($_POST['password']);

     $query = "select emailaddress FROM mayan_users where emailaddress='$emailaddress'";
     $link = mysql_query($query)or die(mysql_error());
     $num = mysql_num_rows($link);

     if ($num>0){
      echo 'Email already exists'; //email already taken
     }

     else {
     $insert_query = "insert into `mayan_users`(`firstname`,`lastname`,`address`,`postcode`,`emailaddress`,`password`) values('$firstname','$lastname','$address','$postcode','$emailaddress','$password')";
     $result = mysql_query($insert_query)or die(mysql_error());
     echo "Registered Successfully!";
     }
}
?>

MySQL テーブル構造:

CREATE TABLE IF NOT EXISTS `mayan_users` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(255) NOT NULL,
  `lastname` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `postcode` varchar(255) NOT NULL,
  `emailaddress` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

これはあなたの問題を解決するのに役立つかもしれないと思います。

于 2013-01-05T19:31:32.243 に答える
-1

最初に、コードが SQL インジェクションに対して脆弱であることを認識する必要があります。「クエリ エラー」エラーが発生する理由は、$_POST['emailaddress'] 値の入力の書式設定である可能性があります。

また、クリア テキストのパスワードをデータベースに保存しないようにしてください。Web サイトやアプリケーションがハッキングされた場合、ハッカーがパスワードを簡単に収集できるようになります。

投稿データから HTML を削除したくない場合は、ipSafe 関数を削除してください。

これを行うことをお勧めします。基本的なセキュリティを追加しました。関数mysql_real_escape_stringwww.php.nethtmlspecialcharsを読んでください。

$firstname = ipSafe($_POST['firstname']);
$lastname = ipSafe($_POST['lastname']);
$address = ipSafe($_POST['address']);
$postcode = ipSafe($_POST['postcode']);
$emailaddress = ipSafe($_POST['emailaddress']);
$password = $_POST['password']; // please use encryption! :(

$sql = "
    SELECT `emailaddress`
    FROM `mayan_users`
    WHERE `emailaddress` = '".dbSafe($emailaddress)."'
    LIMIT 1;
";

if ( ($query = mysql_query($sql)) && (mysql_num_rows($query) < 1) )
{
    $sqlinsert = "
        INSERT INTO `mayan_users`(
            `firstname`, 
            `lastname`, 
            `address`, 
            `postcode`, 
            `emailaddress`, 
            `password`
        )
        VALUES (
            '".dbSafe($firstname)."', 
            '".dbSafe($lastname)."', 
            '".dbSafe($address)."', 
            '".dbSafe($postcode)."', 
            '".dbSafe($emailaddress)."', 
            '".dbSafe($password)."'
        )
    ";

    if (mysql_query($sqlinsert))
    {
        print "User added.";
    }
    else
    {
        print "Something went wrong: ".mysql_error();
    }
}
else
{
    // email exists in database or error
    if (mysql_errno() > 0)
    {
        print "An error occured: ".mysql_error();
    }
}

function dbSafe ($string)
{
    if (get_magic_quotes_gpc())
    {
        $string = stripslashes($string);
    }

    return mysql_real_escape_string($string);
}

function ipSafe($string)
{
    return htmlspecialchars(strip_tags($string));
}
于 2013-01-05T18:53:19.617 に答える