2012-11-15 31 views
1

編輯:更新!第一部分工作。但是,我不確定如何在同一個IF()語句中檢查其他變量。任何人都可以幫助我嗎?單個if語句將拒絕與輸入完全相同的類。但是,我需要它也拒絕平等的天和時代。只檢查第一條記錄,而不是全部

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Register Diver</title> 
<link rel="stylesheet" href="php_styles.css" type="text/css" /> 
<meta http-equiv="content-type" 
content="text/html; charset=iso-8859-1" /> 
</head> 
<body> 
<h1>Aqua Don's Scuba School</h1> 
<h2>Registration Confirmation</h2> 
<?php 
$DiverID = $_GET['diverID']; 
if (empty($DiverID)) 
    exit("<p>You must enter a diver ID! Click your browser's Back button to return to the previous page.</p>"); 
$DBConnect = @mysqli_connect("localhost", "students", "password") 
    Or die("<p>Unable to connect to the database server.</p>" 
    . "<p>Error code " . mysqli_connect_errno() 
    . ": " . mysqli_connect_error()) . "</p>"; 
$DBName = "scuba_school"; 
@mysqli_select_db($DBConnect, $DBName) 
    Or die("<p>Unable to select the database.</p>" 
    . "<p>Error code " . mysqli_errno($DBConnect) 
    . ": " . mysqli_error($DBConnect)) . "</p>"; 

$TableName = "registration"; 
$SQLstring = "SELECT * FROM $TableName"; 
$QueryResult = @mysqli_query($DBConnect, $SQLstring); 
if (!$QueryResult) { 
    $SQLstring = "CREATE TABLE registration (diverID SMALLINT, class VARCHAR(40), days VARCHAR(40), time VARCHAR(40))"; 
    $QueryResult = @mysqli_query($DBConnect, $SQLstring) 
     Or die("<p>Unable to create the registration table.</p>" 
     . "<p>Error code " . mysqli_errno($DBConnect) 
     . ": " . mysqli_error($DBConnect)) . "</p>"; 
    echo "<p>Successfully created the registration table.</p>"; 
} 
?> 

<?php 
$Class = $_GET['class']; 
$Days = $_GET['days']; 
$Time = $_GET['time']; 
$DiverID = $_GET['diverID']; 

$DBConnect = mysqli_connect("localhost", "students", "password"); 
$DBName = "scuba_school"; 
@mysqli_select_db($DBConnect, $DBName) 
    Or die("<p>Unable to select the database.</p>" 
    . "<p>Error code " . mysqli_errno($DBConnect) 
    . ": " . mysqli_error($DBConnect)) . "</p>"; 


$sqlString= "SELECT * FROM `registration` WHERE `diverID` = $DiverID AND `class` = '$Class' AND `days` = '$Days' AND `time` = '$Time'"; 
$QueryResult = mysqli_query($DBConnect, $sqlString) or die("MySQL error: " . mysqli_error($DBConnect) . "<hr>\nQuery: $QueryResult"); 
$row = mysqli_fetch_assoc($QueryResult); 

if ($row["class"] == $Class) 
{ 

echo "<p>You are already registered for $Class</p>"; 
    } 

    elseif($row["days"] == $Days && $row["time"] == $Time) 
    { 
     echo "<p>There is a conflict with $Days or $Time</p>"; 
     } 
else 
{ 
$SQLstring = "INSERT INTO $TableName VALUES('$DiverID', '$Class', '$Days', '$Time')"; 
    $QueryResult = @mysqli_query($DBConnect, $SQLstring); 
    echo "<p>You are registered for $Class on $Days, $Time. Click your browser's Back button to register for another course or review your schedule.</p>"; 
} 


mysqli_close($DBConnect); 
?> 

</body> 
</html> 

回答

0

使用查詢,說「找每個人都具有這些細節」,然後你說:「如果發現有人=壞,否則=好。例如:

SELECT ID FROM $TableName WHERE DiverID = '$DiverId', class = '$class', days='$Days' LIMIT 1 

然後你運行該查詢,如果發現任何東西(if(count($results) > 0)...),那麼你顯示錯誤(或其他),如果它發現沒有人則可以安全添加細節

獎金: 作爲一個側面說明,請看PDO(mysql_*個功能在PHP-土地no longer supported),並確保你過濾和淨化你的投入,他們進入數據庫查詢之前(谷歌的是,)

0

查詢後,您的情況是不好的

//change this 
if ($row['class'] == "$Class") 
{ 
    echo "<p>You are already registered for $Class</p>"; 
} 

//to this 
if(!empty($row)) 
{ 
    if ($row['class'] == "$Class") 
     echo "<p>You are already registered for $Class</p>"; 
} 
0

你的問題所在在這裏:

SELECT * FROM $TableName WHERE `diverID` = $DiverID 

你查詢數據庫所有記錄匹配diverID,忽略class。這意味着,例如,如果某個潛水員被註冊到不同的類別,該查詢可能會或可能不會檢索到該記錄。你想somethingl IKE:

// this is for simplicity's sake only; please escape your input in your code!! 

$sql = "SELECT * FROM $TableName WHERE `diverID` = $DiverID AND `class` = '$Class'" 
$query = mysqli_query($sql); 

if (mysqli_num_rows($query)) { 
    // already registered 
} else { 
    // not registered, insert 
} 

話雖這麼說...

  1. 不要使用@(錯誤抑制)。關閉生產中的錯誤報告,但這(抑制錯誤)是可怕的。

  2. 不要讓您的代碼容易受到SQL injection的影響。你甚至沒有試圖逃脫任何東西,更糟,你使用的是$_GET,這也讓你容易受到CSRF攻擊。

  3. 不要動態創建表格。在腳本執行之前,您應該已經準備好了表結構。如果有的話,它們應該由安裝腳本創建。

+0

問題是我需要爲3個變量做這個。一級是我認爲最簡單的。如果我做了一個i ++或其他什麼東西去下每行呢?我不擅長編碼......這是爲了上課,所以我試圖擺脫老師提供的例子,但沒有這方面的例子。 – Tandar

+0

我已更新我的代碼,但無法弄清楚如何讓其他部分工作。你可以看一下嗎? – Tandar

相關問題