Come non far inserire un dato se già presente PHP-Mysql

di il
2 risposte

Come non far inserire un dato se già presente PHP-Mysql

Buongiorno, premetto che sono una principiante; nel mio Sistema tipo "planning" come prima colonna troviamo i nomi del personale e sulla prima riga tutti i giorni del mese in modo da poter tenere sotto controllo la situazione del personale giornaliera e mensile (ferie, malattie, etc.). Questo sistema ovviamente si interfaccia con un database MYSQL. Mi stato chiesto dalle segreterie che inseriscono gli impegni del personale sul planning di trovare un modo per far apparire un messaggio di errore se nell'intervallo date della persona a cui stanno inserendo un nuovo impegno ci sia già un altro impegno, perché ovviamente se io ho un impegno già registrato dal 1 al 3 agosto e per errore vado ad inserire un altro tipo di impegno dal 3 al 4 agosto, il giorno 3 viene sovrascritto.
Sotto i codici di inserimento:
<?php
if (isset($_POST['inserisci'])) {
if (($_POST['licenze']!=='' and $_POST['servizi']!=='') or ($_POST['licenze']!=='' and $_POST['malattia']!=='') or ($_POST['licenze']!=='' and $_POST['giornaliera']!=='') or ($_POST['licenze']!=='' and $_POST['prolungata']!=='') or ($_POST['servizi']!=='' and $_POST['malattia']!=='') or ($_POST['servizi']!=='' and $_POST['giornaliera']!=='') or ($_POST['servizi']!=='' and $_POST['prolungata']!=='') or ($_POST['malattia']!=='' and $_POST['giornaliera']!=='') or ($_POST['malattia']!=='' and $_POST['prolungata']!=='') or ($_POST['giornaliera']!=='' and $_POST['prolungata']!=='')) {
?><div align="center"><font color="#FF0000"; size="+2"><?php echo "ATTENZIONE! NON PUOI SELEZIONARE PIU' DI UN VALORE."; ?></font></div>
<?php
} else {
if (strlen($_POST['data1'])==9) { $date_11="0".$_POST['data1']; } else { $date_11=$_POST['data1']; }
if (strlen($_POST['data2'])==9) { $date_22="0".$_POST['data2']; } else { $date_22=$_POST['data2']; }
$date_1=explode("-", substr($date_11,6,4)."-".substr($date_11,3,2)."-".substr($date_11,0,2));
$date_2=explode("-", substr($date_22,6,4)."-".substr($date_22,3,2)."-".substr($date_22,0,2));
//gregoriantojd() Converte dal calendario gregoriano a quello giuliano
$diff=0;
if ($_POST['data1']!=='' and $_POST['data2']!=='') {
$inizio=gregoriantojd($date_1[1], $date_1[2], $date_1[0]);
$fine=gregoriantojd($date_2[1], $date_2[2], $date_2[0]);
$diff=$fine - $inizio;
$data= substr($date_11,6,4)."-".substr($date_11,3,2)."-".substr($date_11,0,2);
$valore=0;
}
if ($_POST['licenze']!=='') { $valore=$_POST['licenze']; }
if ($_POST['servizi']!=='') { $valore=$_POST['servizi']; }
if ($_POST['malattia']!=='') { $valore=$_POST['malattia']; }
if ($_POST['giornaliera']!=='') { $valore=$_POST['giornaliera']; }
if ($_POST['prolungata']!=='') { $valore=$_POST['prolungata']; }

if ($_POST['prolungata']=='' and $_POST['giornaliera']=='' and $_POST['malattia']=='' and $_POST['servizi']=='' and $_POST['licenze']=='') { $valore=NULL; }
if ($diff<0 or $_POST['data1']=='' or $_POST['data2']=='') {
?><div align="center"><font color="#FF0000"; size="+2"><?php echo "ATTENZIONE! LE DATE NON SONO STATE INSERITE CORRETTAMENTE."; ?></font></div><?php
} else {
$numero=count($_POST['nome']);
$data_riavvio=$data;

for ($b = 0; $b < $numero; $b++) {
$data=$data_riavvio;
for ($i = 1; $i <= $diff+1; $i++) {
$queryupdate="UPDATE ".$database."forza SET `$data`='$valore' WHERE ID=".$_POST['nome'][$b]."";
$result = mysql_query($queryupdate);
$data = date('Y-m-d', strtotime($data . ' +1 day'));
}
header("Location: modify.php?database=$database&var=$var");
}

}
}
}
?>
Vi ringrazio in anticipo se avete qualche idea.

2 Risposte

  • Re: Come non far inserire un dato se già presente PHP-Mysql

    SE inserire un record OPPURE aggiornarlo e' un CLASSICO problema.

    Alcuni database si sono inventati un nuovo operatore SQL: "UPSET" che fa una INSERT oppure una UPDATE.

    Comunque, il modo e' BANALE:

    PRIMA constrolli se l record e' gia' presente, con una SELECT
    SE NON C'E', fai una INSERT, ALTRIMENTI una UPDATE (se serve).

    Questo NON CENTRA con PHP ma e' una cosa che ha a ache fare con il DBMS.
  • Re: Come non far inserire un dato se già presente PHP-Mysql

    Quindi abbiamo il nome del personale con il proprio ID, dovresti adattare nel tipo DATE di mysql (il che significa controllare anche il fuso orario del server mysql, nonché il documento online per capire come modificarlo e interpretarlo), in modo che potrai filtrare in seguito i risultati e nonché la preverifica se il personale con quel ID non è già impegnato per quella data.
    Quindi avrai:
    lista giornaliera e/o mensile del personale avente impegno o meno.
    Preverifica range tra due date o in assenza di date (può accadere) significa disponibile.
    Certo impegno in questo contesto per me vale come malattia, prolungata o etc che avranno comunque una data sempre nella medesima colonna mysql.

    In effetti puoi anche convertire una stringa php in data mysql con la propria funzione, ma stiamo parlando di funzioni che si usavano su mysql 5.6 e tutt'ora valide (comunque dovrai adeguarti al fuso orario del server mysql). https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date
Devi accedere o registrarti per scrivere nel forum
2 risposte