Verifica istantanea della duplicazione di un dato inserito.

di il
5 risposte

Verifica istantanea della duplicazione di un dato inserito.

Salve a tutti, sono un autodidatta e da poco mi sto cimentando a creare un sito web in php che possa poi utilizzare per gestire un piccolo inventario informatico. Mi trovo qui a chiedere il vostro aiuto perchè non riesco a capire come inserire un "allert" nel codice php, che vi posto qui sotto, che possa avvisarmi con un messaggio, quando inserisco un dato che in realtà risulti già risulta censito nel database, in particolare non inserire più volte lo stesso indirizzo IP in utilizzo già ad un determinato pc. 

Questo è solo una parte del codice inserito nella pagina html ed è la parte in cui vengono analizzati i dati dopo essere stati inseriti nella pagina web che contiene il form di registrazione del computer nel database. Se elimino il codice evidenziato, tutto funziona perfettamente, ovvero si compilato in ogni sua parte mi restituisce la conferma di avvenuta registrazione, se non compilo nessun campo o dimentico un campo mi restituisce l'errore e non mi fa andare avanti.  Ecco io vorrei che lo stesso funzionasse nel momento in cui inserisco un IP che però già risulta. Grazie in anticipo per l'aiuto.


<?php     

$query=mysqli_query("SELECT ipmacchina FROM asset_hardware WHERE (ipmacchina="'.$ipmacchina.'")");

$num=mysqli_num_rows($query);



if($num==""){

} else {

} 

   
	//Controlla i dati
	$errore = "";
		
	$marca = $_POST['marca'];
	$modello = $_POST['modello'];
	$seriale = $_POST['seriale'];
	$ipmacchina = $_POST['ipmacchina'];
	$accessori = $_POST['accessori'];
	$software = $_POST['software'];
	$nomeunivoco = $_POST['nomeunivoco'];
	$garanzia = $_POST['garanzia'];
	$codicecomando = $_POST['codicecomando'];
	$dataregistrazione = $_POST['dataregistrazione'];
	$commenti = $_POST['commenti'];
	
	if ($marca == "")
	{
		$errore = $errore . "ATTENZIONE! MANCA LA MARCA";
	}
	if ($modello == "")
	{
		$errore = $errore . "ATTENZIONE! MANCA IL MODELLO";
	}
	if ($seriale == "")
	{
		$errore = $errore . "ATTENZIONE! MANCA IL SERIALE";
	}
	if ($ipmacchina == "")
	{
		$errore = $errore . "ATTENZIONE! MANCA IP MACCHINA";
	}
	
	if ($errore == "")
	{
		//se non ci sono errori inserisci i dati nel DB
		$sql = "INSERT INTO asset_hardware (marca, modello, seriale, ipmacchina, periferiche, software, commenti) VALUES ('$marca','$modello','$seriale','$ipmacchina','$periferiche','$software','$commenti')";
		if (!mysqli_query($mysqli, $sql)) 
			die(printf("<H3>L'Asset IT non può essere inserito: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
?>	   

5 Risposte

  • Re: Verifica istantanea della duplicazione di un dato inserito.

    Cerca jQuery e ajax.

    quello che ti serve e' ajax.

    dovrai studiare un po' per capire come fare.

    ti consiglio anche di approfondire il concetto di

    spa - single page application

    e

    restful services

    e' un nuovo modo di realizzare un sito web 'interattivo". la parte intetessante e' questa

    1. php mescola cose lato server con cose lato client. il che genera non pochi 'grattacapi'
    2. spa e restful services permettono di separare totalmente quella che e' la parte client (spa) dalla parte server (restful services).

    .

    con 2. puoi concentrarti su una parte alla volta, semplificando notevolmente lo sviluppo.

  • Re: Verifica istantanea della duplicazione di un dato inserito.

    14/01/2025 - drede ha scritto:

    INSERT INTO asset_hardware (marca, modello, seriale, ipmacchina, periferiche, software, commenti) VALUES ('$marca','$modello','$seriale','$ipmacchina','$periferiche','$software','$commenti')

    vuoi sapere se stai duplicando il record?

    alla spicciola, prima di inserire il record:

    $controllosql ="select * from tabella where marca=$marca and modello=$modello ecc..."

    se hai un record allora esiste già, se non hai record allora procedi all'inserimento..

    lo metti in una funzione (FnzInsRecord per esempio) passando $marca, $modello ecc...  se esiste messaggio "dati già presenti!"  se non esiste lo inserisci nella stessa funzione e mandi il  messaggio "dati inseriti correttamente!" 

    aggiungo:

    l'ip da dove lo verifichi? in locale? pubblico? posso inserire ad muzzum 123.456.789.123?

  • Re: Verifica istantanea della duplicazione di un dato inserito.

    In un contesto multiutente fare una SELECT prima di inserire il record può creare problemi (a meno di non usare il tutto in una Transazione).

    La strada più "standard" (semplice ed affidabile) è lasciar fare al motore DBMS.

    Indicare il campo IP cpme chiave primaria non duplicata e gestire l'errore che il DBMS ti fornisce immediatamente in caso di duplicazione.

  • Re: Verifica istantanea della duplicazione di un dato inserito.

    15/01/2025 - oregon ha scritto:

    In un contesto multiutente fare una SELECT prima di inserire il record può creare problemi (a meno di non usare il tutto in una Transazione).

    La strada più "standard" (semplice ed affidabile) è lasciar fare al motore DBMS.

    Indicare il campo IP cpme chiave primaria non duplicata e gestire l'errore che il DBMS ti fornisce immediatamente in caso di duplicazione.

    concordo al 100% la mia perplessità si riferisce al tipo di dato...

    da più postazioni ho come ip pubblico 11.11.11.11 

    14/01/2025 - drede ha scritto:

    asset_hardware (marca, modello, seriale, ipmacchina, periferiche, software, commenti)

    supponendo di parlare di un pc locale, l'ip sarebbe 192.xxx.yyy.aaa magari identico al mio 192.xxx.yyy.aaa che si trova su altra rete privata... e non sarebbe un duplicato ma una coincidenza.

    Anche marca, modello, periferiche e software sarebbero duplicati... e non sarebbero duplicati ma dati giusti.

    basterebbe controllare solo il seriale.

  • Re: Verifica istantanea della duplicazione di un dato inserito.

    15/01/2025 - sihsandrea ha scritto:

    14/01/2025 - drede ha scritto:

    INSERT INTO asset_hardware (marca, modello, seriale, ipmacchina, periferiche, software, commenti) VALUES ('$marca','$modello','$seriale','$ipmacchina','$periferiche','$software','$commenti')

    vuoi sapere se stai duplicando il record?

    alla spicciola, prima di inserire il record:

    $controllosql ="select * from tabella where marca=$marca and modello=$modello ecc..."

    se hai un record allora esiste già, se non hai record allora procedi all'inserimento..

    lo metti in una funzione (FnzInsRecord per esempio) passando $marca, $modello ecc...  se esiste messaggio "dati già presenti!"  se non esiste lo inserisci nella stessa funzione e mandi il  messaggio "dati inseriti correttamente!" 

    aggiungo:

    l'ip da dove lo verifichi? in locale? pubblico? posso inserire ad muzzum 123.456.789.123?

    Innanzitutto grazie per aver dedicato del tempo a rispondere al mio quesito.

    Si sihsandrea, vorrei sapere se il record inserito è duplicato. Parliamo di una gestione di pc che sono collegati su una rete locale, una intranet.

    L'accesso a questa futura gestione degli asset in modalità web, sarà solo di due persone, quindi vorrei creare, come dicevo, un avviso di "duplicazione" nel caso in cui il dato inserito sia già presente. Saranno circa 500 e più gli asset da inserire, ognuno con il suo ip statico, ma potrebbe capitare che quando inserisco un nuovo asset con il relativo ip statico, questi possa già essere "occupato". Da qui la necessità di implementare il mio codice php. 

    Oggi ho provato ad inserire questo codice (evidenziato), e diciamo che in qualche maniera fa quello che voglio, ma sento che manca ancora qualcosa. 

    <?php
    
    $db_host = "+++++++++";
    
    $db_user = "root";
    
    $db_password = "";
    
    $db = "db_it_asset_management";
    
    
    
    // Create connection
    
    $conn = new mysqli($db_host, $db_user, $db_password, $db);
    
    // Check connection
    
    if ($conn->connect_error) {
    
        die("Connection failed: " . $conn->connect_error);
    
    } 
    
    
    
    $sql = "SELECT ipmacchina FROM asset_hardware";
    
    $result = $conn->query($sql);
    
    
    
    if ($result->num_rows > "") {
    
        echo "<table><tr><th>IP MACCHINA GIA' PRESENTE</th></tr>";
    
        // output data of each row
    
        while($row = $result->fetch_assoc()) {
    
            echo "<tr><td>".$row["ipmacchina"]."</td></tr>";
    
        }
    
        echo "</table>";
    
    } else {
    
        echo "0 results";
    
    }
    
    $conn->close();
    
    ?>
    
      
    <?php     
    
    	//Controlla i dati
    	$errore = "";
    		
    	$marca = $_POST['marca'];
    	$modello = $_POST['modello'];
    	$seriale = $_POST['seriale'];
    	$ipmacchina = $_POST['ipmacchina'];
    	$accessori = $_POST['accessori'];
    	$software = $_POST['software'];
    	$nomeunivoco = $_POST['nomeunivoco'];
    	$garanzia = $_POST['garanzia'];
    	$codicecomando = $_POST['codicecomando'];
    	$dataregistrazione = $_POST['dataregistrazione'];
    	$commenti = $_POST['commenti'];
    	
    	if ($marca == "")
    	{
    		$errore = $errore . "ATTENZIONE! MANCA LA MARCA";
    	}
    	if ($modello == "")
    	{
    		$errore = $errore . "ATTENZIONE! MANCA IL MODELLO";
    	}
    	if ($seriale == "")
    	{
    		$errore = $errore . "ATTENZIONE! MANCA IL SERIALE";
    	}
    	if ($ipmacchina == "")
    	{
    		$errore = $errore . "ATTENZIONE! MANCA IL IP MACCHINA";
    	}
    	
    	if ($errore == "")
    	{
    		//se non ci sono errori inserisci i dati nel DB
    		$sql = "INSERT INTO asset_hardware (marca, modello, seriale, ipmacchina, periferiche, software, commenti) VALUES ('$marca','$modello','$seriale','$ipmacchina','$periferiche','$software','$commenti')";
    		if (!mysqli_query($mysqli, $sql)) 
    			die(printf("<H3>L'Asset IT non può essere inserito: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
    ?>	
Devi accedere o registrarti per scrivere nel forum
5 risposte