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