2014-03-29 26 views
0

我剛剛獲得了使用PHP將信息存儲在mysql數據庫中的html表單。這不是製作桌子,我不知道爲什麼。下面是HTML代碼(順便說一句,我不有關SQL注入becouse這種關心只是學校)我的代碼有什麼問題PHP/mysql

<?php 


@$ime = $_POST['ime']; 
@$prezime = $_POST['prezime']; 
@$email = $_POST['email']; 
@$adresa = $_POST['adresa']; 
@$misljenje = $_POST['misljenje']; 


$conn = mysqli_connect("localhost","root",""); 
mysqli_query($conn,"create database baza_podataka"); 
mysqli_select_db($conn,"baza_podataka"); 
mysqli_query($conn,"create table 'podatci' (id int primary key auto_increment, ime varchar(10), prezime varchar(10), email varchar(20), adresa varchar(20), misljenje varchar(100))"); 
mysqli_query($conn,"INSTERT INTO `podatci` VALUES ('$ime','$prezime','$email','$adresa','$misljenje')"); 

?>

和HTML

<form name="forma" action="obrada.php" method="post"> 
      <label>Ime :</label> 
        <input type="text" id="ime" size="20"/><br><br> 

      <label>Prezime :</label> 
        <input type="text" id="prezime" size="20"/><br><br> 

      <label>E-mail :</label> 
        <input type="text" id="email" size="20"/><br><br> 

      <label>Adresa :</label> 
        <input type="text" id="adresa" size="40"/><br><br> 

      <label>Vase misljenje :</label><br><br> 
        <textarea name="misljenje" id="misljenje"></textarea> 

      </label><input type="submit" id="submit" name="submit"/> 
+0

**危險**:您很容易[SQL注入攻擊](http://bobby-tables.com/)**,您需要[防禦](http://stackoverflow.com/問題/ 60174/best-way-to-prevent-sql -injection-in-php)自己從。 – Quentin

+0

您應該[瞭解如何正確使用標籤元素](http://www.456bereastreet.com/archive/200711/use_the_label_element_to_make_your_html_forms_accessible/)。如果沒有for屬性或者表單控件,標籤就沒用了。 – Quentin

+2

「順便說一句,我不在乎SQL注入因爲這只是爲了學校」你應該時刻關心編寫安全的代碼。養成編寫錯誤代碼的習慣很容易。 – ceejayoz

回答

0

你有很多的問題..

  • 刪除錯誤抑制運算符。 @$ime = $_POST['ime'];從所有變量中刪除@
  • 無論何時調用此腳本,您都會每次創建數據庫。 [這是完全錯誤的]
  • 它是INSERT而不是INSTERT在您的查詢。
  • 您正在將$_POST參數直接傳遞到您的查詢中,這使您100%易受SQL注入的攻擊。切換到準備好的語句來克服這一點。
+0

當我刪除@,我得到注意:未定義的索引:ime in /Applications/XAMPP/xamppfiles/htdocs/obrada.php on line 4 注意:未定義的索引:prezime在/ Applications/XAMPP/xamppfiles/htdocs/obrada中。 php on line 5 注意:未定義索引:在/ Applications/XAMPP/xamppfiles/htdocs/obrada中的電子郵件。php on line 6 注意:未定義的索引:第7行中的/Applications/XAMPP/xamppfiles/htdocs/obrada.php中的地址 而且它還沒有創建表? – Phelippe

+0

在你的表單中爲你的所有變量添加name屬性。'

' –

-1

1)使用INSERT代替INSTERT

mysqli_query($conn,"INSERT INTO `podatci` VALUES ('$ime','$prezime','$email','$adresa','$misljenje')"); 

2)使用您的代碼@mysqli_real_escape_string

3)不要使用錯誤抑制逃生您的所有數據,而不是使用isset()函數來檢查它是否設置。

$conn = mysqli_connect("localhost","root",""); 
$ime = isset($_POST['ime']) : mysqli_real_escape_string($conn, $_POST['ime']) ? ''; 
$prezime = isset($_POST['prezime']) : mysqli_real_escape_string($conn, $_POST['prezime']) ? ''; 
$email = isset($_POST['email']) : mysqli_real_escape_string($conn, $_POST['email']) ? ''; 
$adresa = isset($_POST['adresa']) : mysqli_real_escape_string($conn, $_POST['adresa']) ? ''; 
$misljenje = isset($_POST['misljenje']) : mysqli_real_escape_string($conn, $_POST['misljenje']) ? ''; 

4)最後,沒有必要爲每個負載創建數據庫和/或表,您應該只做一次。

0

首先我的HTML代碼沒有看到</form>

使用try $_REQUEST['htmlvariablename'];

ime = $_REQUEST['ime']; 
$prezime = $_REQUEST['prezime']; 
$email = $_REQUEST['email']; 
$adresa = $_REQUEST['adresa']; 
$misljenje = $_REQUEST['misljenje']; 

...正如前面提到的,你很容易受到SQL注入。