使用PHP

时间:2017-03-18 11:05:28

标签: php mysql database mysqli

这是我在这个论坛上的第一篇文章,尽管多年来一直是忠实的追随者。

我构建了一个简单的系统,通过PHP表单在MySQL数据库中注册批号及其位置。

然后我有另一个名为“勘误表”的形式,我用它来查找和编辑最终错误的条目。

它的搜索条件是一个名为“lotto”的(UNSIGNED INT UNIQUE)值,在这种情况下,所有东西都可以像魅力一样工作(工作)。

现在事情变得有点棘手了。

我发现用于工作目的的批号(乐透)并不总是唯一值,可能有多个条目具有相同的数字。

在这种新情况下使“插入”表单或各种计数器工作没问题,但在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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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 而非乐透进行搜索,但这是一个非常好的解决方案,因为用户只知道(并且感兴趣)批号不是数据插入期间分配的ID。

然后我尝试将两个php函数放入一个页面,第一个将Mysql中的数据提取到PHP下拉菜单中,告诉它显示符合搜索条件的每个ID(乐透):

 <?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获取数据到下拉列表工作得很好,但我在语法中试图使用此下拉列表作为我的第一个函数的搜索条件。

非常感谢每一位帮助!提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

你说乐透是独一无二的。那你怎么能用相同的乐透插入多行呢? 从lotto列中删除唯一约束。

尝试以下方法:

$query = select lotto, group_concat(id) as ID numbers from mappa where lotto = 'user search number' group by lotto;
$result = $conn->query($query);
$rows = $result->num_rows;

$result->data_seek(0); //move to first row (which is the only one)
$row = $result->fetch_array(MYSQLI_NUM); //fetch array

$id_numbers_string = $row[1]; //store the values of the row's second column (which is number 1)
$id_numbers_separated_array = explode(",", $id_numbers_string); //create an array with the values in the string
    for($i = 0; $i < count($id_numbers_separated_array); $i++){ //loop through created array
        echo "ID: " . $id_numbers_separated_array[$i];
        echo "<br>";
    }

还尝试在数据库管理系统中运行查询以查看结果。