Php 为什么在mysql数据库中将电子邮件值存储为%email?
我是一个新的项目,所以请不要介意。我使用php、html、css创建了一个代码,将一些数据存储到mysql数据库中。一切正常,但电子邮件值在数据库中存储为%email。谁能帮帮我吗 电子邮件字段的html代码:Php 为什么在mysql数据库中将电子邮件值存储为%email?,php,html,mysql,Php,Html,Mysql,我是一个新的项目,所以请不要介意。我使用php、html、css创建了一个代码,将一些数据存储到mysql数据库中。一切正常,但电子邮件值在数据库中存储为%email。谁能帮帮我吗 电子邮件字段的html代码: <div class="row"> <div class="label">Email Id</div> <div class="inputaddr"> <input type="
<div class="row">
<div class="label">Email Id</div>
<div class="inputaddr">
<input type="text" id="email" required="required" class="detail" name="email"/>
</div>
<div class="label">Category</div>
<div class="inputmobile">
<input type="text" id="category" required="required" class="shortdetail" name="category"/>
</div>
</div> <!-- end of 5th row -->
电子邮件Id
类别
.php文件:
<?php
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db('ssitdashboard', $conn) or die(mysql_error());
if(isset($_REQUEST['submit'])){
$fullname = $_POST['fullname'];
$fname = $_POST['fname'];
$mname = $_POST['mname'];
$raddr = $_POST['raddr'];
$laddr = $_POST['laddr'];
$email = $_POST['email'];
$sex = $_POST['sex'];
$dob = $_POST['dob'];
$bloodgroup = $_POST['bloodgroup'];
$mobile = $_POST['mobile'];
$rmobile = $_POST['rmobile'];
$category = $_POST['category'];
$usn = $_POST['usn'];
$branch = $_POST['branch'];
$sem = $_POST['sem'];
$eca = $_POST['eca'];
$year = $_POST['years'];
$quota = $_POST['quota'];
$que = "INSERT INTO personal_details(name, fname, mname, raddr, laddr, email, sex, dob, blood_group, mobile, rmobile, category, usn, branch, sem, eca, year, quota) VALUES ('$fullname', '$fname', '$mname', '$raddr', '$laddr', '%email', '$sex', '$dob', '$bloodgroup', '$mobile', '$rmobile', '$category', '$usn', '$branch', '$sem', '$eca', '$year', '$quota')";
if(mysql_query($que)){
// echo "<script>alert('You have registered successfully')</script>";
// echo "<script>window.open('http://www.ssit.edu.in')</script>";
header("Location:thankyou.html");
exit;
}
}
?>
尝试将SQL语句中的%email
更改为$email
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
但是,另外,请注意,因为此实现容易受到SQL注入的影响
要详细说明PDO实现,您可以针对您的情况执行以下操作:
$username = "root";
$password = "";
$host = "localhost";
$dbname = "ssitdashboard";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}catch(PDOException $ex){
die("Failed to connect: ".$ex->getMessage());
}
现在您有了一个存储在$db
中的PDO连接,您可以通过它进行查询。如果您没有使用PHP5.4,您可能需要解释一下,所以请记住这一点
否则,按如下方式创建查询语句
$query = "INSERT INTO personal_details ( name, fname, mname, raddr, laddr, email, sex, dob, blood_group, mobile, rmobile, category, usn, branch, sem, eca, year, quota ) VALUES ( :name, :fname, :mname, :raddr, :laddr, :email, :sex, :dob, :blood_group, :mobile, :rmobile, :category, :usn, :branch, :sem, :eca, :year, :quota )"
之后,您需要将$\u POST
变量中的值绑定到前面有:
的参数(如:name
)。你是这样做的:
$query_params = array( ':name' => $_POST['fullname'], ':fname' => $_POST['fname'], ':mname' => $_POST['mname'], ':raddr' => $_POST['raddr'], ':laddr' => $_POST['laddr'], ':email' => $_POST['email'], ':sex' => $_POST['sex'], ':dob' => $_POST['dob'], ':blood_group' => $_POST['bloodgroup'], ':mobile' => $_POST['mobile'], ':rmobile' => $_POST['rmobile'], ':category' => $_POST['category'], ':usn' => $_POST['usn'], ':branch' => $_POST['branch'], ':sem' => $_POST['sem'], ':eca' => $_POST['eca'], ':year' => $_POST['years'], ':quota' => $_POST['quota']);
最后,现在已经有了语句和参数,请使用先前创建的$db
变量来准备和执行语句
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
因为我们只是将变量插入数据库,所以这应该是所需要的全部。如果您正在SELECT
ing数据,您可以在完成上述操作后执行类似操作
$rows = $statement->fetchAll();
现在,您可以通过使用foreach语句来引用数据库表的每个$row
中的列标题
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
希望能帮上忙,抱歉耽搁了 尝试将SQL语句中的%email
更改为$email
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
但是,另外,请注意,因为此实现容易受到SQL注入的影响
要详细说明PDO实现,您可以针对您的情况执行以下操作:
$username = "root";
$password = "";
$host = "localhost";
$dbname = "ssitdashboard";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}catch(PDOException $ex){
die("Failed to connect: ".$ex->getMessage());
}
现在您有了一个存储在$db
中的PDO连接,您可以通过它进行查询。如果您没有使用PHP5.4,您可能需要解释一下,所以请记住这一点
否则,按如下方式创建查询语句
$query = "INSERT INTO personal_details ( name, fname, mname, raddr, laddr, email, sex, dob, blood_group, mobile, rmobile, category, usn, branch, sem, eca, year, quota ) VALUES ( :name, :fname, :mname, :raddr, :laddr, :email, :sex, :dob, :blood_group, :mobile, :rmobile, :category, :usn, :branch, :sem, :eca, :year, :quota )"
之后,您需要将$\u POST
变量中的值绑定到前面有:
的参数(如:name
)。你是这样做的:
$query_params = array( ':name' => $_POST['fullname'], ':fname' => $_POST['fname'], ':mname' => $_POST['mname'], ':raddr' => $_POST['raddr'], ':laddr' => $_POST['laddr'], ':email' => $_POST['email'], ':sex' => $_POST['sex'], ':dob' => $_POST['dob'], ':blood_group' => $_POST['bloodgroup'], ':mobile' => $_POST['mobile'], ':rmobile' => $_POST['rmobile'], ':category' => $_POST['category'], ':usn' => $_POST['usn'], ':branch' => $_POST['branch'], ':sem' => $_POST['sem'], ':eca' => $_POST['eca'], ':year' => $_POST['years'], ':quota' => $_POST['quota']);
最后,现在已经有了语句和参数,请使用先前创建的$db
变量来准备和执行语句
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
因为我们只是将变量插入数据库,所以这应该是所需要的全部。如果您正在SELECT
ing数据,您可以在完成上述操作后执行类似操作
$rows = $statement->fetchAll();
现在,您可以通过使用foreach语句来引用数据库表的每个$row
中的列标题
$statement = $db->prepare($query);
$result = $statement->execute($query_params);
$bloodArray = array();
foreach($rows as $row){
if(isset($row['blood_group'])){
$bloodArray[] = $row['blood_group'];
}
}
希望能帮上忙,抱歉耽搁了 您的查询中有一个输入错误,%email
您想要的$email
也就是说,您应该删除所有这段代码,并将其替换为没有巨大SQL注入错误的代码。您必须在插入的每个$\u POST
值上使用mysql\u real\u escape\u string
,或者您应该使用PDO
如果您有参数化查询,那么很难犯这样的错误。PDO的一个例子是:
# Using named data placeholders here
$pdo->prepare(
"INSERT INTO personal_details(name, fname, mname, raddr, laddr,
email, sex, dob, blood_group, mobile, rmobile, category, usn,
branch, sem, eca, year, quota)
VALUES (:fullname, :fname, :mname, :raddr, :laddr,
:email, :sex, :dob, :bloodgroup, :mobile, :rmobile, :category, :usn,
:branch, :sem, :eca, :year, :quota)";
# When executing you specify the data to be used. The same prepared statement can be
# executed many times with different data.
$pdo->execute(array('fullname' => $_POST['fullname'], 'fname' => $_POST['fname'], ...));
您的查询中有一个输入错误,%email
您想要的$email
也就是说,您应该删除所有这段代码,并将其替换为没有巨大SQL注入错误的代码。您必须在插入的每个$\u POST
值上使用mysql\u real\u escape\u string
,或者您应该使用PDO
如果您有参数化查询,那么很难犯这样的错误。PDO的一个例子是:
# Using named data placeholders here
$pdo->prepare(
"INSERT INTO personal_details(name, fname, mname, raddr, laddr,
email, sex, dob, blood_group, mobile, rmobile, category, usn,
branch, sem, eca, year, quota)
VALUES (:fullname, :fname, :mname, :raddr, :laddr,
:email, :sex, :dob, :bloodgroup, :mobile, :rmobile, :category, :usn,
:branch, :sem, :eca, :year, :quota)";
# When executing you specify the data to be used. The same prepared statement can be
# executed many times with different data.
$pdo->execute(array('fullname' => $_POST['fullname'], 'fname' => $_POST['fname'], ...));
错误是我在查询中使用了%email…错误是我在查询中使用了%email…你能发布你的代码以帮助调试问题吗?你准备和/或执行查询的那一行是这里重要的部分。你的问题是什么?为什么它存储在%电子邮件的名称下?这是你的决定,而不是数据库的决定…我的意思是,无论我在电子邮件字段中输入什么,它都存储为%email..在你做任何其他事情之前,你必须仔细阅读,因为这里有一些严重的问题。您也不应该在新代码中使用mysql\u query
,它已经被弃用,如果像您现在使用的那样使用会很危险,并且将在将来的PHP版本中被删除。您可以发布您的代码,因为这将有助于调试问题吗?您准备和/或执行查询的那一行是这里很重要的部分。您的问题是什么?为什么它存储在%电子邮件的名称下?这是你的决定,而不是数据库的决定…我的意思是,无论我在电子邮件字段中输入什么,它都存储为%email..在你做任何其他事情之前,你必须仔细阅读,因为这里有一些严重的问题。您也不应该在新代码中使用mysql\u query
,它已被弃用,如果按您现有的方式使用,则会很危险,并将在以后的PHP版本中删除。@tadman…如何为我的代码转义mysql\u real\u字符串?不要介意我说我是phpI新手,我强烈建议切换到PDO,因为mysql\u query
是一个古老的工件,不应该出现在新的应用程序中。否则,您需要将$\u POST['x']
的每个实例替换为mysql\u real\u escape\u字符串($\u POST['x'])
,这可能是一个很大的麻烦。请参阅上的此链接。抱歉这么严厉,但这很重要。如果您在internet上有一个应用程序,如果您忘记正确执行此操作,它可能会被彻底销毁。另外,这意味着如果人们的名字是