[PHP] Far rimanere biffata checkbox dopo aggiornamento pagina

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve, sono a richiedere un aiuto a chi ne sa più di me, ovvero vorrei che una volta biffata una checkbox rimanesse cliccato dopo l'aggiornamento della pagina, allego codice utilizzato con cui coloro di giallo un testo dopo aver cliccato la chekbox
PHP:
<html>

<head>
<script language="JavaScript" type="text/javascript">
<!--
function changeBG(aCheckbox) {
aParent = aCheckbox.parentElement;
aParent.style.backgroundColor = aCheckbox.checked ? 'yellow' : ''
}
//-->
</script>
</head>
<body>
<div align="center">
<span><input type="checkbox" onclick="changeBG(this)" />Ordine evaso</span></div>

</body>
</html>
Grazie
Max61
 
Dovresti spiegare meglio cosa vuoi fare
Dopo che hai selezionato la checkbox ed è stata evidenziata in giallo cosa deve fare?
Portare ad una pagina?
Eseguire una query?

Che scopo ha questa checkbox?
 
Ciao bubino8 e grazie per l'interessamento, io avrei pensato semplicemente di segnalare il record lavorato e rimanendo colorato sarebbe in evidenza rispetto agli altri.
Grazie
Max61
 
Scusami ma non ho ancora capito
tu hai una pagina con più di una checkbox e alla selezione ricarica la pagina e quella selezionata deve essere messa in evidenza?

Che utilizzo avrebbe? Scusa ma non capisco proprio. Se non spieghi bene il funzionamento di cui hai bisogno non saprei proprio da dove iniziare ad aiutarti.
 
Allora, cerco di spiegarmi: ho una pagina che si chiama OrdineRicevuto.php dove mostro a video i record che sono nel db, la pagina ogni 15 secondi si aggiorna per poter visualizzare a video i nuovi record arrivati nel db. Ora per distinguere i nuovi record da quelli vecchi mi piacerebbe che cliccando sulla checkbox, la stessa si colorasse così i vecchi record saranno colorati mentre i nuovi no e man mano che arrivano e vengono lavorati viene messa la spunta sulla checkbox e via così.
Il problema sta nel fatto la checkbox si colora, ma al primo aggiornamento della pagina (ogni 15 secondi) perde la colorazione e sono di nuovo tutti uguali...
Per distinguerli mi è venuta questa idea, ma sono valide anche altre proposte...
Con la speranza di essermi spiegato ti ringrazio
Max61
 
Ooo molto più chiaro.
Comunque avendo un db potresti andare ad aggiungere un ulteriore campo nella tabella ordini ad esempio chiamato aperto/chiuso o 0/1 (come vuoi te insomma).
una volta cliccata la checkbox con ajax vai a fare una query che da aperto cambia in chiuso.

Poi nella pagina "OrdineRicevuto.php" fai un semplice if(){ che se è chiuso colora di giallo altrimenti no.

Questa è una delle possibili soluzioni.
Fammi sapere
 
Ok. Ho fatto il campo con nome $cliccato e ho provato a fare qualcosa ma non va bene e soprattutto non cambia il valore nella tabella.
PHP:
<?php
if ($cliccato == 0){
?>  
    <html>
<head>
<script language="JavaScript" type="text/javascript">
<!--
function changeBG(aCheckbox) {
aParent = aCheckbox.parentElement;
aParent.style.backgroundColor = aCheckbox.checked ? 'grey' : '';
}

</script>
</head>
<body>
<div align="center">
<span><input type="checkbox" onclick="changeBG(this)" />Ordine evaso</span></div>

</body>
</html>
<?php
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp <hr align='left' size='1' widordinith='10' color='white' noshade>";
       
    echo "</b></b>";  
  }
 
} elseif ($cliccato == 1) {

?>  
   
   <html>
<head>
<script language="JavaScript" type="text/javascript">
<!--
function changeBG(aCheckbox) {
aParent = aCheckbox.parentElement;
aParent.style.backgroundColor = aCheckbox.checked ? 'yellow' : '';
}

</script>
</head>
<body>
<div align="center">
<span><input type="checkbox" onclick="changeBG(this)" />Ordine evaso</span></div>

</body>
</html>
<?php
}

Mi dovresti dare una mano nel codice.
Grazie
Max61
 
pagina princiaple
PHP:
<?php
include('connect.php');
$query = "SELECT * FROM progetti";
$result = mysqli_query($conn, $query);
?>  
<html>
    <head>
        <style>
        .check{
            background-color: yellow;
        }
        .uncheck{
            background-color: gray;
        }
        </style>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script language="JavaScript" type="text/javascript">
        function changeBG(aCheckbox,id) {
            aParent = aCheckbox.parentElement;
            aParent.style.backgroundColor = aCheckbox.checked ? 'yellow' : 'gray';
           
            $.ajax({  
              type: "POST",
              url: "query.php",  
              data: "id=" + id,
              dataType: "html",
              success: function(risposta) {
                $("div#checked").html(risposta);
                $('#checked').fadeIn();
                $('#checked').delay(2000).fadeOut();
              },
              error: function(){
                alert("Chiamata fallita!!!");
              } 
            }); 
        }
        </script>
    </head>
    <body>
    <?php
        while($row = mysqli_fetch_array($result)){
            $id = $row['id'];
            $progetto = $row['progetto'];
            $stato = $row['stato'];
            if($stato == 1){
                echo "<span class='check'><input type='checkbox' id='".$id."' onclick='changeBG(this,this.id)' checked/>".$progetto."</span>";
            }else{
                echo "<span class='uncheck'><input type='checkbox' id='".$id."' onclick='changeBG(this,this.id)'/>".$progetto."</span>";
            }
           
        }
    ?>
    <div id="checked"></div>
    </body>
</html>

query.php
PHP:
<?php
include('connect.php');
if(isset($_POST['id'])) {
    $id = $_POST['id'];
    $query2 = "SELECT * FROM progetti WHERE id='".$id."'";
    $result2 = mysqli_query($conn, $query2);
    $row = mysqli_fetch_row($result2);
    $stato = $row[2];
    if($stato == 1){
        $query = "UPDATE progetti SET stato='0' WHERE id='".$id."'";
        $result = mysqli_query($conn, $query) or die (mysqli_error());
        echo "Check disattivata";
    }else{
        $query = "UPDATE progetti SET stato='1' WHERE id='".$id."'";
        $result = mysqli_query($conn, $query) or die (mysqli_error());
        echo "Check attivata";
    }
 
}
else{
    echo "Vuoto";
}
?>

Testa e fammi sapere
 
A se vuoi il DB che ho fatto solo per fare un test
PHP:
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `progetti`
-- ----------------------------
DROP TABLE IF EXISTS `progetti`;
CREATE TABLE `progetti` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `progetto` text,
  `stato` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `progetti`
-- ----------------------------
BEGIN;
INSERT INTO `progetti` VALUES ('1', 'casa', '1'), ('2', 'garage', '1'), ('3', 'cantina', '1');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
 
Ciao e ancora grazie
ho provato a fare 2 pagine e il db che mi hai suggerito, mi da questi errori:

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in C:\xampp\htdocs\checkbox\pagina1.php on line 18

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\checkbox\pagina1.php on line 55

quindi sono tornato a mysql_query() e funziona, ma rimangono sempre biffati, se tolgo la biffatura e aggiorno la pagina si ribiffa di nuovo...forse sbaglio qualcosa?
Ciao
 
Be si tu nella tua pagina di connessione userai mysql e non mysqli. comunque se non rimangono all'aggiornamento pagina vuol dire che non vengono eseguite le query nella pagina query.php
la pagina query.php deve essere chiamata cosi oppure se vuoi cambiare nome devi modificare il collegamento ajax nella pagina base.

fammi sapere
 
Grazie!!!
Funziona perfettamente solo che applicandolo al resto della pagina dove recupero i record dal db non funziona bene perchè nell'esempio del db che mi hai inviato l'id progetto è univoco, mentre nel mio l'id è il nome utente a cui corrispondono diciamo tanti (progetti)... che nel caso si chiamano prodotto e quantità, non so se mi sono spiegato, quindi ti allego la mia tabella, la pagina dove ho inserito il tuo codice e la schermata di come lo vorrei.
Grazie ancora per la pazienza
Max61
 

Allegati

il tuo idordine è anche autoincrement e se quello lo usi come id client ogni volta sarà diverso.

Aggiungi un nuovo campo e lo cambi id che solo questo sarà autoincrement per un ID univoco ogni ordine.

Poi nella pagina querycheckbox.php dovrai andare ad adattare la query dove deve andare a modificare i campi esatti.
 
Ciao ,ho provato ad aggiungere icliente come autoincrement ma non me lo fa aggiungere ce ne è già uno.
Max61
 
rinomina il tuo solo in id.
poi stai facendo un po di confuzione.
nei campi input id="" deve rimanre id non puoi modificarlo in idordine
stessa cosa nella funzione deve essere this.id e non this.idordine.

Sto facendo altri test intano
 
OrdineRicevuto.php:
PHP:
<?PHP
    header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]);
?>

<body {
bgcolor="002041";
font body=verdana”;
FONT SIZE="10";
scrollbar-face-color: #FFFFFF;
scrollbar-highlight-color: #FF00FF;
scrollbar-3dlight-color: #606C88;
scrollbar-darkshadow-color: #606C88;
scrollbar-shadow-color: #000000;
scrollbar-arrow-color: #606C88;
scrollbar-track-color: #FF0000;}
>

<?php
   ob_start();
   //echo "Se il tuo browser non supporta il redirect clicka <a href=\"index.php\">qui</a>.";
   header( "refresh:15;" );
   ob_end_flush();
?>


<!--INIZIO ALERT Modifica-->
<html>
    <head>
        <title>Ordini</title>
        <script type="text/javascript">
            function show_confirm(){
                return confirm("Clicca su 'OK' se l'ordine e pronto , altrimenti su 'Annulla'!");
            //return confirm("Clicca su 'OK' se l'ordine e pronto , altrimenti 'Cancel'! \nContinuare?");
            }
        </script>
        <style>
            .check{
                background-color: yellow;
            }
            .uncheck{
                background-color: gray;
            }
        </style>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script language="JavaScript" type="text/javascript">
            function changeBG(aCheckbox,idordini) {
                aParent = aCheckbox.parentElement;
                aParent.style.backgroundColor = aCheckbox.checked ? 'yellow' : 'gray';
                $.ajax({
                    type: "POST",
                    url: "querycheckbox.php",
                    data: "idordini=" + idordini,
                    dataType: "html",
                    success: function(risposta) {
                        $("div#checked"+idordini).html(risposta);
                        $('#checked'+idordini).fadeIn();
                        $('#checked'+idordini).delay(5000).fadeOut();
                    },
                    error: function(){
                        alert("Chiamata fallita!!!");
                    }
                });
            }
        </script>
    </head>
    <body>
      <!--FINE ALERT Modifica-->
    
<!--FORMATTA LA PAGINA ARIAL-->   
<FONT FACE="Arial">
<!--FINE FORMATTA LA PAGINA ARIAL-->

<?php
// mi connetto al MySql Server
include('Connessione.php');

// imposto ed eseguo la query
$query = "SELECT * FROM tblordini";
$result = mysqli_query($myconn, $query) or die('Errore...'.mysqli_error());

// conto il numero di occorrenze trovate nel db
$numrows = mysqli_num_rows($result);

// se il database è vuoto lo stampo a vidordinieo
if ($numrows == 0){
  echo "Database vuoto!";
}
// se invece trovo delle occorrenze...
else{
    // recupero il contenuto di ogni record rovato
    while($resrow = mysqli_fetch_array($result)){
        $idordini = $resrow['id'];
        $utente = $resrow['utente'];
        $prodotto = $resrow['prodotto'];
            $quantita = $resrow['quantita'];
        $prodotto1 = $resrow['prodotto1'];
            $quantita1 = $resrow['quantita1'];
        $prodotto2 = $resrow['prodotto2'];
            $quantita2 = $resrow['quantita2'];
        $prodotto3 = $resrow['prodotto3'];
            $quantita3 = $resrow['quantita3'];
        $prodotto4 = $resrow['prodotto4'];
            $quantita4 = $resrow['quantita4'];
        $prodotto5 = $resrow['prodotto5'];
            $quantita5 = $resrow['quantita5'];
        $telefono = $resrow['telefono'];
        $note = $resrow['note'];
        $dataora = $resrow['dataordine'];
        $stato = $resrow['stato'];

    // richiamo lo script responsabile della connessione a MySQL
        //require 'CssBlu.php';

    // stampo a vidordinieo il risultato
    echo "<b><p align=”left”/><span style=\"color:orange\"><span style=\"color:orange; font-size: 12pt\">";
        echo "Cliente: " . $resrow[1] . "</b><br/></span></span></b>";
        echo "<span style=\"color:white\"><span style=\"color:white; font-size: 12pt\"> Quantita:  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Prodotto:<br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[3] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[2] . "</b>";
  
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[5] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[4] . "</b>";
  
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[7] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[6] . "</b>";
  
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[9] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[8] . "</b>";
  
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[11] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[10] . "</b>";
  
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[13] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  " . $resrow[12] . "</b>";
  
    echo "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Note: &nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;" . $resrow[15] . " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Telefono  " . $resrow[14] . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data ordine  " . $resrow[16] . "</b>";
  
        if($stato == 1){
            echo "<span class='check'><input type='checkbox' id='".$idordini."' onclick='changeBG(this,this.id)' checked/>Ordine evaso</span>";
        }else{
            echo "<span class='uncheck'><input type='checkbox' id='".$idordini."' onclick='changeBG(this,this.id)'/>Ordine evaso</span>";
        }
        ?>
  
    <div id="checked<?php echo $idordini; ?>"></div>
    </body>
</html>


  
<?php
}
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp <hr align='left' size='1' widordinith='10' color='white' noshade>";
      
    echo "</b></b>";
}

// chiudo la connessione
mysqli_close($myconn);

?>
Connessione.php
PHP:
<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "check";

$myconn = mysqli_connect($db_host, $db_user, $db_pass,$db_name) or die("db connect error: ".mysqli_connect_error());

?>
Querycheckbox.php
PHP:
<?php
include('Connessione.php');
if(isset($_POST['idordini'])) {
    $id = $_POST['idordini'];
    //$query = "INSERT INTO progetti ('progetto', 'check')VALUES('hahaha','1')";
    $query2 = "SELECT * FROM tblordini WHERE id='".$id."'";
    $result2 = mysqli_query($myconn, $query2);
    $row = mysqli_fetch_row($result2);
    $stato = $row[17];
    if($stato == 1){
        $query = "UPDATE tblordini SET stato='0' WHERE id='".$id."'";
        $result = mysqli_query($myconn, $query) or die ("Error: ".mysqli_error());
        echo "Check disattivata";
    }else{
        $query = "UPDATE tblordini SET stato='1' WHERE id='".$id."'";
        $result = mysqli_query($myconn, $query) or die (mysqli_error());
        echo "Check attivata";
    }
 
}
else{
    echo "Vuoto";
}
?>

Struttura DB:
PHP:
DROP TABLE IF EXISTS `tblordini`;
CREATE TABLE `tblordini` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `utente` varchar(255) NOT NULL,
  `prodotto` varchar(255) NOT NULL,
  `quantita` varchar(10) NOT NULL,
  `prodotto1` varchar(255) NOT NULL,
  `quantita1` varchar(10) NOT NULL,
  `prodotto2` varchar(255) NOT NULL,
  `quantita2` varchar(10) NOT NULL,
  `prodotto3` varchar(255) NOT NULL,
  `quantita3` varchar(10) NOT NULL,
  `prodotto4` varchar(255) NOT NULL,
  `quantita4` varchar(10) NOT NULL,
  `prodotto5` varchar(255) NOT NULL,
  `quantita5` varchar(10) NOT NULL,
  `note` varchar(100) NOT NULL,
  `dataordine` varchar(20) NOT NULL,
  `telefono` varchar(10) NOT NULL,
  `stato` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `tblordini`
-- ----------------------------
BEGIN;
INSERT INTO `tblordini` VALUES ('1', 'Pippo', 'ACQUA MINERALE (BOTTIGLIA DA LT. 0,5)', '1', 'CAFFE DECAFFEINATO', '1', 'GHIACCIOLO ALLA FRUTTA', '1', '', '', '', '', '', '', '', '04/07/2017 06.44.36', '3333', '0'), ('2', 'Pluto', 'GINSENG', '1', 'SUCCO DI FRUTTA PESCA (IN VETRO)', '1', 'BOMBOLONE ALLA CIOCCOLATA', '1', '', '', '', '', '', '', '', '04/07/2017 06.45.34', '333', '1'), ('4', 'Minnie', 'COCA COLA', '2', 'SCHWEPPES', '2', '', '', '', '', '', '', '', '', '', '04/07/2017 06.46.08', '333', '0');
COMMIT;

Fammi sapere
 
PERFETTOOOOO!!!
Non sarei riuscito nemmeno sotto tortura...
Grazie infinite

Un ultima cosa...le check una volta cliccate ADESSO RIMANGONO GIALLE e il carattere della stringa "Ordine evaso" è bianco, mica si può colorare per esempio di nero o comunque un colore che si legga cosa c'è scritto sullo sfondo giallo?

Di nuovo GRAZIE
Max61
 
i color background-color e color li puoi andare a mettere inline
PHP:
<span style="background-color: #fff;color:#fff">
oppure
PHP:
<span class="check">
e
<span class="uncheck">
e nelle <head> metti il classimo
PHP:
<style>
.check{
background-color: #fff;
color: #fff;
}
.uncheck{
background-color: #fff;
color: #fff;
}
</style>

ovviamente poi vaia dare gli stessi colori nella parte javascrit.

Se ti sono stato d'aiuto metti mi piace ;) Grazie.


Fammi sapere
 
  • Like
Reactions: Max61
Di aiutooooooo?
Non avrei saputo da che parte iniziare
Grazie infinite
Max61
 
Ciao bubino8 e grazie per tutto l'aiuto chi mi hai dato, vorrei chiederti una cosa se è possibile e se non disturbo troppo:
una volta cliccato sull'ordine cambia immediatamente il colore, ma il testo no, rimane "Ordine da evadere" e diventa "Ordine evaso" soltanto dopo l'aggiornamento della pagina, mi chiedevo se è possibile cambiare anche il testo subito come il colore.
Ti invio in allegato l'immagine che rende meglio quello che chiedo
Ho provato a fare qualcosa ma...niente di buono

Grazie per l'infinita pazienza
Max61
 

Allegati

Discussioni simili