2013-07-25 70 views
2

我很喜歡製作項目,所以請不要介意。我創建了一個使用PHP,HTML,CSS存儲一些數據到MySQL數據庫的代碼。一切都很好,但電子郵件的值作爲%電子郵件存儲在數據庫中。請有人能幫助我嗎?電子郵件領域爲什麼電子郵件的值作爲%email存儲在mysql數據庫中?

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

+0

你可以發佈您的代碼,因爲這將是調試問題有幫助嗎? – Maximus2012

+0

當然............ –

+2

準備和/或執行查詢的行是在這裏很重要的部分。 – tadman

回答

1

嘗試改變%email$email你的SQL語句。

但是,此外,請查看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()); 
} 

現在,你必須存儲在一個$db PDO連接,您可以查詢通過。如果你不使用PHP 5.4,你可能想要考慮magic quotes,所以記住這一點。

否則,創建您的查詢語句,像這樣..

$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); 

由於我們只是將變量嵌入到數據庫中,所以這應該是所有需要的。如果你是SELECT雖然荷蘭國際集團的數據,你可以做這樣的事情後,你做了上述...

$rows = $statement->fetchAll(); 

現在,你可以通過使用一個foreach指列標題的數據庫表的各$row內聲明。

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

希望幫助,對不起,延遲!

+0

我應該使用PDO實現,就好像($ _ POST ['submit']){// PDO .. ...}我的意思是建立連接後 –

+0

我會驗證您正在使用的$ _POST元素在使用它們之前存在於SQL語句中。所以,不是'$ _POST ['submit']',也許你可以做'if(isset($ _ POST ['fullname'],$ _ POST ['fname'],$ _ POST ['mname'])){} '用所有'$ _POST'變量。 – Phas1c

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'], ...)); 
+0

@tadman ...如何爲我的代碼mysql_real_escape_string?不介意,因爲我說我是新的php –

+0

我會*強烈*建議切換到PDO,因爲'mysql_query'是一個古老的人工製品,沒有業務在新的應用程序。否則,你需要用'mysql_real_escape_string($ _ POST ['x'])'替換'$ _POST ['x']'的每個實例,這可能是一個很大的麻煩。看看這個鏈接[如何正確地轉義](http://bobby-tables.com/php)。對不起,如此苛刻,但這是非常重要的。如果您在互聯網上有應用程序,如果您忘記正確執行此操作,它可能會被徹底摧毀。這也意味着如果人們擁有像O'Malley這樣的名字,你的應用程序就不會崩潰。 – tadman

1

錯誤是,我用電子郵件%在查詢中...

+1

然後您應該接受@ Phas1c提交的答案... – pattyd

相關問題