使用PHP在MySql数据库中插入、更新和搜索

使用PHP在MySql数据库中插入、更新和搜索,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,这是我在这个论坛上的第一篇帖子,尽管我多年来一直是一个忠实的追随者 我构建了一个简单的系统,通过PHP表单在MySQL数据库中注册批号及其位置 然后我有另一种形式叫做“勘误表”,我用它来查找和编辑最终的错误条目 它的搜索条件是一个名为“lotto”的(UNSIGNED INT UNIQUE)值,在这种情况下,一切都像一个符咒一样工作 现在事情变得有点棘手了 我发现用于工作目的的批号(乐透)并不总是唯一的值,可能有多个条目具有相同的编号 在这种新的情况下,让“插入”表单或各种计数器工作没有问题,但

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

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

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

它的搜索条件是一个名为“lotto”的(UNSIGNED INT UNIQUE)值,在这种情况下,一切都像一个符咒一样工作

现在事情变得有点棘手了

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

在这种新的情况下,让“插入”表单或各种计数器工作没有问题,但是在编辑函数中它变得非常棘手

这是我的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();
    }
} ?>

你说过乐透是独一无二的。那么,你怎么能用同一张彩票插入多行呢?
从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>";
    }
$query=从mappa中选择lotto,group_concat(id)作为id号,其中lotto=按lotto分组的“用户搜索号”;
$result=$conn->query($query);
$rows=$result->num_行;
$result->data\u seek(0)//移动到第一行(这是唯一一行)
$row=$result->fetch_数组(MYSQLI_NUM)//获取数组
$id_numbers_string=$row[1]//存储行的第二列(数字1)的值
$id\u numbers\u separated\u数组=分解(“,”,$id\u numbers\u字符串)//使用字符串中的值创建一个数组
对于($i=0;$i”;
}

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

if(isset($\u POST['search'))
中,您一直在while循环中重新分配一组变量,因此只会得到一个结果。顺便说一句:这是很多代码,请尽量只把你的代码的相关部分在这里,更多的代码可能会被添加,如果要求和/或需要解决这个问题。作为一般规则:首先尝试使用较少的代码,并在需要或请求时添加它。关于“无限代码”,您是对的。我似乎找不到一种方法,用几句话和代码预览来综合我的想法!顺便说一句,谢谢你的及时回答!使用php的错误报告并检查带有
mysqli\u error($dbcon)
的查询中的错误。你现在拥有的对你没有帮助@嘿,伙计,谢谢你的及时回答!“乐透”曾经是独一无二的,第一个函数就是根据这个假设构建的。现在我把它的状态改为just(UNSIGNED INT),我可以插入多个具有相同“lotto”号码的行。但现在我在修改编辑函数时遇到了麻烦…所以问题是有许多行具有相同的乐透,并且您无法更新其中的每一行?正如您在第一个函数中看到的,我可以通过“id”或“lotto”搜索,然后“内联”编辑结果。如果我通过ID搜索(ID显然是唯一的),一切都很好。但是用户不知道(也不关心)批号,他/她知道批号。如果我通过“乐透”搜索,它将只显示一个(多个)批号(ID号最大的那个)。所以这更像是一个“搜索和查找”的问题。我如何搜索一个批号(比如:10)并让函数告诉我:ID 10、11、12与您的条件匹配,通过它们进行搜索(?)
 <?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>
$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>";
    }