2013-05-11 68 views
1

這是我這是不正常的PHP代碼....Mysql查詢不接受if子句嗎?

它沒有采取查詢這是在if條件和每一個它的執行別的兼職....

<?php 
    include('admin/class.php'); 

**這裏是我的DB連接**

$hostname="localhost"; 
    $username="root"; 
    $password=""; 

$dbhandle = mysql_connect($hostname, $username, $password) 
or die("Unable to connect to MySQL"); 
    echo "Connected to MySQL<br>"; 
    $se = mysql_select_db("timesheet1234",$dbhandle) 
    or die("Could not select timesheet1234"); 
echo "connected to db"; 

if(isset($_POST['save'])) 
    { 
    echo "post if"; 

[email protected]$_POST['selpro']; 
    [email protected]$_POST['mon']; 
    [email protected]$_POST['tue']; 
    [email protected]$_POST['wed']; 
    [email protected]$_POST['thu']; 
    [email protected]$_POST['fri']; 
    [email protected]$_POST['sat']; 
    [email protected]$_POST['sun']; 

這裏是我的代碼問題出在哪裏開始,它不能正常工作

if(isset($_SESSION['user'])) 
    { 
    echo "session user"; 
     $sql="UPDATE empdaytimesheet SET `project code`='$sel',`mon`='$mon',`tue`='$tue',`wed`='$wed',`thu`='$thu',`fri`='$fri',`sat`='$sat',`sun`='$sun' where `username`='".$_SESSION['user']."'"; 

$res=mysql_query($sql,$dbhandle); 
if($res){ 
echo "<script type='text/javascript'>"; 
echo "alert('TimeSheet Saved..!')"; 
echo "</script>"; 
echo "<script type='text/javascript'>"; 
echo "window.location='my_timesheet.php'"; 
echo "</script>"; 
} 
    else 
{ 
echo "<script type='text/javascript'>"; 
    echo "alert('Some Error Occured ! Retry..!')"; 
echo "</script>"; 
echo "<script type='text/javascript'>"; 
echo "window.location='my_timesheet.php'"; 
echo "</script>"; 
} 
} 
} 
?> 
+2

您正在使用[**的**過時的數據庫API(http://stackoverflow.com/q/12859942/19068),並應使用一個[現代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin 2013-05-11 07:07:30

+0

'SET project code ='$ sel''是什麼意思? – 2013-05-11 07:08:09

+0

這是db中的一個列名.. – Ganesh 2013-05-11 07:09:02

回答

2

變化

$sql="UPDATE table empdaytimesheet SET project code='$sel',... 

$sql="UPDATE empdaytimesheet SET `project code`='$sel', ... 
      ^no table here ^   ^backticks 
+0

我首先猜到了!:P – 2013-05-11 08:02:34

+0

ya ... k但是無論輸入的是什麼,它都不會保存它所保存的數據0遠遠的所有屬性 – Ganesh 2013-05-11 08:25:17

+0

@Ganesh你可以在調用'echo $ sql'之前執行' mysql_query()'併發布結果? – peterm 2013-05-12 05:13:07

2
UPDATE table empdaytimesheet SET... 

是無效的SQL。你的意思是可能是;

UPDATE empdaytimesheet SET... 

此外,帶空格的列名需要用引號括起來 - 在MySQL的情況下 - 反引號,即;

UPDATE empdaytimesheet SET `project code`=... 

你需要知道的是,雖然你是開放的SQL注入。如果任何人發佈的值爲包含單引號的sel,則可以重寫您的SQL。例如,使用Fiddler發佈sel的值爲',username='會使您的sql更新表的用戶名列;

UPDATE empdaytimesheet SET `project code`='',username='',mon=... 

通常只要將未經檢查的後置變量放入SQL字符串中是一件壞事。這是mysql_* API被PDOmysqli淘汰的一大原因,他們有處理這個問題的方法。

+0

當我打倒它!最重要的是,你應該使用準備好的sql語句,清理你的參數。看看這個答案。 http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php「http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in- php – clamchoda 2013-05-11 07:16:14