无法发布表单、MySQL、PDO/PHP
我正试图获得两个输入字段,以便在问答的帮助下发布到我的MySQL数据库。但是,我的数据库中没有输入,或者我的页面上没有任何错误。我错过了什么?DB凭据可以工作,因为我的页面上也有它们的输出(此处未列出) 我在另一个线程的代码中添加了以下内容(作为稍后包含的cfg.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
}
}
?>
表格的代码:
<?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>