php
  • pdo
  • 2017-07-14 71 views -1 likes 
    -1

    我正在尝试使用PDO更新我的postgres数据库中的一行。PDO更新不返回变量

    表单不会将变量发送到处理程序文件。

    我不确定问题出在哪里,我一直在为此奋斗了几天。

    形式

    //$maxContent is set and available 
    //$context_number is set and available 
        echo"<form method='post' action='updateSpatialPhoto_handler.php'>"; 
    
        $query3 = $conn->prepare("SELECT * FROM excavation.contexts_spatial_photographs 
         WHERE contexts_spatial.area_easting = {$_SESSION['area_easting']} 
         AND contexts_spatial.area_northing = {$_SESSION['area_northing']} 
         AND contexts_spatial.context_number = {$_SESSION['context_number']}"); 
    
    //contexts_spatial_photographs 
        $query3->execute(); 
    
    while($r = $query3->fetch(PDO::FETCH_OBJ)) 
        { 
        // for each needed 
         echo"<input type='hidden' name='photograph_date' value='".$r->photograph_date."'>"; 
         echo"<input type='hidden' name='photograph_number' value='".$r->photograph_number."'>"; 
         echo"<input type='hidden' name='primary_shot' value='".$r->primary_shot."'>"; 
    
         echo"<input type='hidden' name='maxContext' value='", $maxContext,"'>"; 
        }; 
    
        echo"<input type='submit' value='Update Spatial Photo'>"; 
    echo "</form>"; 
    

    处理

    <?php 
        session_start(); 
    
        // 
        include 'connect/connect.php'; 
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    
        if (!isset($_SESSION['photograph_date'])) {$_SESSION['photograph_date'] = $_POST['photograph_date'];} 
        if (!isset($_SESSION['photograph_number'])) {$_SESSION['photograph_number'] = $_POST['photograph_number'];} 
        if (!isset($_SESSION['primary_shot'])) {$_SESSION['primary_shot'] = $_POST['primary_shot'];} 
        if (!isset($_SESSION['maxContext'])) {$_SESSION['maxContext'] = $_POST['maxContext'];} 
    
        if (isset($_SESSION['photograph_date'])) {$_SESSION['photograph_date'] = $_POST['photograph_date'];} 
        if (isset($_SESSION['photograph_number'])) {$_SESSION['photograph_number'] = $_POST['photograph_number'];} 
        if (isset($_SESSION['primary_shot'])) {$_SESSION['primary_shot'] = $_POST['primary_shot'];} 
        if (isset($_SESSION['maxContext'])) {$_SESSION['maxContext'] = $_POST['maxContext'];} 
    
        //echo "Photograph Date: "; echo $_SESSION['photograph_date']; echo "<br />"; 
        //echo "Photograph Number: "; echo $_SESSION['photograph_number']; echo "<br />"; 
        //echo "Primary Shot: "; echo $_SESSION['primary_shot']; echo "<br />"; 
    
    try { 
        $sql3 = "UPDATE excavation.contexts_spatial_photographs SET 
         context_number = :context_number 
         WHERE contexts_spatial_photographs.area_easting = $area_easting 
         AND contexts_spatial_photographs.area_northing = $area_northing 
         AND contexts_spatial_photographs.context_number = $context_number"; 
    
        $stmt2 = $conn->prepare($sql3); 
    
        // prepare sql and bind parameters 
        $stmt2->bindParam(':context_number', $maxContext, PDO::PARAM_INT); 
        $stmt2->execute(); 
    
        echo "Record updated successfully in contexts spatial photographs<br />"; 
    
        } 
    catch(PDOException $e) 
        { 
        echo "Error: " . $e->getMessage(); 
        } 
    
    ?> 
    

    回答

    0

    在处理程序,您使用线条状顶部...

    if (isset($_SESSION['maxContext'])) {$_SESSION['maxContext'] = $_POST['maxContext'];} 
    

    这些在会话变量中的值, ,这很好。 但在你的SQL -

    AND contexts_spatial_photographs.context_number = $maxContext"; 
    

    $ maxContext似乎并没有在任何地方设置。这可能是一样的会话变量,所以你需要

    $maxContext = $_SESSION['maxContext']; 
    

    AND contexts_spatial_photographs.context_number = $_SESSION['maxContext']"; 
    

    但如果你使用bindParam与他们的话会更好,你:context_number使用同样的方式。

    +0

    对不起,应该提到,$ maxContent已经设置。 未发布的变量是photograph_date,photograph_number和primary_shot。 –

    +0

    只需重新读取Update语句,将包含$ maxContext作为搜索条件之一,然后将该值设置为$ maxContext。当然,这将无济于事?! –

    +0

    啊是的,很好的发现,我编辑的代码是$ context_number –

    相关问题