[PHP] [HTML] Action direttamente associate a onmouseover

tanoferr

Nuovo Utente
22 Ago 2018
6
0
1
Salve ragazzi,

Mi trovo davanti ad un problema che non riesco proprio a risolvere.Ho realizzato una griglia di dimensione fissa(nel mio caso 5x10) dove ogni casella della griglia ha al suo interno un button..Voglio che in relazione al passaggio del mouse su una casella si colori quella casella di verde e le successive fino al valore che ho estratto dal database....

Ora dato che devo estrapolare un valore dal database devo usare PHP e quindi non posso usare onmouseover per ricollegarmi ad un script JAVASCRIPT perchè come da nozione base non posso usare php dentro javascript

Come posso fare??

Avevo pensato di usare un semplicissimo form,con metodo post, che mi ricollega tramite un action ad un altra pagina php dove svolgo tutte le operazioni di mio interesse ma non riesco a far scattare il form in relazione al passaggio del mouse sulla casella(credo che non si possa proprio fare).come posso risolvere??
 
Al contrario di ciò che pensi si può inserire javascript in PHP ecco un esempio:
PHP:
<?php
$stringa= "#";
echo "<script language=\"JavaScript\">\n";
echo "alert(\"$stringa\");\n";
echo "</script>";
?>
Comunque ti sposto in PHP
 
ciao Max 1,

grazie della risposta, e se devo costruire una function javascript come la scritto.Ti faccio vedere il codice

PHP:
<?php
echo "<td id=\"button_td\" bg color=\"white\">".
                    "<form  method=\"post\" action=\"tento_insert_db.php\">".
                    "<input id=\"form_nascosto\" style=\"visibility:hidden\" type=\"number\"  name=\"row\"  value=$row>".
                    "<input id=\"form_nascosto\" style=\"visibility:hidden\" type=\"number\"   name=\"col\" value=$col>".
                "<button id=\"button_dentro_tabella\" onmouseover=\"evidenzio_successivi()\" type=\"submit\"> </button>"."</form>"."</td>";
?>

quello che voglio è creare la function evidenzio_successivi() che ovviamente deve essere JAVASCRIPT dove svolgere operazioni che richiedono dati php
 
Un modo potrebbe essere quello di creare la pagina con il tuo form come hai postato ad esempio, poi intercetti l'evento mouseover e li dentro fai il trigger del button (con jQuery o Javascript) e simuli il click
 
Mi sapresti aiutare sul come fare il trigger del button in JavaScript e come simulare il click che non ne ho idea...
 
Codice:
document.addEventListener('readystatechange',function(){
  if (document.readyState === 'complete'){
    var btn = document.getElementById('id_del_button');
    btn.addEventListner('mouseover', function(){
      btn.click();
    });
  }
});

L'ho scritto al volo quindi va ricontrollato, comunque è un punto di patrenza
 
quindi in questo modo mi simula il click del mouse e riesco ad avere i valori del form definiti ed usabili??
 
è uno script javascript che, dopo che la pagina è completamente caricata, aggiunge ad un elemento specifico del DOM con id 'id_del_button' l'evento mouse over, quindi quando il mouse passerà sopra quell'elemento sarà come se l'utente l'avesse cliccato.
Chiaramente questo è un esempio banale di come puoi fare, dopo sta a te adattarlo alle tue esigenze
 
ciao Rikk73 ho utilizzato lo script che tu mi hai gentilmente fornito , funziona ma riscontro la necessità di aver un ulteriore peculiarità..Se guardi il codice da me inserito qualche giorno fa io ho un form .Ora c'è un modo che mi dia la possibilità di settare le due variabili POST del form correttamente. Ti spiego io vorrei che al passaggio del mouse vado nella funzione che mi simula il click, evidenzio_successivi() . La simulazione del click mi fa entrare nella action del form ma i due valori ROW E COL del form non sono settati..come faccio a settarli??
 
intanto per i campi input nascosti invece di impostare lo style, fai meglio e prima così
Codice:
  <input type=\"hidden\" name=\"row\" value=\"$row\" />
  <input type=\"hidden\" name=\"col\" value=\"$col\" />

Dal codice che avevi postato non ti funzionava perché avevi scritto value=$row (senza le virgolette)
 
cioa Rikk73 ho apportato l'ultima modifica da te consigliata ma niente penso che il problema sia più subdolo....il mio obiettivo è "passando semplicemente il puntatore del mouse sugli slot, automaticamente si devono colorare di verde tutti gli slot che verrebbero prenotati nel caso in cui si facesse click su quello slot. Se non è possibile prenotare tutti gli slot richiesti, quelli prenotabili devono essere colorati di rosso anziché di verde. Effettuando il click sullo slot il sistema deve, senza ulteriori azioni da parte dell'utente, effettuare una richiesta al server per prenotare il numero di slot richiesti a partire da quello del click".

ti posto l'intero codice della pagina PHP(non è tutto perche il forum pone un limite superiore di caratteri mac per messaggio
PHP:
<html>
<?php

?>
<head>
    <link rel="stylesheet" type="text/css" href="stile_pagina.css">
    <script>
     function evidenzio_cella()
    {
     var btn = document.getElementById('button_dentro_tabella');
        btn.click();
    }
   
     </script>
 
</head>
<body>
    <div class="bar_orizzontal"><h1 align="center">Gestione Prenotazioni</h1>
            <h2  align="center" >Area Riservata</h2>
     
    </div>
 
    <div><ul id="ul_registrato"><li><a href="session_destroy.php">Log_out</a></li></ul></div>

<div>
    <table id="inserimento_slot">
            <form method="post"  name="n_slot" action="set_numero_slot.php">
                <td>numero_slot(DEFAULT 6)</td>
                <tr><td><input type="number" name="slot"></td></tr>
                <tr><td><input type="submit" value="invio" onclick="setslot();"></td></tr>
            </form></table></div>
 
 
<div>
    <table id="inserimento">
        <form action="tento_delete_db.php">
            <tr><td align="right"><input type="submit" value="cancella">  </td></tr>
        </form></table></div>
  
   
  
<div id="griglia_registrato">
 
<?php
    if(!isset($_SESSION['username']))
        $_SESSION['username']=" ";
 
    if(!isset($_SESSION['n_slot']))
        $_SESSION['n_slot']=SLOT_DEFAULT;
 
 
    if(!isset($_SESSION['posizionamento_non_consentito']))
        $_SESSION['posizionamento_non_consentito']=0;
 
     if(  $_SESSION['posizionamento_non_consentito']==1){
        echo "<script type='text/javascript'>alert('Inserimento non consentito');</script>";
        $_SESSION['posizionamento_non_consentito']=0;
   }
 
 
    $email=$_SESSION['username'];
    $numero_slot_richiesti=$_SESSION['n_slot'];
    $griglia=stampa_prenotazioni_my_user($email);

$colore=$_SESSION['colore_user'];
 
        echo "<table id=\"rappresentazione_griglia_registrato\"";
         echo"<tr bgcolor=\"white\">";
        for ($row = 0; $row < 5; $row++) {
                echo"<tr bgcolor=\"white\">";
            for ($col = 0; $col < 10; $col++) {
                 
                 if( $griglia[$row][$col] == 0)
                        echo "<td id=\"button_td\" bg color=\"white\">".
                        "<form  method=\"post\" action=\"evidenzio.php\">".
                        "<input id=\"form_nascosto\" style=\"visibility:hidden\" type=\"number\"  name=\"row\"  value=\"$row\">".
                        "<input id=\"form_nascosto\" style=\"visibility:hidden\" type=\"number\"   name=\"col\" value=\"$col\">".
                        "<button id=\"button_dentro_tabella\" onmouseover=\"evidenzio_cella();\"  type=\"submit\"> </button>"."</form>"."</td>";
          
      
                  
                }
        echo "<tr/>";
    }
    echo "</table>";

 ?>
il mio obiettivo è che quando sono in questo if ( if($_SESSION['doppio_click']== 0 && $griglia[$row][$col] == 0) ) devo riuscire a salvarmi le effettive coordinate della cella dove passo con il mouse ma cosi non è perchè viene evidenziata sempre la prima casella dall'alto.Vorrei risolvere il problema senza stravolgere il codice anche perchè credo esista un metodo più semplice :)
 
Ultima modifica di un moderatore:
immagino che gli id che hai scritto nel codice siano solo di esempio, ma ricorda che ogni id deve essere univoco nella stessa pagina, se la funzione cerca sempre 'bottone_dentro_tabella' si ferma al primo che trova nella pagina.
dai agli id un identificatore univoco, ad esempio "... id=' "button_".$row."_".$col." ' ...", oppure (forse meglio direi, lascia perdere l'id che se non è obbligatorio (a meno che non ti serva per altre cose) e passa dei parametri alla funzione javascript, ad esempio il $row e $col, dai quali puoi riuscire a risalire a quale zona evidenziare
 

Discussioni simili