-3

現在、次のスクリプトがブラウザーに成功を返すのに、実際にはデータベースにデータを挿入しない理由を理解するのに苦労しています。古い MySQL の手順を使用していることはわかっていますが、これがこの問題を引き起こしているとは思えません。前もってありがとうアリスター

<?php

ob_start();
$host="localhost"; // Host name 
$username="XXXXXX"; // Mysql username 
$password="XXXXXXXXXXXXXXXXXXX"; // Mysql password 
$db_name="XXXXXXXX"; // Database name 
$tbl_name="XXXXXXXXXX"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define Variables
$myusername=$_POST['username']; 
$password1=$_POST['password1']; 
$password2=$_POST['password2']; 
$emailadd=$_POST['emailadd']; 

if($password1==$password2){
    //Ecnrypt Password Using SHA512
    $password1 = hash("sha512", $password1);
}

else {
    //Passwords don't match return user to form with parameter
    header("location:adduser.php?pwnomatch");
}

//Check user doesn't already exist
$sqlcheckuser="SELECT * FROM $tbl_name WHERE username='$username'";
$result1=mysql_query($sqlcheckuser);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result1);

//If user exists redirect back to login form
if($count==1){
    header("location:adduser.php?userexist");
}

// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($myusername);
$password1 = stripslashes($mypassword);
$emailadd = stripslashes($emailladd);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$emailadd = mysql_real_escape_string($emailladd);
$sqlinsertuser="INSERT INTO $tbl_name ('username', 'password', 'emailaddress' VALUES ($username, $password1, $emailadd)";
mysql_query($sqlinsertuser);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result2);

// Register user then redirect to "viewuser.php" with success parameter
header("location:viewuser.php?success");

ob_end_flush();
?>
4

2 に答える 2

3
INSERT INTO $tbl_name ('username', 'password', 'emailaddress' VALUES ($username, $password1, $emailadd)

列名の括弧を閉じていません。したがって、クエリは次のようになります。

INSERT INTO $tbl_name (`username`, `password`, `emailaddress`) VALUES ($username, $password1, $emailadd)

元の投稿では気付かなかったことがあります。バッククォートの代わりに引用符を使用しました。

クエリの引用符は通常、文字列を表します。バッククォートについては次で説明します。

フィールド名の前後にバッククォートを使用する

于 2013-03-23T11:44:16.967 に答える
1

クエリ文字列に多くのエラーがあります。そのはず

$sqlinsertuser="INSERT INTO $tbl_name (`username`, `password`, `emailaddress` )
        VALUES( '$myusername', '$mypassword', '$emailadd' )";

フィールド名を渡すために、アポストロフィの代わりにバッククォートを使用していることに注意してください。の代わりに引用符を使用しますVALUES


クエリ内で間違った変数を使用しています。

于 2013-03-23T11:47:39.797 に答える