2017-09-22 14 views
0

我真的爲此而努力......檢查| Drop |創建|插入表用PHP的ODBC

我得到這個東西的工作方式約90%...什麼我有如果表中不存在,正在覈實麻煩或不...

我有2個像頁面,第一個只發送$_POST到主要功能頁面。這是一個單一的輸入。

場景:一個輸入提交到submit.php並插入到臨時數據庫中,然後在此頁面上可以插入更多輸入,直到完成...我們將在那裏停止。

它需要做什麼,檢查以確保表格從一開始就不存在,如果存在,則將其放下。創建表格 - 然後插入並更新行數。

這是我到目前爲止有:

#17 - $FirstSub = $_SESSION['version']; //True if this is the first time page has loaded 

    if(isset($conn)){ // Check connection 
//create table string 
$createTemp = "CREATE TABLE temp_Ticket_Tracker(
PickT_Num int NOT NULL UNIQUE, 
us_name varchar(20) NOT NULL, 
ticket_status varchar(10) NOT NULL, 
time_stamp varchar(20) NOT NULL, 
PRIMARY KEY(PickT_Num) 
)"; 
    //Insert String 
$insert = "INSERT INTO temp_Ticket_Tracker VALUES ('". $_POST['PickNum'] ."','{$_SESSION['User']}','GREEN','{$TimeStamp}')"; 
//row count string 
$query = "Select COUNT(*) as TicketNum FROM temp_Ticket_Tracker"; 
//Duplicate tester string 
$tested = "SELECT PickT_Num FROM temp_Ticket_Tracker WHERE '". $_POST['PickNum'] ."' = PickT_Num"; 
//Drop's table 
$drop = "DROP TABLE temp_Ticket_Tracker"; 


//Here is where it starts to screw up - 
#35 - $firstTest = odbc_exec($conn,$query); //execution string 
$NumRows = odbc_fetch_array($firstTest); //Sets array 
$countingRows = $NumRows['TicketNum']; 


//This is "Supposed" to ask is this the first time you've been here and does the table exist? Answer (Yes, Yes) 

if($FirstSub === 'true' && $countingRows >= 1){ 
    odbc_exec($conn,$drop); 
    odbc_exec($conn,$createTemp); 
    odbc_exec($conn,$insert);   
    $_SESSION['version'] = 'false'; 
    $int = odbc_exec($conn,$query); 
    $intNum = odbc_fetch_array($int); 
    $TicCount = $intNum['TicketNum']; 
    odbc_close($conn); 

    //Again asks if first time and does the table exist? Answer should be(Yes, NO) 
}else if($FirstSub === 'true' && !$firstTest){ 
    odbc_exec($conn,$createTemp); 
    odbc_exec($conn,$insert);   
    $_SESSION['version'] = 'false'; 
    $int = odbc_exec($conn,$query); 
    $intNum = odbc_fetch_array($int); 
    $TicCount = $intNum['TicketNum']; 
    odbc_close($conn); 


    //Asks if this is first time and assums Table is created 
}else if($FirstSub === 'false'){ 
     $is = odbc_exec($conn,$tested); 
     $test = odbc_fetch_array($is); 

    //Check to make sure duplicate has not been entered 
    if($test == NULL){ 
     odbc_exec($conn,$insert); 
     $int = odbc_exec($conn,$query); 
     $intNum = odbc_fetch_array($int); 
     $TicCount = $intNum['TicketNum']; 
     odbc_close($conn); 

     //Passes error if duplicate is used 
    }else{ 
     echo '<script type="text/javascript">', 
     'window.onload = function() {', 
     'document.getElementById("error").innerHTML = "You have already scanned this ticket!";};', 
     '</script>'; 
     $int = odbc_exec($conn,$query); 
     $intNum = odbc_fetch_array($int); 
     $TicCount = $intNum['TicketNum']; 

    } 

}else{ 
    echo '<p> OOPS! looks like we may have a problem!</p>'; 
    $_SESSION['version']='true'; 
} 
    }else{echo "Try again...";} 

一切完美的作品!除了當整個表被提交(關閉屏幕),並臨時表被刪除...

輸入進來的[FirstSub = "true" & table does NOT Exist]

我得到這個錯誤...

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'temp_Ticket_Tracker'., SQL state S0002 in SQLExecDirect in C:\Program Files (x86)\EasyPHP5.3.0\www\idea\ticket\greenFunction.php on line 35

Warning: odbc_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP5.3.0\www\idea\ticket\greenFunction.php on line 36 (Line numbers look like #n -)

回答

0

我想您正在尋找此SQL命令:

IF OBJECT_ID ('YourDatabase.YourSchema.temp_Ticket_Tracker') IS NOT NULL 
DROP TABLE Temp_Ticket_Tracker 

這將檢查表是否存在,然後刪除它,如果它。用它替換$drop,並且可以取出一些其他表格檢查邏輯。

$drop = "IF OBJECT_ID ('YourDatabase.YourSchema.temp_Ticket_Tracker') IS NOT NULL DROP TABLE Temp_Ticket_Tracker"; 
+0

非常感謝!我會更新我的代碼。 –