2016-09-27 132 views
-1

我試圖插入一些數據到我的數據庫,但它只會插入 一個唯一的ID和用戶ID。其他屬性不會遵循。有什麼建議麼?插入MYSQL PHP到數據庫

圖片插入:enter image description here

<?php 

if(isset($_POST['project'])) 
{ 
    // Escape user inputs for security 
    $stripped = mysql_real_escape_string($_GET['id']); 
    $title = mysqli_real_escape_string($_POST['title']); 
    $about = mysqli_real_escape_string($_POST['about']); 
    $code = mysqli_real_escape_string($_POST['code']); 

    mysql_query("INSERT INTO cms_prosjekt (userid, title, about, code) VALUES 
     ('".$_SESSION['user']['id']."', '".$title."', '".$about."', '".$code."')") or die(mysql_error()); 

} 
?> 

HTML

<form action="" method="post"> 

    <input type="text" class="form-control" type="text" name="title" id="title" placeholder="Fullt navn" style="margin-bottom:10px"> 
    <input type="text" class="form-control" type="text" name="about" id="about" placeholder="Kode bedrift" style="margin-bottom:10px"> 
    <input type="text" class="form-control" type="text" name="code" id="code" placeholder="Passord" style="margin-bottom:10px"> 

    <button type="submit" name="project" class="button" class="btn btn-success" style="margin-bottom:10px;">Register prosjekt nå</button> 

</form> 
+0

如果它只適用於唯一條目,那麼這告訴我你有某種類型的約束。 –

+0

向你的新調試好友打招呼:'var_dump'。在你得到變量後,把'var_dump($ title)'。你看到了什麼?它裏面有什麼嗎?更好的做法是在一個字符串中建立你的查詢(如'$ query =「INSERT INTO ....'),然後是'var_dump($ query)',它輸出什麼?最後,理解它可能是有用的你的數據結構(例如,什麼類型的列是'title')? –

+4

btw,你在這裏用'mysql_real_escape_string'和'mysqli_real_escape_string()'混合API,並且需要一個連接。如果你的連接是MySQLi_,die(mysql_error()'不會工作,所以你的問題太不明瞭 –

回答

-2

你都用了mysqli的和MySQL的應該是他們的人。

if (isset($_POST['project'])) { 
     $stripped = mysql_real_escape_string($_GET['id']); 
     $title = mysql_real_escape_string($_POST['title']); 
     $about = mysql_real_escape_string($_POST['about']); 
     $code = mysql_real_escape_string($_POST['code']); 

     mysql_query("INSERT INTO cms_prosjekt (userid, title, about, code) VALUES ('" . $_SESSION['user']['id'] . "', '" . $title . "', '" . $about . "', '" . $code . "')") or die(mysql_error()); 
    } 
+3

爲什麼這個代碼?如何解釋? – DocRattie

+0

您在查詢中使用了mysqli和mysql,它應該只有mysqli或mysql。注 - mysql已棄用 –

1

您需要提供$連接參數,它是你的連接正確逃脫你的價值觀。

mysqli_real_escape_string (mysqli $link , string $escapestr)

+0

我將mysqli_real_escape_string更改爲mysql_real_escape_string。這解決了我的問題 –

+0

@VegardBerg請注意'mysql_real_escape_string'從PHP 5.5.0開始已被棄用,並且不再位於PHP 7.0.0中,如果您將代碼發佈到具有這些版本的服務器上,這可能會導致問題。 –

2

看到你的代碼,它只有一個輸入值,這告訴我,你正在使用的mysql_ API與連接,而你混合那些mysqli_real_escape_string(),並且需要一個數據庫連接它作爲第一個參數。

由於$stripped = mysql_real_escape_string($_GET['id']);是在看到您的屏幕截圖後進入db的全部內容。

這些不同的API不會混合。您需要使用相同的連接來查詢。

  • 在你的情況下,那將是mysql_* - mysql_real_escape_string()

我建議您立即開始使用準備好的語句。

注:使用mysql_real_escape_string()不完全對SQL注入保護。關於這個問題,請閱讀以下Q & A;


腳註:

的MySQL_ API已被移除PHP 7.0。如果你的服務器最終升級到它,你將不能再使用你現在的代碼。

現在是切換到使用MySQLi_或PDO API和準備好的語句的時候了。

參考文獻:

您也應該檢查是否有任何EMP ty字段。只有isset()針對您的提交按鈕是不夠的。

如果您的網站是活的或即將推出,有人可能會輸入空值,並可能觸發錯誤或在您的數據庫中插入空值,我相信您不會欣賞。

參考: