So I'm using TWAIN to scan a document(quotation table I needed in billing), and when the document is scanned, the data should be saved in my database in my rubrique_facturations
table. However, when I press Enregistrer(save) button, nothing happens, and data is not saved, and I don't know where the problem is (I don't get any error); the thing is, I'm not familiar with Laravel scan or TWAIN, so please how to insert scanned data in my database knowing that the document scanned is a table. It contains the same fields as my rubrique_facturation table. This is my controller.
namespace App\Http\Controllers;
use App\Models\Rubrique_facturation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class Rubrique_facturationController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
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 \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
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 \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
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 \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
and this is my view of scan and saving scanned data
<!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>
I am blocked didn't find anything on youtube, and the documentation didn't contain much information.
Your post action
save.php
is incorrect. You should register the web routes first. For example, inweb.php
, add the following code:Then change the action: