2011-11-15 45 views
0

我开发一个Web应用程序,允许用户通过Web表单条目添加到MySQL数据库MySQL的条目。 Web表单的帖子在同一个页面,一些PHP代码捕获数据并将其发送到MySQL。无论出于何种原因,任何事情都不会让它成为MySQL。这是我的代码至今不工作:添加从PHP网页

<?php 
    include("config.inc.php"); 
    $Name=$_POST['AddName']; 
    $Group=$_POST['AddGroup']; 
    $Grade=$_POST['AddGrade']; 
    $Position=$_POST['AddPosition']; 
    $Email=$_POST['AddEmail']; 
    $HomeAddress=$_POST['AddHomeAddress']; 
    $City=$_POST['AddCity']; 
    $State="SC"; 
    $Zip=$_POST['AddZIP']; 
    $CellPhone=$_POST['AddCellNumber']; 
    $HomePhone=$_POST['AddHomeNumber']; 
    $FirstPeriod=$_POST['AddFirstPeriod']; 
    $SecondPeriod=$_POST['AddSecondPeriod']; 
    $ThirdPeriod=$_POST['AddThirdPeriod']; 
    $FourthPeriod=$_POST['AddFourthPeriod']; 
    $FifthPeriod=$_POST['AddFifthPeriod']; 
    $SixthPeriod=$_POST['AddSixthPeriod']; 
    $SeventhPeriod=$_POST['AddSeventhPeriod']; 
    $Homeroom=$_POST['AddHomeroom']; 
    $dbpassword=$_POST['AddPassword']; 

    $con = mysql_connect("127.0.0.1","$username","******"); 
    if (!$con) 
     { 
     die(); 
     }   

    mysql_select_db("$database", $con); 
    $sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

    if (!mysql_query($sql,$con)) 
     { 
     die(); 
     } 
    echo "1 record added"; 

    mysql_close($con) 
    ?> 
      </body> 
    </html> 
+5

建议:罗斯阅读有关SQL注入 –

+7

二忠告:永远不会离开密码,当您发布的代码! –

+0

用你的'die()'回应一些错误信息,你可能会得到一个线索是什么问题...... – weltraumpirat

回答

2

试试这个,看看它说:

if (!mysql_query($sql,$con)) 
{ 
    die(mysql_error()); 
} 
+0

这帮了很大忙。我的SQL字符串有问题。 '你的SQL语法有错误;检查对应于您的MySQL服务器版本的手册,以在'City','SC','ZIP','Cell','Home','First','Second','Third','第四','第五','第六''第二行' – Ross

+1

您的''HomeAddress'缺少单引号。应该是''HomeAddress'' – budwiser

+0

即使修补程序(除了excape_string)仍然会出现下面的错误。 – Ross

0

mysql_close($con)应该在最后一个分号。

检查你的日志中的错误。

使用mysql_real_escape_string

+0

分号没有解决它。奇怪的是,日志中没有任何MySQL错误与此有关。我还应该尝试什么? – Ross

+0

我刚刚尝试了转义字符串,并杀死了表单。我的错误日志充满了现在这样: '[星期二11月15日19时05分36秒2011] [错误] [客户XX.XX.XX.XX] PHP公告:未定义的变量:AddSixthPeriod在/ var/WWW/ /directory/dbadd2.php在线25上,引用者:HTTP:// /目录/ dbadd.php' '[星期二年11月15 19点05分36秒2011] [错误] [客户端XX.XX.XX.XX] PHP Warning:mysql_real_escape_string():拒绝用户''@'localhost'(使用密码:NO)/ var/www/ /directory/dbadd2.php第25行,引用者:http:// /目录/ dbadd.php' – Ross

1

尝试插入echo mysql_error();。这应该给你至少开始的地方到您的查询是不正确。

0

PHP隐藏的错误。

print_r(mysql_fetch_array(mysql_query("SHOW WARNINGS", $con)));

:要进行调试,通过将这两行作为第一线的<?php标签

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

情况下也错误是在MySQL中,你可以做内开始print_r(mysql_fetch_array(mysql_query("SHOW ERRORS", $con)));

后直接MySQL查询您认为可能已失败。

0

改变你的数据库选择到

mysql_select_db("database name") 

mysql_select_db($database); 

您尝试选择指定的数据库“$数据库”,在变量美元符号的字符串,而不是名字。 也可以使用

mysql_real_escape_string($ sql)来转义这些变量(避免sql注入),你可以在其他注释中找到它的链接。

+0

感谢您的escape_string提示。会改变它。 – Ross

+0

而$数据库是一个从config.inc.php中取得的变量。 – Ross

+0

删除引号 mysql_select_db($ database); –

0

die(mysql_error()); 将解决它。 也看看逃跑。注入当前代码很容易。

如果你不想逃跑(我不知道你什么时候可以这样做),那么你可以使用$_POST而不是分配给变量并使用变量。

+0

试过逃跑,但得到了上面看到的错误消息。 – Ross

0

变化

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress','$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 
+0

注意$ homeAddress之后的额外内容。 – encodes

+0

你有没有试过上面的代码,它修复了问题中的问题 – encodes