2014-11-06 2 views
1

Я обновил код вопроса У меня все еще есть ошибки, но не обновляет запись. также нужно понять, как записать запись # успешно обновлено. Я застрял на этой странице обновления.Попытка обновления записи с PDO

<?php 
 
error_reporting(E_ERROR | E_PARSE); 
 
require_once("db_connect.php"); 
 
    $id = $_REQUEST['id']; 
 
    $lanId = $_REQUEST['lanId']; 
 
    $name= $_REQUEST['name']; 
 
    $department = $_REQUEST['department']; 
 
    $manager= $_REQUEST['manager']; 
 
    $request = $_REQUEST['request']; 
 
$request_description = $_REQUEST['request_description']; 
 
    $request_comments = $_REQUEST['request_comments']; 
 
    $status = $_REQUEST['status']; 
 
    $comments = $_REQUEST['comments']; 
 
    $compUser = $_REQUEST['compUser']; 
 
    $compDt = $_REQUEST['compDt']; 
 
    
 
    
 
    $sql = "UPDATE requests SET " . 
 
\t \t \t \t "lanId = '" . $lanId . "', ". 
 
\t \t \t \t "name = '" . $name . "', ". 
 
\t \t \t \t "department = '" . $department . "', ". 
 
\t \t \t \t "manager = '" . $manager. "', " . 
 
\t \t \t \t "request = '" . $request. "', " . 
 
\t \t \t \t "request_description = '" . $request_description. "', " . 
 
\t \t \t \t "request_comments = '" . $request_comments. "', " . 
 
\t \t \t \t "status = '" . $status. "', " . 
 
\t \t \t \t "comments = '" . $comments. "', " . 
 
\t \t \t \t "compUser = '" . $compUser. "', " . 
 
\t \t \t \t "compDt = '" . $compDt. "' WHERE id = '" . $id . "';"; 
 
\t \t \t \t 
 
\t \t \t \t #echo($sql); 
 
\t \t \t \t 
 
\t \t \t \t mysql_query($sql) or die (mysql_error); 
 
\t \t \t \t 
 
\t \t \t print("Record " . $id . " has been updated. .") 
 

 

 
?> 
 
<html> 
 

 
<head> 
 
<meta http-equiv=REFRESH CONTENT=2;url=StatusPages/received.php> 
 
<title> 
 

 
</title> 
 
</head> 
 
<body background="images/background.jpg"> 
 

 
</body> 
 

 
</html>

update.php страница

<?php 
    include('db_connect.php'); 
    $id=$_GET['id']; 
    $result = $db->prepare("SELECT * FROM requests WHERE id= :id"); 
    $result->bindParam(':id', $id); 
    $result->execute(); 
    for($i=0; $row = $result->fetch(); $i++){ 
?> 

<html> 
<head> 
<title></title> 

<style type="text/css"> 

} 
.body{ 
    background-color: #F2F2F2; 
    border: thin solid #666666; 
} 
</style> 

</head> 
<body class='body'> 
<form action = "update_process.php" " method ="post" class="Form"> 


<p><input type ="hidden" name = "id" value="<?php print($id); ?>"</p> 

<h2 align="center">Users request Information</h2> 
<table border='1' align="center"> 
<tr>  
    <td>LAN ID:</td> 
<td><input type="text" value ="<?php print($row['lanId']) ?>"name="lanId"></td> 

    <td>Name:</td> 
<td><input type="text" value ="<?php print($row['name']) ?>"name="name"></td> 
</tr> 

<tr>  
    <td>Department Location</td> 
<td><input type="text" value ="<?php print($row['department']) ?>"name="department"></td> 

    <td>Manager</td> 
<td><input type="text" value ="<?php print($row['manager']) ?>"name="manager"></td> 
</tr> 


<tr>  
    <td>Request</td> 
<td><input type="text" value ="<?php print($row['request']) ?>"name="request"></td> 

<td>Request Description</td> 
<td><input type="text" value ="<?php print($row['request_description']) ?>"name="request_description"></td> 

</tr> 
</table> 

<table border='1' align="center"> 
<br> 
<h2 align='center'>Requested Comments</h2> 
<tr>  

<td width='300' height="40"> 
<input type="text" value ="<?php print($row['request_comments'.'']) ?>"name="request_comments" size="50" style="height: 32px; width: 587px;" ></td> 

</tr> 

</table> 


<h2 align="center">Complete or Update Requests Status</h2> 

<table border='1' align="center" style="width: 595px"> 
<tr>  
    <td>Completed Date</td> 
<td style="width: 303px"> 
<input type="text" value ="<?php echo date("Y-m-d",time())?>"name="compDt" style="width: 148px"></td> 


</tr> 
<tr>  
    <td>Status</td> 
<td style="width: 303px"><select name ="status" style="width: 149px" > 
<option value <?php if ($row['status']==1){ print('selected');} ?> ="Received">Received</option> 
<option value <?php if ($row['status']==2){ print('selected');} ?> ="Completed">Completed</option> 
<option value <?php if ($row['status']==3){ print('selected');} ?> ="Cancelled">Cancelled</option> 
<option value <?php if ($row['status']==4){ print('selected');} ?> ="In_Progress">In_Progress</option> 
<option value <?php if ($row['status']==5){ print('selected');} ?> ="On_Hold">On_Hold</option> 

</select> 
</td> 
</tr> 
<tr> 
    <td>Completed by</td> 
<td style="width: 303px"><select name ="compUser" style="width: 149px" > 
<option value <?php if ($row['compUser']==1){ print('selected');} ?> ="unasigned">Please Select....</option> 
<option value <?php if ($row['compUser']==1){ print('selected');} ?> ="xgrh">xgrh</option> 
<option value <?php if ($row['compUser']==2){ print('selected');} ?> ="zeap">zeap</option> 
<option value <?php if ($row['compUser']==2){ print('selected');} ?> ="xjae">xjae</option> 

</select> 
</td> 
</tr> 


</table> 




<div align='center'>  
<br>Comments:<br> 
<textarea name="comments" Value = "<?php print($row['request_comments']) ?>" style="width: 593px; height: 100px"></textarea><br> 
    <br><br> 
<input type="submit" value= "Update Information"> 
<br> 
</div> 
</form> 


</body> 
</html> 
<?php 
    } 
?> 

update_process.php страница

<?php 
 
include('db_connect.php'); 
 
    
 
    $action = isset($_POST['action']) ? $_POST['action'] : ""; 
 
      if($action == "update"){ 
 
      try{  
 
      global $conn; 
 
$sql = 'UPDATE requests SET lanId= :lanId, name= :name, department= :department,manager= :manager,request= :request,request_description= :request_description, request_comments= :request_comments,status= :status,comments= :comments,compUser= :compUser, compDt= :comDt WHERE id= :id'; 
 
$stmt = $pdo->prepare($sql);         
 
$stmt->bindParam(':lanId', $_POST['lanId'], PDO::PARAM_STR);  
 
$stmt->bindParam(':name', $_POST['$name'], PDO::PARAM_STR); 
 
$stmt->bindParam(':department', $_POST['department'], PDO::PARAM_STR); 
 
$stmt->bindParam(':manager', $_POST['manager'], PDO::PARAM_STR); 
 
$stmt->bindParam(':request', $_POST['request'], PDO::PARAM_STR);  
 
$stmt->bindParam(':request_description', $_POST['request_description'], PDO::PARAM_STR); 
 
$stmt->bindParam(':request_comments', $_POST['request_comments'], PDO::PARAM_STR); 
 
$stmt->bindParam(':status', $_POST['status'], PDO::PARAM_STR); 
 
$stmt->bindParam(':comments', $_POST['comments'], PDO::PARAM_STR); 
 
$stmt->bindParam(':compUser', $_POST['compUser'], PDO::PARAM_STR); 
 
$stmt->bindParam(':comDt', $_POST['comDt'], PDO::PARAM_STR); 
 

 
$stmt->execute(); 
 
}catch(PDOException $exception){ 
 
      echo "Error: " . $exception->getMessage(); 
 
    } 
 
} 
 
    
 

 

 
?>

+0

Добавить сообщение об ошибках в верхней части файла (ов) сразу после открытия '

+0

'$ affected_rows-> execute()' определенно не то, что вы хотите здесь. Вы должны готовить инструкцию с помощью 'prepare()' и placeholders, а затем вызывать 'execute()' в инструкции. Учебник [PDO для разработчиков MySQL] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Named_Placeholders) хорошо объясняет это и в контексте старых функций mysql _ *() ', если это ваш фон. –

+0

Попробуйте '$ db-> prepare' вместо' $ db-> exec' также добавить '$ db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' сразу после открытия соединения. –

ответ

1

Ваш код - беспорядок.

Вы должны использовать HEREDOC для больших запросов, подобных этому. Узнайте больше о HEREDOCs over here. Кроме получение пораженного количества строк делаются с ROWCOUNT() Подробнее об этом over here

Я не думаю, что вы понимаете, как подготовленные заявления работать.

I высоко совет вы читаете некоторые из this.

Наконец, пожалуйста, прочтите на what is wrong with $_REQUEST.

Теперь для monstrousity вы сумели произвести ...

<?php 


$db_host = "localhost"; 
$db_username = "root"; 
$db_pass = ""; 
$db_name = "test"; 

$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

    $id = $_REQUEST['id']; 
    $lanId = $_REQUEST['lanId']; 
    $name= $_REQUEST['name']; 
    $department = $_REQUEST['department']; 
    $manager= $_REQUEST['manager']; 
    $request = $_REQUEST['request']; 
    $request_description = $_REQUEST['request_description']; 
    $request_comments = $_REQUEST['request_comments']; 
    $status = $_REQUEST['status']; 
    $comments = $_REQUEST['comments']; 
    $compUser = $_REQUEST['compUser']; 
    $compDt = $_REQUEST['compDt']; 

$update = 
<<<SQL 

UPDATE requests 
    SET lanID = ?, 
     name = ?, 
     department = ?, 
     manager = ?, 
     request = ?, 
     request_description = ?, 
     status = ?, 
     comments = ?, 
     compUser = ?, 
     compDt = ? 

     WHERE id = ?; 

SQL; 

$stmt = $db->prepare ($update); 
$stmt->execute (array ($lanId, $name, $department, $manager, $request, $request_description, 
       $status, $comments, $compUser, $compDt, $id)); 

echo $stmt->rowCount() . " rows were affected."; 
echo "Record " . $id . " has been updated."; 


?> 
+0

Спасибо. Я собирался продолжать пытаться выяснить и переписать новый код. Я изменил $ _REQUEST на $ _POST и попробовал код, который у вас был выше, но я получаю синтаксическую ошибку в строке 25 $ update = Запросы UPDATE SET lanID =?, Name =?, Department =?, manager =?, request =?, request_description =?, status =?, comments =?, compUser =?, compDt =?, WHERE id =?; – Donny

+0

@Donny Я отредактировал его и протестировал, он должен теперь работать;) – Vanitas

+0

Я все еще получаю ошибку синтаксического анализа в строке 25, неожиданно «UPDATE» (T_STRING) – Donny

2

Этого кода является катастрофой:

$affected_rows = $db->exec("UPDATE requests SET") . 
               ^^---terminating your query here 
       "lanId = '" . $lanId . "', ". 

вы бежите некорректный запрос (UPDATE requests SET), который будет либо выбросить исключение возвратного логического значения FALSE. Затем вы объединяете целую кучу текста (который был бы частью вашего запроса) на этот FALSE.

И даже если бы этот код был правильно структурирован, вы были бы WIDE OPEN до sql injection attacks.

Смежные вопросы