Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法发布表单、MySQL、PDO/PHP_Php_Mysql_Database_Forms_Pdo - Fatal编程技术网

无法发布表单、MySQL、PDO/PHP

无法发布表单、MySQL、PDO/PHP,php,mysql,database,forms,pdo,Php,Mysql,Database,Forms,Pdo,我正试图获得两个输入字段,以便在问答的帮助下发布到我的MySQL数据库。但是,我的数据库中没有输入,或者我的页面上没有任何错误。我错过了什么?DB凭据可以工作,因为我的页面上也有它们的输出(此处未列出) 我在另一个线程的代码中添加了以下内容(作为稍后包含的cfg.php文件): 我的结局: } } ?> 表格的代码: <?php include 'cfg.php' ?> <div class="container"> <di

我正试图获得两个输入字段,以便在问答的帮助下发布到我的MySQL数据库。但是,我的数据库中没有输入,或者我的页面上没有任何错误。我错过了什么?DB凭据可以工作,因为我的页面上也有它们的输出(此处未列出)

我在另一个线程的代码中添加了以下内容(作为稍后包含的cfg.php文件):

我的结局:

    }
}
    ?>
表格的代码:

<?php include 'cfg.php' ?>





<div class="container">
    <div class="container__item">
        <form class="form"  method="post"> <!-- updated with method as suggested by RamRaider in this thread -->
            <input type="text" name="name" class="form__field" placeholder="Your name" style="margin-bottom:10px;"/><br> <!-- updated from name-type to text-type as suggested by Funk Forty Niner and RamRaider in this thread -->
            <input type="email" name="email" class="form__field" placeholder="Your E-Mail Address" />
            <button type="submit" name="submit" class="btn btn--primary btn--inside uppercase">Send</button>
        </form>
    </div>

</div>


发送
同时,感谢@Funk-四十九更勤奋,并指出了其中一个表单输入元素的错误

<input type="name" ...
因此,当您需要包含文件(如db连接脚本)时,请在使用
include
require
之前,像这样使用
set\u include\u path

set_include_path 'C:\wwwroot\public\html\inc';
include 'db.php';
/*etc*/
-


我最终放弃了这一切,而是使用了以下内容,因为我还不太熟悉这一点。最后,我甚至想不出如何为推理使用变量,并将它们存储在其他地方以便重复使用:

cfg.php:

<?php
// Insert data into mysql database called "subscribers" using PDO

if(isset($_POST['submit']))
{
try {
$pdoConnect = new PDO("mysql:host=mydomain.com;dbname=mydatabase", "myusername", "mypassword");
} catch (PDOException $exc) {
    echo $exc->getMessage();
    exit();
}

    $name = $_POST['name'];
    $email = $_POST['email'];

    $pdoQuery = "INSERT INTO `subscribers`(`name`, `email`) VALUES (:name,:email)";
    $pdoResult = $pdoConnect->prepare($pdoQuery);

    $pdoExec = $pdoResult->execute(array(":name"=>$name,":email"=>$email));

    if($pdoExec)
    {
        echo 'Thank you for your submission!';
    } else {
        echo 'Your sumission failed!';
    }
}
?>

index.php

<div class="container">
    <div class="container__item">
        <form class="form" method="post">
            <input type="text" name="name" class="form__field" required placeholder="Your name" style="margin-bottom:10px;"/><br>
            <input type="email" name="email" class="form__field" required placeholder="Your E-Mail Address" />
            <button type="submit" name="submit" class="btn btn--primary btn--inside uppercase">Send</button>
        </form>
    </div>

</div>


发送
您没有完全按照发布的那样关注问答。错误报告将是您在这里的朋友;将
else{echo“Not set”;}
添加到您的
If(isset($\u POST['submit']){…}
中,您将看到您将得到一个“Not set”echo'd。您的输入之一不是有效的输入标记,即使在HTML 5中也是如此。谢谢!错误报告在E_ALL级别处于打开状态,例如,当我删除结束括号时,它会起作用。我现在注意到输入标签错误“name”,谢谢!PhpStorm甚至指出了这一点,但我没有看-u-,但仍然不起作用,没有错误。甚至还添加了else语句。可能是因为它是一个按钮而不是一个输入字段吗?/:还添加了下面RamRaider建议的method=“post”。欢迎使用。嗯,按钮有一个提交类型,所以应该可以工作。现在请参阅Ram的答案,并在下面进行评论以获得更多帮助。确保您的查询启动并具有正确的连接。确保。。。但是你错过了一些东西。再次查看他们的输入;-)足够正确-除了表单标签没有看太远…谢谢你的插件;-)现在剩下的就是如果这种联系发生了。看到他们的课程,不确定这是否有效,并且似乎缺少代码。好吧,球现在在OP的球场上,就像它一样;-)谢谢你的意见!仍然不返回任何内容,甚至不返回错误。错误报告正在运行(通过删除cfg.php中的最后一个蝶形括号进行检查)。我的数据库里什么都没有。应用了所有建议的更改(和Funky 49)。你能从cfg.php添加真正的代码吗?这是否被使用?下一个谜团:我如何将echo移动到index.php中的div?我将整个代码从if($pdoExec)移动到第二个echo的右括号中。我得到“”意外变量:pdoExec位于..../index.php的第XX行“”。但是,当提交表单时,会显示成功消息,并且没有错误…解决了它!我发现我的if/else语句超出了旧的“if(isset($\u POST['submit']){”,所以将其包装在“if(isset($\u POST['submit']){”中,无论我在哪里使用它都可以解决它。
<input type="name" ...
<input type="text" ...
example directory structure

Directory of C:\wwwroot\public\html

20/01/2018  18:08    <DIR>          .
20/01/2018  18:08    <DIR>          ..
20/01/2018  18:07    <DIR>          assets
20/01/2018  18:08    <DIR>          content
20/01/2018  18:07    <DIR>          css
20/01/2018  18:07    <DIR>          images
20/01/2018  18:07    <DIR>          inc
20/01/2018  18:07    <DIR>          scripts
set_include_path 'C:\wwwroot\public\html\inc';
include 'db.php';
/*etc*/
<?php

    $verbose=false;

    try{

        /*

            database connection script
            --------------------------
            db.php

        */

        $dbuser='root';
        $dbpwd='p4$$w0rD';
        $dbhost='localhost';
        $dbname='geronimo';


        /* optional attribibutes for the connection */
        $options=array( 
            PDO::ATTR_CURSOR                    =>  PDO::CURSOR_SCROLL,
            PDO::ATTR_PERSISTENT                =>  false,
            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY  =>  true,
            PDO::ATTR_EMULATE_PREPARES          =>  false,
            PDO::MYSQL_ATTR_INIT_COMMAND        =>  "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci', @@sql_mode = STRICT_ALL_TABLES, @@foreign_key_checks = 1"
        );
        $dsn='mysql:host='.$dbhost.';port='.$dbport.';dbname='.$dbname.';charset=utf-8';


        $conn=new PDO( $dsn, $dbuser, $dbpwd, $options );

    }catch( PDOException $e ){
        exit( $verbose ? $e->getTraceAsString() : 'Database connection error' );
    }

?>
<?php
    if( isset( $_POST['submit'], $_POST['name'], $_POST['email'] ) ) {
        try{
            /*

                Include the database connection. The path used to this
                needs careful attention

            */
            include 'db.php';

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


            $sql='insert into `subscribers` (`name`, `email`) values ( :name, :email )';
            $stmt=$conn->prepare( $sql );

            if( $stmt ){

                $stmt->bindParam(':name', $name );
                $stmt->bindParam(':email', $email );

                $result=$stmt->execute();
                echo $result ? 'ok' : 'fu manchu say ver bad foo';

            } else {
                throw new Exception('Failed to prepare sql query');
            }
        }catch( Exception $e ){
            echo $e->getMessage();
        }
    }
?>
<?php
// Insert data into mysql database called "subscribers" using PDO

if(isset($_POST['submit']))
{
try {
$pdoConnect = new PDO("mysql:host=mydomain.com;dbname=mydatabase", "myusername", "mypassword");
} catch (PDOException $exc) {
    echo $exc->getMessage();
    exit();
}

    $name = $_POST['name'];
    $email = $_POST['email'];

    $pdoQuery = "INSERT INTO `subscribers`(`name`, `email`) VALUES (:name,:email)";
    $pdoResult = $pdoConnect->prepare($pdoQuery);

    $pdoExec = $pdoResult->execute(array(":name"=>$name,":email"=>$email));

    if($pdoExec)
    {
        echo 'Thank you for your submission!';
    } else {
        echo 'Your sumission failed!';
    }
}
?>
<div class="container">
    <div class="container__item">
        <form class="form" method="post">
            <input type="text" name="name" class="form__field" required placeholder="Your name" style="margin-bottom:10px;"/><br>
            <input type="email" name="email" class="form__field" required placeholder="Your E-Mail Address" />
            <button type="submit" name="submit" class="btn btn--primary btn--inside uppercase">Send</button>
        </form>
    </div>

</div>