2017-09-05 91 views
0

因此,我从头开始演示网上商店,我似乎无法弄清楚为什么我的表单在提交时表单为空时不保留数据。当我编辑表单中的值时,它就在那里,可以成功更新到数据库,与删除一样,但是当我尝试添加一个新的时,它不会通过并将其添加到我设置的数据库中。我错过了什么吗?提前致谢!在php和MYSQL中的逻辑问题

require_once '../core/init.php'; 
include 'includes/head.php'; 
include 'includes/navigation.php'; 

// Get brands from database 
$sql ="SELECT * FROM brand ORDER BY brand"; 
$results = $db->query($sql); 
$errors = array(); 

//Edit brand 
if (isset($_GET['edit']) && !empty($_GET['edit'])) { 
    $edit_id = (int)$_GET['edit']; 
    $edit_id = sanitize($edit_id); 
    $sql2 = "SELECT * FROM brand WHERE id = '$edit_id'"; 
    $edit_result = $db->query($sql2); 
    $eBrand = mysqli_fetch_assoc($edit_result); 
} 

// Delete brand 
if (isset($_GET['delete']) && !empty($_GET['delete'])) { 
    $delete_id = (int)$_GET['delete']; 
    $delete_id = sanitize($delete_id); 
    $sql = "DELETE FROM brand WHERE id = '$delete_id'"; 
    $db->query($sql); 
    header('Location: brands.php'); 
} 

// if add form is submmited 
if (isset($_POST['add_submit'])) { 
    $brand = sanitize(mysqli_real_escape_string($db, $_POST['brand'])); 

    // check if brand is blank 
if ($_POST['brand'] == '') { 
    $errors[] .= 'You must enter a brand!'; 
} 
// check if brand exists in database 
    $sql = "SELECT * FROM brand WHERE brand = '$brand'"; 
if (isset($_GET['edit'])) { 
    $sql = "SELECT * FROM brand WHERE brand = '$brand' AND id != '$edit_id'"; 
} 

$result = $db->query($sql); 
$count = mysqli_num_rows($result); 

if ($count > 0) { 
    $errors[] .= $brand.' already exists. Please choose another brand 
    name...'; 
} 
// display errors 
if (!empty($errors)) { 
    echo display_errors($errors); 
}else { 

    // add brand to database 
    $sql = "INSERT INTO brand (brand) VALUES '$brand'"; 

    if (isset($_GET['edit'])) { 
    $sql = "UPDATE brand SET brand = '$brand' WHERE id = '$edit_id'"; 
    } 

    $db->query($sql); 
    header('Location: brands.php'); 
} 
} 
?> 
<h2 class="text-center">Brands</h2><hr> 

<!-- Brand form --> 
<div class="text-center"> 
<form class="form-inline" action="brands.php<?=((isset($_GET['edit']))?'? 
edit='.$edit_id:'');?>" method="post"> 
<div class="form-group"> 
    <?php 
    $brand_value = ''; 
    if (isset($_GET['edit'])) { 
    $brand_value = $eBrand['brand']; 
    }else { 
    if (isset($_POST['brand'])) { 
     $brand_value = sanitize($_POST['brand']); 
    } 
    } ?> 
    <label for="brand"><?=((isset($_GET['edit']))?'Edit':'Add a');?> Brand: 
</label> 
    <input type="text" name="brand" id="brand" class="form-control" value="<? 
=$brand_value; ?>"> 
    <?php if(isset($_GET['edit'])): ?> 
    <a href="brands.php" class="btn btn-default">Cancel</a> 
    <?php endif; ?> 
    <input type="submit" name="add_submit" value="<?= 
((isset($_GET['edit']))?'Edit':'Add');?> brand" class="btn btn-success"> 
</div> 
</form> 
</div><hr> 
<table class="table table-bordered table-striped table-condensed" 
style="width:auto; margin:0 auto;"> 
<thead> 
<th></th><th>Brand</th><th></th> 
</thead> 
<tbody> 
<?php while($brand = mysqli_fetch_assoc($results)) : ?> 
    <tr> 
    <td><a href="brands.php?edit=<?=$brand['id'];?>" class="btn btn-xs btn- 
default"><span class="glyphicon glyphicon-pencil"></span></a></td> 
    <td><?=$brand['brand']; ?></td> 
    <td><a href="brands.php?delete=<?=$brand['id'];?>" class="btn btn-xs 
btn-default"><span class="glyphicon glyphicon-remove-sign"></span></a></td> 
    </tr>  
<?php endwhile; ?> 
+1

调试,我的男人,调试。在这两种情况下,所有相关变量都充满了您期望的值吗?如果您在phpmyadmin或任何您使用的版本中进行了复制(来自调试,而不是手工填写),您的查询是否正确并正确工作? – deg

+3

你错过了INSERT SQL值部分的括号,你应该添加错误检查。 –

+3

一些明智的代码缩进将是一个好主意。它可以帮助我们阅读代码,更重要的是,它可以帮助您**调试您的代码** [快速浏览编码标准](http://www.php-fig.org/psr/psr-2/ )为了您自己的利益。您可能会被要求在几周/几个月内修改此代码 ,最后您会感谢我。 – RiggsFolly

回答

1

的问题是在INSERT查询,你忘了括号()的价值观,你的查询必须是:

$sql = "INSERT INTO brand (brand) VALUES ('$brand')"; 

的..instead ..

$sql = "INSERT INTO brand (brand) VALUES '$brand'"; 
+0

是的,这是我的错误没有包裹我的变量括号。乔恩在评论中引起了我的注意,但是这并不能解决我提交新变量时我的表单中没有任何内容被传递的问题。 – WebDeVGuy24

0

SOOOO我觉得我在SQL语句中犯了一个完整的菜鸟错误。我重新将我的SQL输入到phpmyadmin中,结果发现我的SQL插入代码存在错误。当应该没有括号时,我在字段名称周围有括号。

例。 (brand)而不是('brand')

现在一切正常,因为它应该。谢谢大家为我的菜鸟错误做出贡献。我解决了它。