2012-01-15 4 views
0

누군가가 나를 도와 줄 수 있는지 궁금합니다.PHP 저장 기록 오류 메시지

회원 기록을 수정할 수있는 관리 양식을 작성하려고합니다.

내가 작성한 코드는 아래에 나와 있으며 전자 메일 주소가 제공된 레코드가없는 경우 적절한 메시지를받는 mySQL 데이터베이스에서 레코드를 성공적으로 검색 할 수 있습니다.

<?php 
mysql_connect ("host","user","password") or die (mysql_error()); 
mysql_select_db ("database"); 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_POST['search'])) { 
     $searchemailaddress = $_POST['searchemailaddress']; 
     $sql = mysql_query("select * from userdetails where emailaddress like '$searchemailaddress'"); 
    if (mysql_num_rows($sql) == 0) 
     $msg = 'There are no member records set up with this email address, please try again!'; 
    } 
    while ($row = mysql_fetch_array($sql)){ 
     $emailaddress = $row['emailaddress']; 
     $forename = $row['forename']; 
     $surname = $row['surname']; 
     $subscriptionexpiration = $row['subscriptionexpiration']; 
    } 
    } 
    if (isset($_POST['update'])) { 
     $emailaddress = $_POST['emailaddress']; 
     $forename = $_POST['forename']; 
     $surname = $_POST['surname']; 
     $subscriptionexpiration = $_POST['subscriptionexpiration']; 
     $sql = mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress', `forename` = '$forename',`surname` = '$surname',`subscriptionexpiration` = '$subscriptionexpiration' LIMIT 1"); 
     $msg = 'This members records have been successfully updated!'; 
    } 
?> 
<html> 
<head> 
<title>Search the Database</title> 
<style type="text/css"> 
<!-- 
.style1 {font-family: Calibri 
} 
.style9 { font-family: Calibri; 
    font-size: 24px; 
    background-color: #78AFC5; 
} 
.style7 { 
    font-family: Calibri; 
    font-size: 16px; 
    background-color: #FFFFFF; 
} 
--> 
</style> 
</head> 
<body> 

    </p> 
    <p class="style1">&nbsp;</p> 
<div align="center"><span class="style9">Search &amp; Amend User Records </span></div> 
<p class="style7"><span class="style10"> 
    <?php 
if (isset($msg)) // this is special section for 
// outputing message 
{ 
?> 
</span> 
<p class="style7"> 
    <?=$msg?> 
    <p class="style7"><span class="style10"> 
    <?php 
} 
?> 
    </span> 
    <form action="searchandamend.php" method="post"> 
    <table width="393" border="1"> 
    <tr> 
     <td width="161"><span class="style1">Search:</span></td> 
     <td width="207"><span class="style1"> 
     <input name="searchemailaddress" type="text" id="searchemailaddress" size="25"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">Email Address:</span></td> 
     <td><span class="style1"> 
     <input name="emailaddress" type="text"value="<?php echo $emailaddress;?>" size="25"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">First Name:</span></td> 
     <td><span class="style1"> 
     <input name="forename" type="text" value="<?php echo $forename;?>" size="20"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">Surname:</span></td> 
     <td><input name="surname" type="text" value="<?php echo $surname;?>" size="20"/></td> 
    </tr> 
    <tr> 
     <td><span class="style1">Subscription Expiry Date:</span> </td> 
     <td><input name="subscriptionexpiration" type="text" id="subscriptionexpiration" value="<?php echo $subscriptionexpiration;?>" size="10"/></td> 
    </tr> 
    </table> 
    <p><br/> 
    <input type="submit" name="search" value="Search Records"> 
    <input name="update" type="submit" value="Update Record"> 
</p> 
</form> 
</body> 
</html> 

그러나 레코드의 일부를 변경하려고하면 문제가 발생합니다. 변경 사항이 저장되고 올바른 '레코드 업데이트 됨'메시지가 나타납니다.이 오류 메시지가 나타날 수도 있습니다. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homepages/2/d333603417/htdocs/development/searchandamend.php on line 14 줄 14는 내 코드에서이 줄이됩니다. while ($row = mysql_fetch_array($sql)){ 지금 당분간이 작업을하고 있습니다. 문제가 무엇인지 알아내는 것 같지 않습니다.

나는 누군가가 이걸 좀 들여다 보면서 내가 잘못한 곳을 알려주고 있는지 궁금해했다.

많은 감사

+1

if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST["search"])) { $searchemailaddress = $_POST['searchemailaddress']; $result = mysql_query("select * from userdetails where emailaddress like '$searchemailaddress'"); if (mysql_num_rows($result) == 0) $msg = 'There are no member records with the email address you have provided, please try again!'; else while ($row = mysql_fetch_array($result)){ $emailaddress = $row['emailaddress']; $forename = $row['forename']; $surname = $row['surname']; $subscriptionexpiration = $row['subscriptionexpiration']; $msg = 'Record retrieved!'; } } if (isset($_POST["update"])) { $emailaddress = $_POST['emailaddress']; $forename = $_POST['forename']; $surname = $_POST['surname']; $result = mysql_query("UPDATE 'userdetails' SET 'emailaddress' = '$emailaddress', 'forename' = '$forename','surname' = '$surname', 'subscriptionexpiration' = '$subscriptionexpiration' LIMIT 1"); $msg = 'This members record has been successfully updated!'; } } 

종류는 간주한다. – Cyclonecode

+0

mysql_real_escape_string()은 SQL 쿼리 문자열에 포함 된 변수입니다. 여기에 거대한 보안 구멍이 있습니다! –

답변

0

모든, 시간을내어 진심으로 감사가 내 게시물에 댓글을 올리려면 :

당신은 아마 이런 식으로 뭔가를 할 수 있습니다.

조금 더 살펴보고 모두들 무슨 말을했는지 생각한 후에 잘 작동하는 다음을 생각해 냈습니다. 그것은 당신이 업데이 트를 수행 할 때`$ _POST는 [ '검색']`도 설정되어있는 것 같다

+0

@ IRHM- 코드를 들여 쓰기하면 훨씬 쉽게 읽을 수 있습니다. 이것이 올바른 해결책이라면 자신의 대답을 받아 들여야합니다. – Cyclonecode

0

는 연결이 성공적으로 생성되지 않는 당신이 반환 부울에서 가져 오기 및 배열하려고하는 것이 가능합니까?

1
if (mysql_num_rows($sql) == 0) 

브래킷을 열지 않았습니다! 블록은 while 전에 종료하는 경우

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_POST['search'])) { 
     $searchemailaddress = $_POST['searchemailaddress']; 
     $sql = mysql_query("select * from userdetails where emailaddress like '$searchemailaddress'"); 
     if (mysql_num_rows($sql) == 0) 
      $msg = 'There are no member records set up with this email address, please try  again!'; 
     } 
    while ($row = mysql_fetch_array($sql)){ 
     $emailaddress = $row['emailaddress']; 
     $forename = $row['forename']; 
     $surname = $row['surname']; 
     $subscriptionexpiration = $row['subscriptionexpiration']; 
    } 
} 

} 이것은 isset($_POST['search'])한다.

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_POST['search'])) { 
     $searchemailaddress = $_POST['searchemailaddress']; 
     $sql = mysql_query("select * from userdetails where emailaddress like '$searchemailaddress'"); 
     if (mysql_num_rows($sql) == 0) { 
      $msg = 'There are no member records set up with this email address, please try  again!'; 
     } 
     while ($row = mysql_fetch_array($sql)) { 
      $emailaddress = $row['emailaddress']; 
      $forename = $row['forename']; 
      $surname = $row['surname']; 
      $subscriptionexpiration = $row['subscriptionexpiration']; 
     } 
    } 
}