2017-03-01 81 views
-2

这个“页面”是许多所有使用包含在一起的链接的一部分,但因为我无法使它工作,我正在直接找到与这个确切页面有关的url,但我仍然无法做到这一点工作,或找出原因。我的陈述没有更新,因为我已经把它放下了吗?

应该发生什么,是查询检查stock是否在数据库中,如果是,请回显该行的值,并且如果按下提交按钮,则根据输入值更新数据库。如果它不在,回显空白表单,如果按下提交按钮,则插入到数据库中。我无法更新或插入工作。

我打算发布整个页面(减去mysql连接),希望有人可以发现错误。

<?php 

$status = 'Active'; 
$stock = (isset($_GET['stock'])) ? $_GET['stock'] : ''; 
$cat = (isset($_GET['cat'])) ? $_GET['cat'] : ''; 
include ('../helper_content/title_data.php'); 

/* WHAT CATEGORY DO WE WANT? */ 
if($cat == "Sales") { 

    $table = "Titles"; 
    if($stock) {$where = "stock = $stock";} 
    if ($_SERVER['REQUEST_METHOD'] == "POST") { 
     $status = $status; 
     $title_status = mysqli_real_escape_string($conn,$_POST['title_status']); 
     $title_number = mysqli_real_escape_string($conn,$_POST['title_number']); 
     $title_location = mysqli_real_escape_string($conn,$_POST['title_location']); 
     $title_owners = mysqli_real_escape_string($conn,$_POST['title_owners']); 
     $stock = $_GET['stock']; 
    } 

} 


/* Begin Main Query */ 
$sql5 = "SELECT * FROM `$table` WHERE $where"; 
$result5 = $conn->query($sql5); 
if ($result5->num_rows > 0) { 

// Stock exists, so submit will Update dB 
    if ($_SERVER['REQUEST_METHOD'] == "POST") { 

     if ($update = $conn->prepare("UPDATE `Titles` SET status=?, title_status=?, title_number=?, title_location=?, title_owners=? WHERE stock=?")){ 
      $update->bind_param('ssssii', $status, $title_status, $title_number, $title_location, $title_owners, $stock); 
      $update->execute(); 
     }; 
     if ($update->execute == TRUE) { 
      echo "Record updated successfully"; 
     } else { 
      echo "Error updating: " . $update->error; 
     } 
    } 

// Display the HTML results 
    while($row5 = $result5->fetch_assoc()) { 

     echo "Found In Database"; 

    // Title Number 
     $title_number = 'value="'.$row5['title_number'].'"'; 
     $TitleStatus = $row5['title_status']; 
     $TitleLocation = $row5['title_location']; 
     $Owners = $row5['owners']; 
    } 
} else { 
// No Query Results Found 

    echo "Not Found In Database"; 

// Insert into dB 
    if ($_SERVER['REQUEST_METHOD'] == "POST") { 

     if ($add = $conn->prepare("INSERT INTO `Titles` status=?, title_status=?, title_number=?, title_location=?, title_owners=? WHERE stock=?")){ 
      $add->bind_param('ssssii', $status, $title_status, $title_number, $title_location, $title_owners, $stock); 
      $add->execute(); 
     }; 

     if ($add->execute == TRUE) { 
      echo "Record added into database"; 
     } else { 
      echo "Error adding: " . $add->error; 
     } 
    } 

/* End Main Query */ 
} 


// Title Status 
    foreach($title_statuses as $title_status){ 
     $selected = ($TitleStatus == $title_status) ? ' selected="selected"' : ''; 
     $Title_status .= '<option value="'.$title_status.'"'.$selected.'>'.$title_status.'</option>'; 
    } 

// Title Location 
    foreach($title_locations as $title_location){ 
     $selected = ($TitleLocation == $title_location) ? ' selected="selected"' : ''; 
     $Title_location .= '<option value="'.$title_location.'"'.$selected.'>'.$title_location.'</option>'; 
    } 

// Prior Owners 
    foreach($prior_owners as $owners){ 
     $selected = ($Owners == $owners) ? ' selected="selected"' : ''; 
     $Owners_drop .= '<option value="'.$owners.'"'.$selected.'>'.$owners.'</option>'; 
    } 

?> 
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>?stock=<?php echo $stock; ?>"> 
<section class="title"> 
<h3>Title Info - Stock #:<?php echo $stock; ?></h3> 
    <p> 
     <label for="title_number" class="inline-edit">Title Num</label> 
     <input type="text" name="title_number" id="title_number" size="20" spellcheck="false" <?php echo $title_number; ?>> 
    </p> 
    <p> 
     <label for="title_status" class="inline-edit">Status</label> 
     <select name="title_status" id="title_status"> 
      <option></option> 
      <?php echo $Title_status; ?> 
     </select> 
    </p> 
    <p> 
     <label for="title_location" class="inline-edit">Location</label> 
     <select name="title_location" id="title_location"> 
      <option></option> 
      <?php echo $Title_location; ?> 
     </select> 
    </p> 
    <p> 
     <label for="title_owners" class="inline-edit">Owners</label> 
     <select name="title_owners" id="title_owners"> 
      <option></option> 
      <?php echo $Owners_drop; ?> 
     </select> <a target="_blank" href="https://www.vehiclehistory.com/paging-vin-report-data/specifications.php?vin=<?php echo $vin; ?>"><i class="fa fa-history" aria-hidden="true" title="Vehicle History"></i></a> 
    </p> 
</section> 

<input type="submit" id="Submit" value="Submit"> 

</form> 
+0

当你的条件表明正确的动词是POST时,你为什么要使用'$ _GET ['stock']'? –

+0

由于“真实”$股票通常在其他包含页面之一中,因此我只是将该$股票和$ cat语句放在那里进行测试。 –

+0

我指的是'/ *我们想要的类别? * /' –

回答

1

我会以组织您的代码开始稍微不同。你有两件事情中的一件事情可以是真实的:表单被提交(POST请求)或通过URL(GET请求)请求页面。所以,从这开始:

<?php 

    # Data for dropdowns 
    include ('../helper_content/title_data.php'); 

    $error = array(); 

    $status = "Active"; 
    $title_number = ""; 
    $title_status = ""; 
    $title_location = ""; 
    $title_owners = ""; 
    $vin = ""; 

    # Was the form submitted via POST? 
    if(isset($_POST['Submit'])) 
    { 
     # Yes 

     # Is this a new stock item? 
     if(empty($_POST['stock'])) 
     { 
      # Yes - insert 

      /* 
       ... get your variables from the $_POST array 
      */ 
      $title_number = filter_var($_POST['title_number'], FILTER_SANITIZE_STRING); 

      # ... repeat for other variables 

      if ($stmt = $conn->prepare("INSERT INTO `Titles` (`status`,`title_status`,`title_number`,`title_location`,`title_owners`) VALUES (?,?,?,?,?)")) 
      { 
       $stmt->bind_param('ssssii', $status, $title_status, $title_number, $title_location, $title_owners); 

       if ($stmt->execute()) 
       { 
        $stmt->close(); 

        header('Location: ./?inserted=true'); 
        exit(); 
       } 
       else 
       { 
        $error[] = "Error adding: " . $stmt->error; 
        $stmt->close(); 
       } 
      } 
     } 
     else 
     { 
      # No - update 
      $stock = $_POST['stock']; 

      /* 
       ... get your variables from the $_POST array 
      */ 

      if ($stmt = $conn->prepare("UPDATE `Titles` SET status=?, title_status=?, title_number=?, title_location=?, title_owners=? WHERE stock=?")) 
      { 
       $stmt->bind_param('ssssii', $status, $title_status, $title_number, $title_location, $title_owners, $stock); 

       if ($stmt->execute()) 
       { 
        $stmt->close(); 

        header('Location: ./?updated=true'); 
        exit(); 
       } 
       else { 
        $error[] = "Error updating: " . $stmt->error; 
        $stmt->close(); 
       } 
      } 
     } 
    } 
    else 
    { 
     # No - assume a GET 
     $status = 'Active'; 
     $stock = $_GET['stock']; 
     $cat = $_GET['cat']; 

     if(isset($_GET['updated'])) 
     { 
      $message = "Record updated"; 
     } 
     else if(isset($_GET['inserted'])) 
     { 
      $message = "Record added into database"; 
     } 

     if($stock != "") 
     { 
      # Load the item? 
      $query = "SELECT * FROM `Sales` WHERE stock=?"; 
      $stmt = $conn->prepare($query); 
      $stmt->bind_param('s', $stock); 

      if($stmt->execute()) 
      { 
       $result = $stmt->get_result(); 

       if($result) 
       { 
        $row = $result->fetch_assoc(); 

        $title_number = $row['title_number']; 
        $title_status = $row['title_status']; 
        $title_location = $row['title_location']; 
       } 
      } 

      $stmt->close(); 
     } 
    } 
?> 

<?php if(isset($message)) : ?> 
    <div class="alert alert-success"> 
     <?= $message ?> 
    </div> 
<?php endif; ?> 

<?php if(isset($error)) : ?> 
    <div class="alert alert-danger"> 
     <ul> 
     <?php foreach($error as $err): ?> 
      <li><?= $err ?></li> 
     <?php endforeach; ?> 
     </ul> 
    </div> 
<?php endif; ?> 

<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>"> 
    <section class="title"> 
     <h3>Title Info - Stock #:<?= $stock; ?></h3> 
     <input type="hidden" name="stock" value="<?= $stock; ?>" /> 
     <p> 
      <label for="title_number" class="inline-edit">Title Num</label> 
      <input type="text" name="title_number" id="title_number" size="20" spellcheck="false" value="<?= $title_number; ?>" /> 
     </p> 
     <p> 
      <label for="title_status" class="inline-edit">Status</label> 
      <select name="title_status" id="title_status"> 
       <option></option> 

       <?php foreach($title_statuses as $option): ?> 
        <option <?= $option == $title_status) ? 'selected="selected"' : '' ?>><?= $option ?></li> 
       <?php endforeach; ?> 

      </select> 
     </p> 
     <p> 
      <label for="title_location" class="inline-edit">Location</label> 
      <select name="title_location" id="title_location"> 
       <option></option> 

       <!-- Repeat the same process as $title_statuses --> 
      </select> 
     </p> 
     <p> 
      <label for="title_owners" class="inline-edit">Owners</label> 
      <select name="title_owners" id="title_owners"> 
       <option></option> 

       <!-- Repeat the same process as $title_statuses --> 
      </select> 
      <a target="_blank" href="https://www.vehiclehistory.com/paging-vin-report-data/specifications.php?vin=$vin"> 
       <i class="fa fa-history" aria-hidden="true" title="Vehicle History"></i> 
      </a> 
     </p> 
    </section> 

    <input type="submit" id="Submit" value="Submit" /> 
</form> 

这里是部分重新实现您的页面。我首先假设股票号码是请求URL的一部分,然后查看该值。我(目前)忽略了加载下拉值,以支持基本查找工作。

您还会注意到我已经在您的标记中使用了短标签 - 这通常是一种更简洁的模板方法,而不是遍布整个地方的回声。

我已经添加了一些保存逻辑的部分实现。您还会注意到我向表单添加了隐藏输入 - 在发布表单时,您不希望依赖查询字符串值。

该代码在数组中存储一些简单的错误消息,如果插入或更新失败,该消息会被回显出来。如果成功,我们用一个简单的标记变量重定向回同一页面,我们在上读到要求知道我们是否需要显示信息性消息。这被称为POST-REDIRECT-GET,并防止用户意外(或故意)重复提交相同的表单数据。

+0

我正在通过将其余代码组织成更好的示例来工作,但这应该让您开始。 –

+0

我假定'include'引入了一些标记 - 不要在POST上包含该标记,因为您希望能够执行重定向(最终会得到该结果)。 –

+0

你的代码,一行一行地剪切和粘贴,除去1个错误:“解析错误:语法错误,意外的'$ stmt'(T_VARIABLE)in /home/dbookatay/carcityofdanbury.com/Admin/include/pages/vehicle_Titles第38行的.php“ –

相关问题