2

我是制作项目的新手,所以请不要介意。我使用 php、html、css 创建了一个代码来将一些数据存储到 mysql 数据库中。一切都很好,但电子邮件值在数据库中存储为 %email。任何人都可以帮助我吗?

电子邮件字段的html代码:

<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 -->

.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;

    }

}

?>

在数据库中,电子邮件字段被视为 varchar(30)

4

3 回答 3

2

您的查询中有错字,%email您打算在哪里$email

话虽如此,您应该删除所有这些代码并将其替换为其中没有巨大 SQL 注入错误的代码。要么你必须mysql_real_escape_string在每一个被插入的值上使用$_POST,要么你应该使用 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'], ...));
于 2013-07-25T17:07:59.370 回答
1

尝试在您的 SQL 语句中更改%email为。$email

但是,此外,请查看PDO,因为此实现易受 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());
}

现在您已经存储了一个 PDO 连接$db,您可以在其中进行查询。如果您不使用 PHP 5.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 )"

之后,您希望将$_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);

由于我们只是将INSERT变量输入到数据库中,这应该就是我们所需要的。但是,如果您正在SELECT获取数据,则可以在完成上述操作后执行类似的操作...

$rows = $statement->fetchAll();

$row现在您可以通过使用 foreach 语句来引用每个数据库表中的列标题。

$bloodArray = array();
foreach($rows as $row){
   if(isset($row['blood_group'])){
       $bloodArray[] = $row['blood_group'];
   }
}

希望对您有所帮助,抱歉耽搁了!

于 2013-07-25T17:07:24.003 回答
1

错误是我在查询中使用了 %email ...

于 2013-07-25T17:08:10.343 回答