【发布时间】:2017-03-18 11:05:27
【问题描述】:
这是我在这个论坛上的第一篇文章,尽管多年来我一直是忠实的追随者。
我建立了一个简单的系统,通过 PHP 表单在 MySQL 数据库中注册批号及其位置。
然后我有另一种形式,称为“勘误表”,我用它来查找和编辑最终的错误条目。
它的搜索条件是一个名为“lotto”的(UNSIGNED INT UNIQUE)值,在这种情况下,一切都像魅力一样工作(工作)。
现在事情变得有点棘手了。
我发现用于工作目的的批号 (lotto) 并不总是唯一的值,可能会有多个条目具有相同的编号。
在这种新情况下使“插入”表单或各种计数器工作没有问题,但在 EDIT 函数中它变得非常棘手。
这是我的 PHP 代码:`
<?php
$id = "";
$settore = "";
$ubicazione = "";
$numero = "";
$lotto="";
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// connect to mysql database
try{
$connect = mysqli_connect($host, $user, $password, $database);
} catch (mysqli_sql_exception $ex) {
echo 'Error';
}
// get values from the form
function getPosts()
{
$posts = array();
$posts[0] = $_POST['id'];
$posts[1] = $_POST['settore'];
$posts[2] = $_POST['ubicazione'];
$posts[3] = $_POST['numero'];
$posts[4] = $_POST['lotto'];
return $posts;
}
// Search
if(isset($_POST['search']))
{
$data = getPosts();
$search_Query = "SELECT * FROM mappa WHERE lotto = $data[4]";
$search_Result = mysqli_query($connect, $search_Query);
if($search_Result)
{
if(mysqli_num_rows($search_Result))
{
while($row = mysqli_fetch_array($search_Result))
{
$id = $row['id'];
$settore = $row['settore'];
$ubicazione = $row['ubicazione'];
$numero = $row['numero'];
$lotto = $row ['lotto'];
}
}else{
echo 'Lotto non presente in archivio';
}
}else{
echo 'Error';
}
}
// Insert
if(isset($_POST['insert']))
{
$data = getPosts();
$insert_Query = "INSERT INTO `mappa`(`settore`, `ubicazione`, `numero`, `lotto` ) VALUES ('$data[1]','$data[2]',$data[3], $data[4])";
try{
$insert_Result = mysqli_query($connect, $insert_Query);
if($insert_Result)
{
if(mysqli_affected_rows($connect) > 0)
{
$resInsert = "1 nuovo dato inserito correttamente!";
}else{
$resInsert = "Nessun dato inserito";
}
}
} catch (Exception $ex) {
echo 'Errore '.$ex->getMessage();
}
}
// Edit
if(isset($_POST['update']))
{
$data = getPosts();
$update_Query = "UPDATE `mappa` SET `settore`='$data[1]',`ubicazione`='$data[2]',`numero`=$data[3],`lotto`=$data[4] WHERE `id` = $data[0]";
try{
$update_Result = mysqli_query($connect, $update_Query);
if($update_Result)
{
if(mysqli_affected_rows($connect) > 0)
{
$resAgg = "1 dato aggiornato correttamente!";
}else{
$resAgg = "Nessun dato aggiornato!";
}
}
} catch (Exception $ex) {
echo 'Error Update '.$ex->getMessage();
}
} ?>
`
HTML:
<form action="mod.php" method="post" class="form-horizontal form-bordered" style="text-align:center">
<div class="form-group has-error" style="padding-top:30px">
<label class="col-xs-3 control-label" for="state-normal">ID</label>
<div class="col-lg-3">
<input type="text" name="id" placeholder="ID" class="form-control" value="<?php echo $id;?>"> </div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="state-normal">Settore</label>
<div class="col-md-6">
<input type="text" name="settore" placeholder="Settore" class="form-control" value="<?php echo $settore;?>"> </div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="state-normal">Ubicazione</label>
<div class="col-md-6">
<input type="text" name="ubicazione" placeholder="Ubicazione" class="form-control" value="<?php echo $ubicazione;?>"> </div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="state-normal">Numero</label>
<div class="col-md-6">
<input type="text" name="numero" placeholder="Numero" class="form-control" value="<?php echo $numero;?>"> </div>
</div>
<div class="form-group has-success">
<label class="col-md-3 control-label" for="state-normal">Lotto</label>
<div class="col-md-6">
<input type="text" name="lotto" placeholder="Lotto" class="form-control" value="<?php echo $lotto;?>"> </div>
</div>
<div style="padding-top:16px">
<!-- Insert-->
<button type="submit" name="insert" value="Add" class="btn btn-effect-ripple btn-primary">Inserisci</button>
<!-- Update-->
<button type="submit" name="update" value="Update" class="btn btn-effect-ripple btn-info">Aggiorna</button>
<a> </a>
<!-- Search-->
<button type="submit" name="search" value="Find" class="btn btn-effect-ripple btn-success">Cerca</button>
</div>
</form>
虽然批号是独一无二的,但一切都像一个魅力。
现在有多个具有相同批号的数据,代码已过时,因为“搜索”功能仅显示最后(最大 ID)数据。
我试图绕过一个循环并告诉函数搜索 lotto = lotto 的每个 ID,但它没有工作。
一个简单的解决方案显然是通过 ID 而不是 lotto 进行搜索,但这是一个非常糟糕的解决方案,因为用户只知道(并且感兴趣)批号不是在数据插入期间分配的 ID。
然后我尝试将两个 php 函数放在一个页面中,第一个从 Mysql 获取数据到 PHP 下拉菜单中,告诉它显示与搜索条件匹配的每个 ID (lotto):
<?php if (isset($_POST['submitted'])){
include ('../mysql_connect.php'); // connessione al database
$category = 'lotto';
$criteria = $_POST['criteria'];
$query = "SELECT * FROM mappa WHERE $category = '$criteria'";
$result = mysqli_query($dbcon, $query) or die('Impossibile reperire i dati');
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$idTab = $row['id'];
echo "<option>
$idTab </option>";
}
} // FINE if ?>
</select>
从 MySQL 中获取数据到下拉列表中工作得很好,但我陷入了试图将此下拉列表用作我的第一个函数的搜索条件的语法中。
我们将不胜感激! 提前感谢您的回答。
【问题讨论】:
-
在
if(isset($_POST['search']))中,您始终在while 循环中重新分配一堆变量,因此您只会得到一个结果。顺便说一句:这是很多代码,请尽量只将代码的相关部分放在这里,如果需要和/或需要解决问题,可能会添加更多代码。作为一般规则:首先尝试使用更少的代码,并在需要或请求时添加它。 -
您对“无限代码”的看法是正确的。我似乎无法用几句话和代码预览来综合我的想法!顺便说一句,谢谢您的及时答复!
-
使用 php 的错误报告并使用
mysqli_error($dbcon)检查查询中的错误。你现在拥有的对你没有帮助。 @AlbanB。