如何保存TWAIN扫描数据?



所以我使用TWAIN扫描文档(计费时需要的报价表),当文档被扫描时,数据应该保存在我的数据库的rubrique_facturations表中。然而,当我按下注册(保存)按钮,什么都没有发生,数据不保存,我不知道问题在哪里(我没有得到任何错误);问题是,我不熟悉Laravel scan和TWAIN,所以在知道扫描的文档是一个表的情况下,如何将扫描的数据插入到我的数据库中?它包含与我的rubrique_facturation表相同的字段。这是我的控制器。


namespace AppHttpControllers;
use AppModelsRubrique_facturation;
use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;
class Rubrique_facturationController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$rubrique = Rubrique_facturation::all();
return view('facturation.index', ['facturations' => $rubrique]);
}
public function scan(Request $request)
{
// Get the scanned data from the POST request
$scannedData = $request->input('scanned_data');
// Validate the scanned data before storing it
$request->validate([
'scanned_data' => 'required|string|max:255',
]);
// Convert the base64-encoded scanned data to binary
$binaryData = base64_decode($scannedData);
// Store the scanned data in your database
$scan = new Rubrique_facturation;
$scan->scan_data = $binaryData;
$scan->save();
// Redirect the user to a success page or back to the form page
return redirect()->back()->with('success', 'Scanned data has been stored successfully.');
}
public function saveScan(Request $request)
{
// récupération des données scannées
$designation = $_POST['designation'];
$quantite = $_POST['quantite'];
$prix_unitaire  = $_POST['prix_unitaire '];
$MontantHT = $_POST['MontantHT'];
$totaleHT = $_POST['totaleHT'];
$tva = $_POST['tva'];
$TotalTtc = $_POST['TotalTtc'];
$unite_rebrique_financier = $_POST['unite_rebrique_financier'];
// sérialisation des colonnes qui peuvent contenir de 1 jusqu'à n valeurs
$designation = serialize($designation);
$quantite = serialize($quantite);
$prix_unitaire  = serialize($prix_unitaire);
$MontantHT = serialize($MontantHT);
$totaleHT = serialize($totaleHT);
$tva = serialize($tva);
$TotalTtc = serialize($TotalTtc);
$unite_rebrique_financier = serialize($unite_rebrique_financier);
// insertion des données dans la table
DB::table('rubrique_facturation')->insert([
'designation' => $designation,
'quantite' => $quantite,
'prix_unitaire ' => $prix_unitaire,
'MontantHT' => $MontantHT,
'totaleHT' => $totaleHT,
'tva' => $tva,
'TotalTtc' => $TotalTtc,
'unite_rebrique_financier' => $unite_rebrique_financier,
]);
// désérialisation des colonnes pour récupérer les valeurs stockées
$designation = unserialize($designation);
$quantite = unserialize($quantite);
$prix_unitaire  = unserialize($prix_unitaire);
$MontantHT = unserialize($MontantHT);
$totaleHT = unserialize($totaleHT);
$tva = unserialize($tva);
$TotalTtc = unserialize($TotalTtc);
$unite_rebrique_financier = unserialize($unite_rebrique_financier);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$rubrique = new Rubrique_facturation();
$rubrique->designation = $request->input('designation');
$rubrique->quantite = $request->input('quantite');
$rubrique->prix_unitaire = $request->input('prix_unitaire');
$rubrique->MontantHT = $request->input('MontantHT');
$rubrique->totaleHT = $request->input('totaleHT');
$rubrique->tva = $request->input('tva');
$rubrique->TotalTtc = $request->input('TotalTtc');
$rubrique->unite_rebrique_financier = $request->input('unite_rebrique_financier');
$rubrique->store();
return redirect('facturation.index');
}
/**
* Display the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
$rubrique = Rubrique_facturation::find($id);
$rubrique = new Rubrique_facturation();
$rubrique->designation = $request->input('designation');
$rubrique->quantite = $request->input('quantite');
$rubrique->prix_unitaire = $request->input('prix_unitaire');
$rubrique->MontantHT = $request->input('MontantHT');
$rubrique->totaleHT = $request->input('totaleHT');
$rubrique->tva = $request->input('tva');
$rubrique->TotalTtc = $request->input('TotalTtc');
$rubrique->unite_rebrique_financier = $request->input('unite_rebrique_financier');
$rubrique->store();
return redirect('facturation.index');
}
/**
* Remove the specified resource from storage.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
//
}
}

这是我对扫描和保存扫描数据的看法

<!DOCTYPE html>
<html>
<head>
<title>Scan d'image</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row justify-content-center mt-5">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="text-center">Scannez votre document</h4>
</div>
<div class="card-body text-center">
<div id="dwtcontrolContainer"></div>
<div class="mt-5 d-flex justify-content-end">
<form method="post" action="save.php">
<input type="hidden" id="designation" name="designation">
<input type="hidden" id="quantite" name="quantite">
<input type="hidden" id="prix_unitaire" name="prix_unitaire ">
<input type="hidden" id="MontantHT" name="MontantHT">
<input type="hidden" id="totaleHT" name="totaleHT">
<input type="hidden" id="tva" name="tva" value="">
<input type="hidden" id="TotalTtc" name="TotalTtc">
<input type="hidden" id="unite_rebrique_financier" name="unite_rebrique_financier">
<button type="button" class="btn btn-success mr-2" onclick="saveData(scannedData)">Enregistrer</button>
</form>
<button type="button" class="btn btn-primary mr-2" onclick="AcquireImage()">Scaner</button>
<button type="button" class="btn btn-danger mr-2" onclick="LoadImage();">Charger un document</button>
<button type="button" class="btn btn-secondary mr-2">Annuler</button>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
// Connexion à la base de données
$serverName = "127.0.0.1";
$connectionOptions = array(
"Database" => "cth",
"UID" => "hanane",
"PWD" => "16011998"
);
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
die(print_r(sqlsrv_errors(), true));
}
// Vérifier la connexion
// Récupérer les données envoyées depuis la page HTML
$designation = isset($_POST['designation']) ? $_POST['designation'] : '';
$quantite = isset($_POST['quantite']) ? $_POST['quantite'] : '';
$prix_unitaire = isset($_POST['prix_unitaire']) ? $_POST['prix_unitaire'] : '';
$MontantHT = isset($_POST['MontantHT']) ? $_POST['MontantHT'] : '';
$totaleHT = isset($_POST['totaleHT']) ? $_POST['totaleHT'] : '';
$tva = isset($_POST['tva']) ? $_POST['tva'] : '';
$TotalTtc = isset($_POST['TotalTtc']) ? $_POST['TotalTtc'] : '';
$unite_rebrique_financier = isset($_POST['unite_rebrique_financier']) ? $_POST['unite_rebrique_financier'] : '';
// Préparer la requête SQL pour insérer les données dans la base de données
$sql = "INSERT INTO rebrique_facturations (designation, quantite, prix_unitaire, MontantHT, totaleHT, tva, TotalTtc, unite_rebrique_financier) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$params = array($designation, $quantite, $prix_unitaire, $MontantHT, $totaleHT, $tva, $TotalTtc, $unite_rebrique_financier);
$stmt = sqlsrv_prepare($conn, $sql, $params);
if (!$stmt) {
die(print_r(sqlsrv_errors(), true));
}
// Exécuter la requête SQL
if (sqlsrv_execute($stmt)) {
echo "Données enregistrées avec succès.";
} else {
echo "Erreur: " . $sql . "<br>" . print_r(sqlsrv_errors(), true);
}
// Fermer la connexion à la base de données
sqlsrv_close($conn);
?>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://unpkg.com/@popperjs/core@2"></script>
<script src="Resources/dynamsoft.webtwain.initiate.js"></script>
<script src="Resources/dynamsoft.webtwain.config.js"></script>
<script type="text/javascript">
var DWObject;
function Dynamsoft_OnReady() {
DWObject = Dynamsoft.DWT.GetWebTwain("dwtcontrolContainer");
}
function AcquireImage() {
if (DWObject) {
DWObject.SelectSourceAsync()
.then(function () {
return DWObject.AcquireImageAsync({
IfDisableSourceAfterAcquire: true,
});
})
.then(function (result) {
console.log(result);
})
.catch(function (exp) {
console.error(exp.message);
})
.finally(function () {
DWObject.CloseSourceAsync().catch(function (e) {
console.error(e);
});
});
}
}
function LoadImage() {
if (DWObject) {
DWObject.LoadImageEx("", 5)
.then(function () {
console.log("Image chargée");
})
.catch(function (err) {
console.error(err.message);
});
}
}
function saveData() {
var formdata = new FormData();
formdata.append('scannedData', scannedData);
formdata.append('designation', document.getElementById('designation').value);
formdata.append('quantite', document.getElementById('quantite').value);
formdata.append('prix_unitaire', document.getElementById('prix_unitaire').value);
formdata.append('MontantHT', document.getElementById('MontantHT').value);
formdata.append('totaleHT', document.getElementById('totaleHT').value);
formdata.append('tva', document.getElementById('tva').value);
formdata.append('TotalTtc ', document.getElementById('TotalTtc ').value);
formdata.append('unite_rebrique_financier', document.getElementById('unite_rebrique_financier').value);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'save.php', true);
xhr.onload = function () {
if (this.status == 200) {
alert('Data saved successfully!');
} else {
alert('Error saving data!');
}
};
xhr.send(formdata);
}
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

我被封锁了,在youtube上没有找到任何东西,文档也没有包含太多信息。

您的post actionsave.php是不正确的。你应该先注册网络路由。例如,在"web.php"中添加如下代码:

Route::post('/barcode_qr_reader/upload', 'AppHttpControllersRubrique_facturationController@saveScan')->name('saveScan');

然后改变动作:

<form action="{{ route('saveScan') }}" method="post" enctype="multipart/form-data">

最新更新