Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    103

    checkbox controlla quali campi checked

    Buongiorno a tutti,
    per ogni tupla inserite nel database,ho creato una checkbox.
    e lho fatto in qst modo

    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' ></td>\n";

    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";

    ora mi serve creare una funzione in javascript che prenda i valori di tutte le righe checked.
    come potrei fare..??

    se non sono stato chiaro ditemelo che lo rispiego..

  2. #2

    Re: checkbox controlla quali campi checked

    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' ></td>\n";

    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";
    Potresti creare una stringa in php (contenente tutti gli id dei vari checkbox) da passare poi al javascript. Quindi il tuo script lo modificherei così:

    $elenco_id = "new Array(\""; //da mettere prima di creare la tabella <table>

    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' onclick='controllaCheckbox()'></td>\n";

    $elenco_id = $elenco_id . $id . "\", \""; //da mettere ogni volta che hai un nuovo $id

    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";

    $elenco_id = $elenco_id . "\")"; //da mettere dopo il tag </table>
    $elenco_id = str_replace(", \"\"", "", $elenco_id);

    A questo punto hai una stringa $elenco_id che puoi passare ad una funzione javascript (che la vedrà come vettore):

    <script language="javascript" type="text/javascript">
    <!--

    var elenco_checkbox = <?php echo $elenco_id;?>;
    var elenco_selezionati = new Array();

    function controllaCheckbox() {
    elenco_selezionati = Array(); //azzero l'elenco di quelli selezionati
    var p=0;

    for (i=0; i<elenco_checkbox.length; i++) {
    if (document.getElementById(elenco_checkbox[i]).checked == "true") {
    elenco_selezionati[p] = elenco_checkbox[i];
    p++;
    }
    }

    }

    -->
    </script>

    Ora hai a disposizione la variabile javascript "elenco_selezionati" contenente gli id dei checkbox spuntati... almeno credo
    Michele
    King Of The Kill

  3. #3
    Un altro modo sarebbe quello di mantenere la parte in php come l'avevi fatta tu, aggiungendo solo l'attributo onclick='controllaCheckbox()' ai vari checkbox, e quindi creare del codice javascript simile a questo:

    <script language="javascript" type="text/javascript">
    <!--

    var elenco_input = new Array();
    var elenco_checkbox = new Array();
    var elenco_selezionati = new Array();
    var s = 0;

    elenco_input = document.getElementsByTagName("input");

    for (i=0; i<elenco_input.length; i++) {
    if (elenco_input[i].getAttribute("type") == "checkbox") {
    elenco_checkbox[s] = elenco_input[i];
    s++;
    }
    }

    function controllaCheckbox() {
    elenco_selezionati = Array(); //azzero l'elenco di quelli selezionati
    var p=0;

    for (i=0; i<elenco_checkbox.length; i++) {
    if (elenco_checkbox[i].checked == "true") {
    elenco_selezionati[p] = elenco_checkbox[i];
    p++;
    }
    }

    }

    -->
    </script>

    La differenza è che ora nel vettore "elenco_selezionati" non hai semplicemente gli id dei checkbox, ma i checkbox stessi, con le rispettive proprietà ed attributi vari. Perciò se a te serve solo l'elenco degli id, dovrai usare un ciclo for, o qualcosa di simile, e recuperare l'attributo "id":

    for (i=0; i<elenco_selezionati.length; i++) {
    elenco_selezionati[i] = elenco_selezionati[i].getAttribute("id");
    }

    Questo metodo ti creerà qualche problema nel caso tu abbia altri checkbox sparsi nella pagina...
    Dovresti andare a controllare quali checkbox hanno un parentNode che coincide proprio con la tua tabella...
    Michele
    King Of The Kill

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    103
    grazie mille per l'aiuto!!!
    Davvero gentilissimo..
    Ti dico subito che ho scelto la seconda versione quella col codice in js..
    aggiungendo alla fine
    makePOSTRequest('post.php', elenco_selezionati[]);
    dove makePostrequest l'ho preso di qui..

    http://www.captain.at/howto-ajax-form-post-request.php

    e al javascript di quella pagina ho tolto la funzione get(obj) e ho messo la tua.

    quello che mi serve è proprio quello che c'è in quella pagina..
    con la differenza che io prelevo delle tuple da un database e le inserisco nella checkbox,in base al numero di tuple restituitemi.
    Dopodiche come viene fatto in quella pagina dovrei passare le tuple selezionate alla pagina php, ma volevo farlo in ajax..in modo da vedere subito il risultato senza caricare nuovamente la pagina dei risultati..

    A questo punto i dubbi sono due, uno è di fondo..ovvero..io uso easyphp,ma qnd scrivo le funzioni in javascript non riesco a vederne gli errori..cioè testo la funzione javascript e non va..ma non visualizzo l'errore come vien fatto solitamente con php..

    e poi l'altro è..
    nell'esempio della pagina che ti ho fatto vedere all'inizio del form mette action="javascript:get(document.getElementById('my form'));" io invece cosa dovrei mettergli..
    se metto controllaCheckbox()..cerca un file che si kiama cosi..se metto invece javascript:controllaCheckbox() qnd vado a fare il submit non fa nulla..come se la funzione non partisse..

    grazie!

  5. #5
    Prego, figurati!
    Comunque, ti avviso che io con AJAX non mi ci sono mai cimentato, perciò potrei benissimo dirti delle castronerie

    Allora, il problema relativo agli errori javascript io l'ho un po' tamponato utilizzando FireFox, la sua "Console degli errori" (la trovi nel menu "strumenti") e un'estensione chiamata FireBug che puoi trovare qui: http://www.getfirebug.com/.
    Certo, non è che ti dicono come sistemare gli errori, però almeno si riesce a capire in quale riga si trova la magagna, se c'è qualche funzione o variabile non definita, o qualche proprietà inesistente di oggetti vari... cose così...

    Per quanto riguarda l'altro problema:
    non sono sicuro che funzioni, ma io toglierei makePOSTRequest che hai aggiunto alla fine della funzione controllaCheckbox() e lo metterei direttamente nell'action:

    action="javascript:makePOSTRequest('post.php', elenco_selezionati)"

    L'array "elenco_selezionati" ce l'hai già e puoi usarlo come ti pare, quindi perchè non passarglielo direttamente come parametro alla funzione makePOSTRequest?
    Se invece lasci makePOSTRequest nella funzione controllaCheckbox() dovresti vedere la pagina aggiornarsi ad ogni spunta che fai sui tuoi checkbox. A quel punto non ti servirebbe più né il form né tantomeno l'action (o sbaglio?)

    Ora però avrei bisogno di qualche chiarimento...

    Ho visto che tu avevi inserito anche le parentesi quadre nella makePOSTRequest:
    Ti dico subito che ho scelto la seconda versione quella col codice in js..
    aggiungendo alla fine
    makePOSTRequest('post.php', elenco_selezionati[]);
    E' una cosa voluta? Sei sicuro che ci vadano? Se sì, mettile anche nell'action che ti ho suggerito poco fa...

    E poi... Hai già verificato che tipo di variabile viene passata con la funzione makePOSTRequest? Ripeto, io di AJAX non ci capisco granchè, ma ho il sospetto che con variabili di tipo POST si possano passare per lo più stringhe... perciò, temo che prima di passare il parametro alla funzione makePOSTRequest, dovresti convertire il vettore "elenco_selezionati" in una stringa.
    Alla fine cosa usi? elenco_selezionati è un vettore di "oggetti" o di "id"?
    Se hai solo gli id, in fondo alla funzione controllaCheckbox() aggiungi questa riga:

    elenco_selezionati = "'" + elenco_selezionati.join("', '") + "'";
    (ottieni una stringa del genere: 'check1', 'check2', 'check3')

    Se invece hai degli oggetti, allora dipende cose ne devi fare... puoi sempre recuperare gli id, metterli in un vettore, poi in una stringa e quindi passarli in POST.

    Un'ultima cosa: dove vanno a finire le variabili che gli passi? nella pagina post.php? allora lì puoi eventualmente riconvertire la stringa in un vettore (e poi individuare di nuovo gli oggetti corrispondenti agli id) all'interno di uno script php e/o di uno script javascript, a seconda di quello che ne devi fare...

    Spero si sia capito qualcosa e che non ci siano troppi errori (anche concettuali).. insomma, io ci ho provato...
    Michele
    King Of The Kill

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    103
    Nel makePostRequest non capisco che tipo di variabile ci vada..perkè se eseguo ilk codice di quella pagina troivo che ciò che è contenuto nella variabile globale $_POST è

    Array ( [mytextarea1] => my test 1 2 3 [mytextarea2] => my test2 4 5 6 )

    quindi credo si tratti di una stringa..

    se provo a mettere makePostRequest in action mi vien data come funzione non trovata..
    .......

    Quello che serve a me è in sostanza 1 cosa.
    Mi serve un javascript che prenda i miei $id e me li butti nell'altra pagina php in modo che posso processarli..
    sembra una cosa molto semplice..ma sarà che sono negato io..
    nn riesco a trovare qualcosa che mi aiuti a risolvere questo problema..
    ti ringrazio cmq tnt per la disponibilita

  7. #7
    Ok, forse ci sono...
    allora, tu hai la funzione controllaCheckbox che restituisce un array "elenco_selezionati" in cui hai degli oggetti (i checkbox spuntati). A te servono gli id di questi oggetti, giusto? Bene, se non l'hai già fatto, aggiungi alla fine (ma all'interno) della funzione questi due cicli for:

    for (i=0; i<elenco_selezionati.length; i++) {
    elenco_selezionati[i] = elenco_selezionati[i].getAttribute("id");
    }

    Ora hai un vettore con gli id. Il problema della funzione makePOSTRequest è che non legge soltanto il contenuto del vettore, ma anche gli indici, quindi:

    var stringa_post = "";
    for (i=0; i<elenco_selezionati.length-1; i++) {
    stringa_post = stringa_post + i + "=" + elenco_selezionati[i] + "&";
    }
    stringa_post = stringa_post + (elenco_selezionati.length - 1) + "=" + elenco_selezionati[elenco_selezionati.length-1];

    abbiamo creato una stringa contenente sia gli indici, sia gli id.
    Potevo fare il tutto in un unico passaggio, però così forse si capisce qualcosina di più...

    Ora nell'action del form metti:
    action="javascript:makePOSTRequest('post.php',stri nga_post);" (java-script senza il trattino ... è questo forum che lo mette in automatico)

    Adesso non so come tu possa utilizzare questa stringa che ti è stata passata, ma lì dentro hai gli indici da 0 a n con i corrispondenti id...
    Se vuoi ravanarci su, puoi andare a modificare, all'interno della funzione alertContents(), la variabile "result"... E' lì che verrà memorizzata la tua stringa_post.

    Dovrebbe essere tutto...

    Se invece decidi di abbandonare AJAX (solo in questo caso, eh?), forse ho in mente una soluzione più semplice...
    Michele
    King Of The Kill

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    103
    grazie mille per il fastidio che ti stai prendendo..
    davvero!!
    scusami se rispondo ora..ma al mattino sono fuori..
    dunque è un po che ci sto provando ma mi dice stringa_post is not defined alla riga 1.
    non so se sono io a sbagliare qlcs..magari stringa_post va messa all'interno della funzione makepostrequest..???

    questi sono i pezzi di codice interessati,non mi sembra di sbagliare nulla fin qui..

    <script type="text/javascript" language="javascript">


    var http_request = false;
    function makePOSTRequest(url, parameters) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    // set type accordingly to anticipated content type
    //http_request.overrideMimeType('text/xml');
    http_request.overrideMimeType('text/html');
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
    }

    http_request.onreadystatechange = alertContents;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
    stringa_post;
    }

    function alertContents() {
    if (http_request.readyState == 4) {
    if (http_request.status == 200) {
    alert(http_request.responseText);
    result = http_request.responseText;
    document.getElementById('myspan').innerHTML = result;
    } else {
    alert('There was a problem with the request.');
    }
    }
    }

    var elenco_input = new Array();
    var elenco_checkbox = new Array();
    var elenco_selezionati = new Array();
    var s = 0;

    elenco_input = document.getElementsByTagName("input");

    for (i=0; i<elenco_input.length; i++) {
    if (elenco_input[i].getAttribute("type") == "checkbox") {
    elenco_checkbox[s] = elenco_input[i];
    s++;
    }
    }

    function controllaCheckbox() {
    elenco_selezionati = Array(); //azzero l'elenco di quelli selezionati
    var p=0;

    for (i=0; i<elenco_checkbox.length; i++) {
    if (elenco_checkbox[i].checked == "true") {
    elenco_selezionati[p] = elenco_checkbox[i];
    p++;
    }
    }

    for (i=0; i<elenco_selezionati.length; i++) {
    elenco_selezionati[i] = elenco_selezionati[i].getAttribute("id");
    }

    var stringa_post = "";
    for (i=0; i<elenco_selezionati.length-1; i++) {
    stringa_post = stringa_post + i + "=" + elenco_selezionati[i] + "&";
    }
    stringa_post = stringa_post + (elenco_selezionati.length - 1) + "=" + elenco_selezionati[elenco_selezionati.length-1];

    }

    -->
    </script>

    e poi la parte in php:

    <form name="tablesForm" method="post" action="javascript:makePOSTRequest('post.php',stri nga_post);" id="myform" >
    .
    .
    .
    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' onclick='controllaCheckbox()' ></td>\n";
    $elenco_id = $elenco_id . $i . "\", \""; //da mettere ogni volta che hai un nuovo $id
    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";
    .
    .
    .
    <input type="submit" name="remove" value="remove" >

    ho evitato di mettere alcune parti inutili del form tipo <table> che cmq ci sono gia..

  9. #9
    Ok, ti metto in rosso quello che secondo me non va bene:

    Originariamente inviato da hab
    <script type="text/javascript" language="javascript">


    var http_request = false;
    function makePOSTRequest(url, parameters) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    // set type accordingly to anticipated content type
    //http_request.overrideMimeType('text/xml');
    http_request.overrideMimeType('text/html');
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
    }

    http_request.onreadystatechange = alertContents;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
    stringa_post; //<-- ELIMINA QUESTA RIGA
    }

    function alertContents() {
    if (http_request.readyState == 4) {
    if (http_request.status == 200) {
    alert(http_request.responseText);
    result = http_request.responseText;
    document.getElementById('myspan').innerHTML = result;
    } else {
    alert('There was a problem with the request.');
    }
    }
    }

    var elenco_input = new Array();
    var elenco_checkbox = new Array();
    var elenco_selezionati = new Array();
    var stringa_post = ""; // definisco stringa_post fuori dalla funzione controllaCheckbox
    var s = 0;

    elenco_input = document.getElementsByTagName("input");

    for (i=0; i<elenco_input.length; i++) {
    if (elenco_input[i].getAttribute("type") == "checkbox") {
    elenco_checkbox[s] = elenco_input[i];
    s++;
    }
    }

    function controllaCheckbox() {
    elenco_selezionati = Array(); //azzero l'elenco di quelli selezionati
    var p=0;

    for (i=0; i<elenco_checkbox.length; i++) {
    if (elenco_checkbox[i].checked == "true") {
    elenco_selezionati[p] = elenco_checkbox[i];
    p++;
    }
    }

    for (i=0; i<elenco_selezionati.length; i++) {
    elenco_selezionati[i] = elenco_selezionati[i].getAttribute("id");
    }

    stringa_post = ""; <-- Ho tolto "var", e "azzero" la stringa ad ogni chiamata della funzione
    for (i=0; i<elenco_selezionati.length-1; i++) {
    stringa_post = stringa_post + i + "=" + elenco_selezionati[i] + "&";
    }
    stringa_post = stringa_post + (elenco_selezionati.length - 1) + "=" + elenco_selezionati[elenco_selezionati.length-1];

    }

    -->
    </script>

    e poi la parte in php:

    <form name="tablesForm" method="post" action="javascript:makePOSTRequest('post.php',stri nga_post);" id="myform" >
    .
    .
    .
    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' onclick='controllaCheckbox()' ></td>\n";
    $elenco_id = $elenco_id . $i . "\", \""; //da mettere ogni volta che hai un nuovo $id
    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";
    .
    .
    .
    <input type="submit" name="remove" value="remove" >

    ho evitato di mettere alcune parti inutili del form tipo <table> che cmq ci sono gia..
    Speriamo che ora funzioni...
    Michele
    King Of The Kill

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    103
    eh no..nn va neanke cosi..
    anke perkè le cose che mi hai corretto..sono le cose che avevo aggiunto per prova..e che sbadatamente non avevo piu tolto..
    in ogni caso ho risolto il problema ma a metà..
    in questa maniera in pratica riesco a mandare le variabili alla pagina di php che mi vengono visualizzate come
    Array ( [selected_tbl] => Array ( [0] => 3 [1] => 5 [2] => 7 ) [remove] => remove )

    certo bisogna apportare qlke correzione a quel che si manda..ma l'importante era mandare..
    i problemi sono 3:
    1 - il risultato me lo visualizza in un altra pagina ricaricandola tutta..mentre a me serve che vada caricato solo quel pezzo..(altrimenti cosa sto usando a fare ajax???:P)
    il problem dipende sempre da quell'action maledetto del form...
    2 - dalla funzione alertContent gli dico di stampare il contenuto di post.php dove c'è scritto in pratica Server response e non lo fa..
    3 - perke se nel javascript nella riga in cui gli definisco cosa mandargli
    http_request.send(stringa_post);
    prende come argomento di send indifferentemente stringa e stringa_post visto che la variabile stringa da sola nn esiste??:|

    <script type="text/javascript" language="javascript">
    var elenco_input = new Array();
    var elenco_checkbox = new Array();
    var elenco_selezionati = new Array();
    var s = 0;

    elenco_input = document.getElementsByTagName("input");

    for (i=0; i<elenco_input.length; i++) {
    if (elenco_input[i].getAttribute("type") == "checkbox") {
    elenco_checkbox[s] = elenco_input[i];
    s++;
    }
    }

    function controllaCheckbox() {
    elenco_selezionati = Array(); //azzero l'elenco di quelli selezionati
    var p=0;

    for (i=0; i<elenco_checkbox.length; i++) {
    if (elenco_checkbox[i].checked == "true") {
    elenco_selezionati[p] = elenco_checkbox[i];
    p++;
    }
    }

    for (i=0; i<elenco_selezionati.length; i++) {
    elenco_selezionati[i] = elenco_selezionati[i].getAttribute("id");
    }

    var stringa_post = "";
    for (i=0; i<elenco_selezionati.length-1; i++) {
    stringa_post = stringa_post + i + "=" + elenco_selezionati[i] + "&";
    }
    stringa_post = stringa_post + (elenco_selezionati.length - 1) + "=" + elenco_selezionati[elenco_selezionati.length-1];
    }



    function eseguiRichiesta(url) {

    var http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    http_request.overrideMimeType('text/xml');
    // Vedi note sotto
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }

    if (!http_request) {
    alert('Giving up Non riesco a creare una istanza XMLHTTP');
    return false;
    }
    controllaCheckbox()
    http_request.onreadystatechange = function() { alertContents(http_request); };
    http_request.open('POST', url, true);
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.send(stringa_post);

    }

    function alertContents(http_request) {

    if (http_request.readyState == 4) {
    if (http_request.status == 200) {
    result = http_request.responseText;
    document.getElementById('myspan').innerHTML = result;
    } else {
    alert('Si è verificato un problema con la richiesta');
    }
    }



    }
    </script>

    <form name="tablesForm" method="post" action="post.php" onsubmit="eseguiRichiesta('post.php');" id="myform" >
    ...
    echo "\n<tr>\n";
    echo "\n<td><input id='$id' type='checkbox' name='selected_tbl[]' value='$i' ></td>\n";

    foreach ($keys as $k)
    {
    echo "<td>" . $row[$k] . "</td>\n";
    }

    echo "</tr>\n";
    ...
    <input type="submit" name="remove" value="remove" >




    Server-Response:

    <hr>
    <span name="myspan" id="myspan"></span>
    <hr>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.