【问题标题】:Inputting form data into Mysql database using php使用php将表单数据输入Mysql数据库
【发布时间】:2015-09-28 09:20:31
【问题描述】:

我对 MySQL 很陌生。我正在尝试创建一个 php 脚本,它从 html 表单中读取数据并将其存储到数据库中。我还在上传一张图片,其路径保存在数据库中,图片本身存储在 c:wamp/www/uploads 中。现在,当我在提交表单后在我的 wamp 服务器上运行脚本时,我得到一个空白页。当我检查我的上传文件夹时,它仍然是空的。所以图像不会放入文件夹中。任何人都可以调试它吗?

<?php

define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'userdatadelta');

$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

$table= "CREATE TABLE `users` 
        (  `rollno` int(15) NOT NULL,
           `name` varchar(50) NOT NULL,
           `email` varchar(50) NOT NULL,  
           `password` varchar(50) NOT NULL,  
           `imageid` varchar(50) NOT NULL,  
            PRIMARY KEY (`uid`),  
            UNIQUE KEY `username` (`email`))";

mysqli_query($db,$table);

if(isset($_POST["submit"]))
{
$name = $_POST["name"];
$roll_number = $_POST["rollno"];
$department = $_POST["department"];
$year = $_POST["year"];
$email = $_POST["email"];
$password = $_POST["password"];
$filename=$_FILES['userpic']['name'];
$filetype=$_FILES['userpic']['type']; 

$name = mysqli_real_escape_string($db, $name);
$roll_number = mysqli_real_escape_string($db, $roll_number);
$department = mysqli_real_escape_string($db, $department);
$year = mysqli_real_escape_string($db, $year);
$email = mysqli_real_escape_string($db, $email);
$password = mysqli_real_escape_string($db, $password);
$password = md5($password);

$newfilename= $roll_number;

if($filetype=='image/jpeg' or $filetype=='image/png' or $filetype=='image/gif')
 {
move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$newfilename);
$filepath="upload/".$newfilename;
 }


$sql = "SELECT email FROM users WHERE email='$email'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);

if(mysqli_num_rows($result) == 1)
{
 echo "An account has been created with this email ID already. We regret the inconvenience";
}
else
{
  $query = mysqli_query($db, "INSERT INTO users (name, rollno, department, year, email, password, imagepath)VALUES ( '$name','$roll_number', $department, $year,'$email', '$password', '$filepath')");

  if($query)
   {
    echo "Thank You! You have completed registration and are now registered.";
   }
}
}
?>

编辑后的代码大部分都有效,但用于插入数据:(。2 cmets“已经使用此电子邮件 ID 创建了一个帐户。我们很抱歉给您带来不便”和“谢谢!您已完成注册并现在已注册。”似乎不起作用。

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

$DB_SERVER="localhost";
$DB_USERNAME="root";
$DB_PASSWORD="";
$DB_DATABASE="userdatadelta";

$db = mysqli_connect( "$DB_SERVER" ,"$DB_USERNAME","$DB_PASSWORD","$DB_DATABASE")or die("Cannot connect");

echo "Got connected?";

if(isset($_POST["submit"]))
{
echo "Got inside isset!";
$name = $_POST["name"];
$roll_number = $_POST["rollno"];
$department = $_POST["department"];
$year = $_POST["year"];
$email = $_POST["email"];
$password = $_POST["password"];
$filename=$_FILES['userpic']['name'];
$filetype=$_FILES['userpic']['type']; 

$name = mysqli_real_escape_string($db, $name);
$roll_number = mysqli_real_escape_string($db, $roll_number);
$department = mysqli_real_escape_string($db, $department);
$year = mysqli_real_escape_string($db, $year);
$email = mysqli_real_escape_string($db, $email);
$password = mysqli_real_escape_string($db, $password);
$password = md5($password);

$newfilename= $roll_number;

if($filetype=='image/jpeg' or $filetype=='image/png' or $filetype=='image/gif')
 {
echo "Got inside file type checking!";
move_uploaded_file($_FILES['userpic']['tmp_name'],'upload/'.$newfilename);
$filepath="upload/".$newfilename;
 }


$sql = "SELECT email FROM users WHERE email='$email'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);

if(mysqli_num_rows($result) == 1)
{
 echo "An account has been created with this email ID already. We regret the inconvenience";
}
else
{
  $query = mysqli_query($db, "INSERT INTO users (name, rollno, department, year, email, password, imagepath)VALUES ( '$name','$roll_number', $department, $year,'$email', '$password', '$filepath')");
  echo "Got inside else!";
  if($query)
   {
    echo "Thank You! You have completed registration and are now registered.";
   }
}
}
echo "Comment!";
?> 

【问题讨论】:

  • 不显示。只是一个从 HTML 页面重定向的空白页面。
  • 请注意,您的程序容易发生 sql 注入。你真的应该用谷歌搜索。此外,您尝试在每个请求上创建表。在第一次请求之后,它已经存在并且查询将失败。如果您的表存在,请检查数据库。
  • @AlbertHendriks 哦,是的,我已将其更正为“如果不存在”。我还认为 mysqli_real_escape_string 应该负责 sql 注入?错了吗?
  • 对不起,我读了你的代码很快。你说得对。注意顺便说一句 md5 被卡了,你应该使用 sha256 stackoverflow.com/questions/1752477/…

标签: php mysql database


【解决方案1】:

这么长的代码 sn-p 很难确定可能的错误,因为 空白页 可能由多种原因造成。

可能与您的代码有关的一些典型问题:

  • 例如,PHP 语法错误,例如多余的或缺少的大括号({})。你发的那篇好像没问题,但是你不知道你用的是哪个PHP版本。

  • 拒绝写入权限上传路径。要么是因为权限错误,要么是路径不正确。您没有指定您的操作系统,但假定它是 Windows。有些系统使用不区分大小写的路径,有些则区分大小写,请检查当前系统的版本和配置。

  • 对于空白页问题,即使不会引发错误,也会有一个执行序列,其中两个 echo 调用都没有被触发。

一般来说,PHP 不会向用户输出任何错误,因为在生产环境中这可能会带来安全风险。

在您的开发环境中,您可以启用错误输出以快速解决问题所在。

第一次打开&lt;?php子句之后添加以下行:

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

现在 PHP 所抱怨的所有错误都应该输出到浏览器。

注意,这在生产环境中不被认为是一种好的做法。应在日志文件中查找错误。使用它来帮助自己在开发时间调试和解决当前问题。如果您正在处理大型项目,请考虑借助 PHP 框架来增强您的编码体验。

【讨论】:

  • 包含那段代码后似乎没有显示任何错误。还是空白页。
  • PHP 语法似乎没问题。另一方面,检查您是否只有两个嵌套 if 的 echo 调用。如果 mysqli_num_rows($result) == 1 为假且 $query 为假,则可能会调用 。当您在流程的最后回显某些内容时会发生什么。 (就在您的结束 ?> 标签之前)?
  • 实际上我稍微编辑了我的代码。几个小错误。该过程结束时的回声似乎有效。但不在 mysqli_num_rows($result) == 1 或 $query 检查中。我怀疑插入语句不起作用。它的语法有什么问题吗?
  • 阅读 mysqli_query() 函数规范以了解它是如何工作的:php.net/manual/en/mysqli.query.php 你可以通过 var_dump($query) 来检查它返回的内容,很可能是一个假值。
  • 嗯..我不确定插入代码有什么本质上的问题。你能指出我做错了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多