23 novembre 2024

Application C# et données sur MySQL

Créez votre propre CRUD MySQL


Voici un petit exemple basic pour envoyer ou récupérer vos données d’applications C# sur un hébergement PHP/MySQL.
php_mysql_logo

Côté hébergement


Une page config.inc.php

<?php
$host     = 'votrehost';
$login    = 'votrelogin';
$password = 'votrepassword';
$base     = 'votrebase';

//connexion à la base de données
$link = mysqli_connect($host, $login, $password, $base);
?>

Une page read.php. Cette page va nous permettre de récupérer un json et on pourra y passer deux paramètre pour délimiter la lecture Take et Skip

<?php
isset($_GET['id']) ? $id = trim($_GET['id']) : $id = "";
isset($_GET['Skip']) ? $Skip = trim($_GET['Skip']) : $Skip = 0;
isset($_GET['Take']) ? $Take = trim($_GET['Take']) : $Take = 20;

require_once('/www/config.inc.php');

if ($id != "") { 
	$id = mysqli_real_escape_string($link, $id);
	$query = "SELECT * FROM matable WHERE id='$id'";
	
	$result = mysqli_query($link, $query);
	$row[] = mysqli_fetch_array($result, MYSQLI_ASSOC);

}
else {
	$Skip = mysqli_real_escape_string($link, $Skip);
	$Take = mysqli_real_escape_string($link, $Take);
	
	$query = "SELECT * FROM matable LIMIT $Skip,$Take";
	$sql  = mysqli_query($link, $query);
	
	while($rowset = mysqli_fetch_array($sql, MYSQLI_ASSOC)) {
		$row[] = $rowset;
	}
}

echo json_encode($row);

mysqli_close($link);
?>

Une page Insert.php. Si on insert un record qui existe il le mettra à jour :

<?php
isset($_GET['id']) ? $id = trim($_GET['id']) : $id = "";
isset($_GET['nom']) ? $nom = trim($_GET['nom']) : $nom = "";
isset($_GET['data1']) ? $data1 = trim($_GET['data1']) : $data1 = 0;
isset($_GET['data2']) ? $data2 = trim($_GET['data2']) : $data2 = 0;

require_once('/www/config.inc.php');

//protection
$id = mysqli_real_escape_string($link, $id);
$nom = mysqli_real_escape_string($link, $nom);
$data1 = mysqli_real_escape_string($link, $data1);
$data2 = mysqli_real_escape_string($link, $data2);

$row = 0;
if ($id != "") {
	$query = "SELECT id FROM matable WHERE id='$id' LIMIT 0,1";
	$result = mysqli_query($link, $query);

	$row = mysqli_affected_rows($link);
}

if ($row == 0) {

	if ($stmt = mysqli_prepare($link,"INSERT INTO matable (nom, id, data1, data2) VALUES(?, ?, ?, ?)")) {
	
		mysqli_stmt_bind_param($stmt,'siss', 
			$nom, 
			$id,
			$data1,
			$data2);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_close($stmt);
	}
}
else {
	if ($stmt = mysqli_prepare($link,"UPDATE matable SET nom=?, data1=?, data2=? WHERE id=?")) {
		mysqli_stmt_bind_param($stmt,'sssi',
			$nom, 
			$data1,
			$data2,
			$id);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_close($stmt);
	}
}

mysqli_close($link);
?>

Maintenant coté application


Une méthode par exemple pour récupérer une série d’item

public async Task<string> GetMaList(int Skip, int Take)
{
    WebClient wc = new WebClient();
    wc.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.MinValue.ToString();
    wc.Headers[HttpRequestHeader.CacheControl] = "no-cache";
    try
    {
        return await wc.DownloadStringTaskAsync(
            new Uri(
                "http://www.monsite.com/read.php?Skip=" + Skip.ToString() 
                     + "&Take=" + Take.ToString() 
               ));
    }
    catch
    {
        return "";
    }
} 

Pour utiliser cette méthode :

async Task LoadDatas()
{
	string jsondata = await GetMaList(0,10);
	var malist= JsonConvert.DeserializeObject<List<MaClasse>>(jsondata);

}	

Et enfin pour insérer des données :

public async Task<string> Insert(MaClasse item)
{
    WebClient wc = new WebClient();
    wc.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.MinValue.ToString();
    wc.Headers[HttpRequestHeader.CacheControl] = "no-cache";
    try
    {
        return await wc.DownloadStringTaskAsync(
            new Uri(
                "http://www.monsite.com/insert.php?" +
                "nom=" + item.nom +
                "&id=" + item.id +
                "&data1=" + item.data1 +
                "&data2=" + item.data2
                ));
    }
    catch
    {
        return "";
    }
}

Pour l’utiliser, il suffit d’envoyer l’item MonObjet

string re = await Insert(MonObjet);

Laisser un commentaire