2011-11-18 4 views
0

안녕하세요, 데이터베이스 조회가 완료되었을 때 입력 한 값이 일치하지 않으면 다시 반향하는 방법을 찾으려고합니다.필드가없는 경우 에코하는 방법은 무엇입니까?

내가 조회를

은 ajax.js 할 요청 및 PHP를 실행하는 아약스를 사용하고 있습니다 :

function showResult(str) 
{ 
if (str=="") 
    { 
    document.getElementById("description").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("description").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?voucher="+str,true); 
xmlhttp.send(null); 
} 

및 getuser.php :

<?php 
$q=$_GET["voucher"]; 
$con = mysql_connect('localhost', 'root', ''); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("test", $con); 

$sql="SELECT * FROM redemption WHERE voucher = '".$q."'"; 

$result = mysql_query($sql); 
echo "<table> 
<tr> 
<th>Name</th> 
<th>Product</th> 
<th>Address</th> 
<th>Status</th> 
</tr>"; 

while($row = mysql_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['product'] . "</td>"; 
    echo "<td>" . $row['address'] ." ".$row['city'] ." ".$row['province'] ." ".$row['postal'] . "</td>"; 
    echo "<td>" . $row['status'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysql_close($con); 
?> 

것은 내가 좋아하는 것이 무엇 그 사람이 유효하지 않은 바우처 번호를 입력하면 "바우처 번호를 찾을 수 없다"는 오류를 반환하고 싶습니다. "상환 됨"또는 "회수되지 않음"과 같은 상태를 저장하는 열도 있습니다. 바우처 번호가 있는지 여부와 이미 바우처 번호가 사용되었는지 여부를 어떻게 확인할 수 있습니까?

$sql="SELECT * FROM redemption WHERE voucher = '".$q."'" AND status = 'not redeemed' 과 같은 구문이어야하고 else 또는 case 문을 사용한다고 가정합니다.

미리 감사드립니다.

+0

이 $ 작동하여 $ _GET – Pete

답변

1

:

$result = mysql_query($sql); 

시도 :

if (mysql_num_rows($result)==0) 
    { 
    die("Voucher number not found! Please contact us at [email protected]"); 
    } 

당신은 아마 당신이 이미 가지고있는 SQL을 사용하고 단지 두 번째 부분에 대해이 작업을 수행 할 수 있습니다

while($row = mysql_fetch_array($result)) 
    { 
    $row['status']=='redeemed' ? die("voucher already redeemed") : null; 
    echo "<tr>"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['product'] . "</td>"; 
    echo "<td>" . $row['address'] ." ".$row['city'] ." ".$row['province'] ." ".$row['postal'] . "</td>"; 
    echo "<td>" . $row['status'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

주 당신은 MySql 확장자 that is being softly deprecated을 사용하고 있으며 JavaScript 라이브러리는입니다.및 오류가 발생하기 쉬운 코드 기반을 제공합니다. Objective C의 Child가 지적했듯이이 코드는 SQL Injection에서도 유 용합니다. 내가하는 것이 좋습니다

+0

을 소독해야 a는 Datatypetinyint에 다음 그냥 구속되지 대한 구속 1과 0을 사용할 수 있습니다 사용하는 것입니다 행 [ 'status'] == '구속'? 죽는다 ("이미 바꾼 바우처") : null; 하지만 if (empty ($ result)) {die ("바우처 번호를 찾을 수 없습니다");} 않습니다. 나는'$ voucher = mysql_real_escape_string ($ _ POST [ 'voucher'])를 사용하여 폼이 제출하는 것을 막으려 고합니다. $ sql = "SELECT * FROM redemption WHO 바우처 = '". $ 바우처. "'"; $ voucher_check = mysql_query ($ sql); if (empty ($ voucher_check)) \t { \t \t die ("바우처 번호를 찾을 수 없습니다. 항목을 확인하십시오"); \t \t} else {'하지만 작동하지 않습니다. – Fahad

+0

까지 계속 진행합니다. (! voucher_check)도 시도 했는데도 여전히 작동하지 않았습니다. – Fahad

+0

해결 : '$ sql = "SELECT * FROM redemption WHERE voucher ='". $ q. " '"; $ result = mysql_query ($ sql); if (mysql_num_rows ($ result) == 0) \t { die ("바우처 번호를 찾을 수 없습니다! [email protected]으로 문의하십시오."); \t \t} – Fahad

1

SQL 쿼리는 알려진 ID의 바우처를 가져와야합니다. PHP를 사용하여 반환되는 상태 변수의 값을 확인하십시오. 쿼리에서 아무 것도 반환하지 않으면 바우처 번호가 존재하지 않습니다. 그렇지 않으면 바우처 번호가 사용되었는지 여부를 알 수 있습니다.

또한 sanitizing your inputs을 참조하십시오. 현재 코드는 SQL 주입 공격 (가장 일반적인 온라인 해킹 중 하나)에 취약합니다. 선 후

1

한 것은 status = "not redeemed"

관련 문제