订阅按钮不会向数据库发送信息[重复]

问题描述 投票:-2回答:2

这个问题在这里已有答案:

我在下面的php文件有问题。当我单击发送按钮时,它会显示一个新窗口,表明连接正常并且信息已添加到数据库中,但是当我检查数据库时,既没有添加名称也没有添加电子邮件。你能帮我解决一下这个问题吗?

<html>

<body>
<?php


$name = filter_input(INPUT_POST, 'name');
$email = filter_input(INPUT_POST, 'email');

    $servername = "127.0.0.1";
    $username = "username";
    $password = "password";
    $dbname = "Subscription";
    $con = mysql_connect($servername,$username,$password,$dbname);
    if (!$con)

  {

  die('Could not connect: ' . mysql_error());

  }


    echo "Connected successfully";
    mysql_select_db("Subscription", $con);
    $name = false;
    if (isset($_POST['name'])) { $name = $_POST['name'];

    $email = false;
    if (isset($_POST['email'])) { $name = $_POST['email'];
 }
}

    echo "'You have been successfully added.' . '<br>'; ";

mysql_close($con)

?>
</body>

</html>

这是我在建议的更正后使用的代码:

$con = mysql_connect($servername,$username,$password,$dbname);
    if (!$con)

  {

  die('Could not connect: ' . mysql_error());

  }


    echo "Connected successfully";
      mysql_select_db("Subscription", $con);

    $sql =  
$sql = "INSERT INTO newsletter (name, email) VALUES ('".mysql_real_escape_string($_POST['name'])."','".mysql_real_escape_string($_POST['email'])."');";
         if (!mysql_query($sql,$con))

          {

          die('Error: ' . mysql_error());

          }

        echo "'You have been successfully added.' . '<br>'; "

mysql_close($con);

?>

它现在给我这个错误:解析错误:语法错误,意外'mysql_close'(T_STRING),期待','或';'在第38行的/opt/lampp/htdocs/project/Newsletter-signup.php中。

谢谢你的帮助Costantin,我的脑袋正在爆炸。

php mysql database submit
2个回答
0
投票

我在mariadb和mysqli oop的窗口上有xampp所以我不能发送一个complet脚本来测试,但我想你应该试试这个

$sql = "INSERT INTO newsletter (name, email)
  VALUES ('".$_POST[name]."', '".$_POST[email]."')";

或试试这个

$sql = "INSERT INTO newsletter (name, email)
  VALUES ('{$_POST[name]}', '{$_POST[email]}')";

这些“rooles”,根据经验,你不应该在PHP中避免:1。你应该使用{,}比你期望的更多“”,2。你应该避免在php脚本部分应该做某事之前发送内容(所以下次你需要添加标题或编写cookie,会话等时,你不会强制将它设置在文件的顶部,所有代码都会紧凑,易于查看/编辑

例如。我使用一个包含文件(正常的php文件:最大的文件2090行= 63kbytes或缩小的php文件与模块:3行= 37千字节)和一个页面为应用程序/网站中的每个视图与模板页面,所以你需要集中并集中您将在所有其他页面中使用的模块的所有效率。

我使用oop =我被迫导致xampp将mariadb与php 7一起获得php执行的最大速度和质量,我有mysqli驱动程序:我可以插入我自己的函数来进行转换mysqli - > mysql用户功能但我不知道需要一个由后向转换引起的延迟oop - > structural,所以我模块中的所有代码都是oop。

您的脚本也应该像这样修改

<?php

//here avoid using of output content or a space before <?php
$name = filter_input(INPUT_POST, 'name');
$email = filter_input(INPUT_POST, 'email');
//other stuff

//mysql stuff



?><html>

<body>
<?php
//output here

?>
</body>

</html>

在过去我使用了这个'因为那个家伙说mysql被弃用的组合!

function insert($table){//insert(table,'var1=$val1',"var2=$val2")

    $columns = mysql_query("SHOW COLUMNS FROM "._T($table));
    while ($row = mysql_fetch_assoc($columns)) {
        if((strpos($row['Type'],'char')!==false)or(strpos($row['Type'],'blob')!==false))
            $schema[strtolower($row['Field'])]=true;
        else
            $schema[strtolower($row['Field'])]=false;
    }//$schema

    $na = func_num_args();
    if($na==0 or strpos(func_get_arg(0),'=') !== false)
        die('the table '.$table.'its missing !!!');
    if($na>=2){
        for($k=1;$k<$na;$k++){
            $param_i=func_get_arg($k);
            if(strpos($param_i,'=') !== false){// include all "var=values" for overwrite        
                $temp_para=explode('=', $param_i );
                $params[]=$temp_para[0];
                $values[]=$temp_para[1];
                $matrix[$k]=$schema[$temp_para[0]];//matrix
            }
        }
    }
    $string="INSERT INTO `".$table.'` (';
    $la=count($params);
    $x=1;
    foreach($params as $ch => $vl){
        if($x!=$la)
            $string.='`'.$vl.'`,';
        else
            $string.='`'.$vl.'`';
        $x++;
    }
    $string.=')VALUES (';

    $x=1;
    foreach($values as $ch => $vl){
        if($matrix[$x])
            $tpl="'";
        else
            $tpl="";
        if($x!=$la)
            $string.=$tpl.$vl.$tpl.',';
        else
            $string.=$tpl.$vl.$tpl;
        $x++;
    }
    $string.=');';
    //die
    //print
    //  ($string);
mysql_query($string);
return mysql_insert_id();
}

0
投票

我再次把这些东西放在这里因为我没有可能从编辑器代码括号中放入,所以你可以正确地复制粘贴这些东西:

$sql = "INSERT INTO newsletter (name, email) VALUES ('".mysql_real_escape_string($_POST['name'])."','".mysql_real_escape_string($_POST['email'])."');";

因为php不会告诉你在前一行的末尾忘记了一个分号但会抱怨下一个'if'

无论如何我在第一篇文章中说我编辑..更好地使用像我这样的用户函数来插入东西,以便能够在关键时刻丢失括号,...或其他错误这样的错误

我不喜欢它,当其他人给予否定票只是因为某些东西是折旧的,过时的但仍然有效并且互联网上的服务器还有旧的PHP版本而不是php 7.1或最新版本。与<noscript></noscript>的演讲是一样的:如果我不使用JavaScript,你不应该拒绝访问你的内容,因为你的所有模板都是JavaScript而且你没有开放的替代品(因为你不是真正的程序员)并导致所有其他“程序员”他们这样做


复制粘贴的新答案:

echo('You have been successfully added<br>');

回波($ SQL);模具();

         if (!mysql_query($sql,$con))

          {

          die('Error: ' . mysql_error());

          }
© www.soinside.com 2019 - 2024. All rights reserved.