2015-08-23 82 views
-3

我看不出這個代碼有什麼問題?提交按鈕 - 形式到MySQL

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
     <!-- progressbar -->    
     <ul id="progressbar"> 
      <li class="active">Kontaktne informacije</li>     
      <li>Podatki o vozilu</li>     
      <li>Cena vozila</li>     
     </ul>    
     <!-- fieldsets -->    
     <fieldset> 
      <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
      <h3 class="fs-subtitle">Kontaktne informacije</h3> 
      <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
      <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
      <input type="email" name="email" required placeholder="Email naslov" required /> 
      <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
     </fieldset>       
     <fieldset> 
      <h2 class="fs-title">Podatki o vozilu</h2> 
      <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
      <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
      <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
      <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
      <input type="button" name="previous" class="previous action-button" value="Previous" /> 
      <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
     </fieldset>    
    </form>   

PHP

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 
$link = mysqli_connect("host", "username", "password", "database"); 

// Check connection 
if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

// Escape user inputs for security 
$ime = mysqli_real_escape_string($link, $_POST['ime']); 
$telefonska = mysqli_real_escape_string($link, $_POST['telefonska']); 
$email = mysqli_real_escape_string($link, $_POST['email']); 
$slika = mysqli_real_escape_string($link, $_POST['slika']); 

// attempt insert query execution 
$sql = "INSERT INTO oddaja (ime, telefonska, email) VALUES ('$ime', '$telefonska', '$email', '$slika')"; 
if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 

I`ve所做的一切。試着在同一頁上提交(action =「」),POST,GET。 GET甚至沒有改變URI。如果我訪問PHP文件(用於提交),它將記錄保存到數據庫,但值爲空。

+0

此一件事'<形式類型= 「提交」 名稱= 「提交」'和使用上的POST方法GET陣列。編輯:啊,你編輯。Nice Stealth ;-) –

+0

然後3列和4值 –

+0

你會得到什麼錯誤? – Jaylen

回答

0

讓你開始像老闆一樣調試你的代碼。

潛在錯誤的列表,可以occure

  • 是HTML標記是否有效?
  • PHP中的POST變量存在嗎?
  • MySQLI連接是否成功?
  • SQL中是否有任何錯誤?

尋址錯誤

所以來檢查的HTML標記你首先要熟悉HTML錯誤。如果你沒有,那麼谷歌的每一個元素,所以你瞭解他們,瞭解他們的屬性,之後,如果你確信HTML標記是正確的,然後開始調試服務器端。

var_dump是一個偉大的快速查看事情的方法,如果您有任何問題使用它,如果使用正確,你應該解決大多數問題。

如果MySQLI connection不成功,那麼您需要檢查您的憑據和數據庫名稱。

如果在SQL中有任何錯誤,您應該會看到服務器抱怨此IF您已將error_reporting設置爲正確。

你的代碼是非常程序化的,你不使用預處理語句。 There are numerous questions and discussions regarding procedural vs oop,但底線重要的是瞭解如何使代碼易於理解和易於維護。

我強烈建議你考慮prepared statements,因爲通過這種方式,查詢和數據分別發送到SQL服務器,並且這樣做的好處是因爲SQL注入問題的根源是代碼和數據。 Here對此感謝@Your Common Sense。

這裏是我對代碼的貢獻,它提供了使用預處理語句的更加面向對象的代碼方式。

HTML

<form id="msform" method="post" type="submit" name="submit" action="oddaj.php"> 
    <!-- progressbar -->    
    <ul id="progressbar"> 
     <li class="active">Kontaktne informacije</li>     
     <li>Podatki o vozilu</li>     
     <li>Cena vozila</li>     
    </ul>    
    <!-- fieldsets -->    
    <fieldset> 
     <h2 class="fs-title">Oddaj vozilo v prodajo</h2> 
     <h3 class="fs-subtitle">Kontaktne informacije</h3> 
     <input type="text" name="ime" pattern="[a-žA-ž0-9]+" placeholder="Ime in priimek" required /> 
     <input type="text" name="telefonska" pattern="^\d{3}-\d{3}-\d{3}$" placeholder="Telefonska številka" /> 
     <input type="email" name="email" required placeholder="Email naslov" required /> 
     <input type="button" name="next" class="next action-button" value="Nadaljuj" /> 
    </fieldset>       
    <fieldset> 
     <h2 class="fs-title">Podatki o vozilu</h2> 
     <h3 class="fs-subtitle">Natančno posredujte podatke!</h3> 
     <input type="text" name="twitter" placeholder="Naslov, kjer se nahaja vozilo" /> 
     <input type="text" name="facebook" placeholder="Minimalna cena vozila" /> 
     <input type="text" name="gplus" placeholder="Izberite trajanje dražbe" /> 
     <input type="button" name="previous" class="previous action-button" value="Previous" /> 
     <input type="submit" form="msform" name="submit" class="submit action-button" value="Submit" /> 
    </fieldset>    
</form>  

PHP

// if the POST variables are set 
if (isset($_POST['ime']) && $_POST['telefonska'] && $_POST['email'] && $_POST['slika']) { 

    // Object oriented style 
    $ime = mysqli_real_escape_string($_POST['ime']); 
    $telefonska = mysqli_real_escape_string($_POST['telefonska']); 
    $email = mysqli_real_escape_string($_POST['email']); 

    // Object oriented style 
    $mysqli = new mysqli("host", "username", "password", "database"); 

    // If there is an error exit 
    if ($mysqli->connect_errno) { 
     printf("ERROR: Could not connect. %s\n", $mysqli->connect_error); 
     exit(); 
    } 

    // Prepare the statement 
    $stmt = $mysqli->prepare("INSERT INTO oddaja (ime, telefonska, email) VALUES (?,?,?)"); 
    // Bind the parameters 
    $stmt->bind_param($ime,$telefonska,$email); 
    // Execute the query 
    $stmt->execute(); 
    // Close the connection 
    $stmt->close(); 
} 
1

您在這兩個表單標籤有這個,你的提交按鈕

type="submit" name="submit" 

那些需要從你的表單標籤移除。

  • 這是相沖突的。

然後,您在查詢中使用3列和4個值。

  • 您的查詢中缺少$slika的列。

  • 我還注意到,在你的窗體中沒有名稱屬性「slika」或匹配的元素。那一個人應該會投擲你的未定義索引slika通知。

另外,如果您的形式和PHP/MySQL的是同一個文件裏,你將需要使用!empty()和/或isset()對你的接線柱陣列。無論哪種方式,最好檢查空的領域。

如果是這樣,您將得到未定義的索引通知。

即:

if(
    isset($_POST['submit']) 

    && !empty($_POST['ime']) 
    && !empty($_POST['telefonska']) 
    && !empty($_POST['email']) 
    && !empty($_POST['slika']) 
) 
{ 
// do something 
} 

else{ 
    echo "Something failed. Error reporting/logs will tell you."; 
} 

使用的是在您的處置的工具。

error reporting添加到您的文件的頂部,這將有助於發現錯誤。

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

// rest of your code 

旁註:顯示錯誤應該只在分期完成,並且從不生產。

  • var_dump();
  • print_r();

看到的是通過與否。


旁註:

mysqli_connect("host" - 如果host是不是代表值,那麼就應該讀作localhost。只是說。