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.phpis incorrect. You should register the web routes first. For example, inweb.php, add the following code:Then change the action: