Visualizzazione risultati 1 fino 15 di 15

Discussione: Invio dati da javascript a php

  1. #1
    Guest

    Predefinito Invio dati da javascript a php

    Buongiorno. Eccomi con un altro problema..
    Come posso inviare una variabile da javascript a php?
    ho provato con Ajax in questo modo ma non va..
    In pratica voglio che quando il form viene inviato, il client crea un'altra variabile (che non viene inserita dall'utente) e la invia al server:

    file index.html
    Codice:
    <input type="submit" value="INVIA" onsubmit="ajaxGestore();">
    file gestori.js
    Codice:
    function ajaxGestore() {
    	var xmlHttp;
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e) {
    				window.alert("Il tuo browser non supporta AJAX!");
    				return false;
    			}
    		}
    	}
    	xmlHttp.open('GET', "./data.php?citta=Pisa", true);
    	xmlHttp.send(null);
    }
    file data.php
    Codice:
    <?php echo $_GET['citta'] ?>
    L'errore che mi esce è questo:

    Notice: Undefined index: citta

    poi ho provato a creare un form dinamicamente ma esce lo stesso errore:
    Codice:
    var gestore() {
    	var form = document.createElement("form");
    	form.setAttribute("action", "./data.php");
    	form.setAttribute("method", "post");
    	input = document.createElement("input");
    	input.setAttribute("type", "button");
    	input.setAttribute("name", "citta");
    	input.setAttribute("value", "pisa");
       	form.appendChild(input);
            document.body.appendChild(form);
            form.submit();
            document.body.removeChild(form);
    }
    non so più cosa provare..
    grazie!!

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Puoi indicare l'indirizzo della pagina in questione?

  3. #3
    Guest

    Predefinito

    purtroppo no perchè sto facendo tutto in locale.. col server apache

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Non potresti indicare almeno il codice completo della pagina? Il codice che hai riportato finora sembra corretto.

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,257

    Predefinito

    A me funziona (vedi qui):

    Codice HTML:
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>prova</title>
    <script type="text/javascript">
    function ajaxGestore() {
    	var xmlHttp;
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e) {
    				window.alert("Il tuo browser non supporta AJAX!");
    				return false;
    			}
    		}
    	}
    	xmlHttp.open('GET', "./data.php?citta=Pisa", true);
    	xmlHttp.send(null);
    }
    </script>
    </head>
    <body>
    <button onClick="ajaxGestore();">AJAX</button>
    </body>
    </html>
    -----
    Codice:
    form.setAttribute("method", "post");
    Non dovrebbe esser GET?

    Ciao!
    Ultima modifica di alemoppo : 14-07-2013 alle ore 01.44.43

  6. #6
    Guest

    Predefinito

    Codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
    
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    		<script type="text/javascript" src="./gestori.js"></script>
    	</head>
    	<body>
    		<form action="php/progetto.php" id="loadForm" method="post">
    				<div class="userName">
    					<label>Nome utente: </label><br>
    					<input type="text" name="name">
    				</div>
    				<div class="passWrapper">
    					<label>Password: </label><br>
    					<input type="password" name="pass">
    				</div>
    				<div id="sendWrapper">
    					<input type="submit" value="INVIA" onclick="provainvio();">
    				</div>	
    	</body>
    </html>
    file gestori.js
    Codice:
    function provainvio() {
    	var form = document.createElement("form");
    	form.setAttribute("action", "invio.php");
    	form.name = "mioform";
    	var input = document.createElement("input");
    	input.type="text";
    	input.value = "Pisa";
    	input.name = "citta";
    	form.appendChild(input);
    	document.body.appendChild(form);
    	form.submit();
    	document.body.removeChild(form);
    }
    così funziona perchè invio il dato ad una pagina php diversa (invio.php) da quella a cui vengono inviati il nome e la password. I risultati non vengono visualizzati perchè quando invio il form si apre la pagina progetto.php, ma almeno riesco a mettere il dato nel database che era quello che dovevo fare..
    grazie mille a tutti!!

  7. #7
    Guest

    Predefinito

    Ti consiglio di utilizzare jQuery, molto meglio (nello specifico: http://api.jquery.com/jQuery.ajax/).
    Ciao!

  8. #8
    Guest

    Predefinito

    Ciao, scusate.. sono qui ancora con lo stesso problema..
    purtroppo non posso usare jquery.
    Provo a spiegare il problema:
    ho creato un pianoforte virtuale, ogni volta che viene premuto un tasto, viene

    visualizzata l'immagine corrispondente alla nota premuta su un pentagramma in modo tale

    che alla fine viene fuori uno spartito musicale.
    Ora devo fare in modo che un utente possa memorizzare tale spartito su un database. Devo

    quindi permettere all'utente di registrarsi (e questo l'ho fatto). Poi ho fatto un form

    che chiede Nome utente, password e il titolo della traccia e voglio che quando il form

    viene sottomesso, nel database si crei (nella tabella dell'utente che è stata creata in

    fase di registrazione) una riga contenente il titolo della traccia e la sequenza dei

    nomi delle immagini che compongono lo spartito (dopo aver verificato che l'utente è

    registrato e che la password è corretta).
    come posso fare?
    non riesco a risolvere in nessun modo..

    Questa è la pagina (ovviamente sono solo prove per cercare di riuscire a inviare dati a php tramite javascript)

    http://ciakfoto.altervista.org/prova...tto/index.html
    Ma InnoDB non è ancora attivo.

  9. #9
    Guest

    Predefinito

    Ecco come fare per memorizzare lo spartito:

    Codice:
    var noteStringa = "";
    var note = document.getElementById('rigaDisplay0').children;
    for(k in note){
      noteStringa += note[k].getAttribute("src")+";";
    }
    A questo punto salva la stringa "noteStringa" nel database.
    Per ricreare lo spartito non dovrai fare altro che estrarre la stringa dal database e fare:

    Codice:
    var noteStringa = ...estratta dal database...
    var note = noteStringa.split(";");
    for(k in note){
      ...stampo immagine che ha come url note[k]...
    }
    Se hai bisogno di altro chiedi pure.

  10. #10
    Guest

    Predefinito

    Ok grazie,
    ma poi come faccio a memorizzare noteStringa nel database? dovrei inviarla al server e poi memorizzarla con php nel database, ma non ci riesco.. :/

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,257

    Predefinito

    Citazione Originalmente inviato da ciakfoto Visualizza messaggio
    ma non ci riesco.. :/
    Come hai provato?

    Puoi usare o ajax (volendo, con l'ausilio di jQuery), oppure carichi tutto in un form, dentro un campo "hidden", e lo invii ad una pagina HTML (facendo il submit del form).

    Ciao!

  12. #12
    Guest

    Predefinito

    Se hai già fatto la procedura di registrazione/login non devi fare altro che riadattare il codice già scritto..più o meno.

    Puoi postare il codice già fatto e di preciso dire in cosa ti blocchi?

  13. #13
    Guest

    Predefinito

    Sì, ho già fatto la procedura di registrazione.
    Posto il codice in cui mi blocco:

    Codice:
    <form action="php/progetto.php" name="sendForm" method="post">
    				<div class="userName">
    					<label>Nome utente: </label><br>
    					<input type="text" name="name">
    				</div>
    				<div class="passWrapper">
    					<label>Password: </label><br>
    					<input type="password" name="pass">
    				</div>
    				<div class="titleWrapper">
    					<label>Titolo: </label><br>
    					<input type="text" name="titolo">
    				</div>
    				<div id="sendWrapper">
    					<input type="submit" value="INVIA TRACCIA" onclick="ajaxGestore();">
    				</div>
    			</form>
    Codice:
    function ajaxGestore() {
    	var xmlHttp;
    	try {
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e) {
    				window.alert("Il tuo browser non supporta AJAX!");
    				return false;
    			}
    		}
    	}
    	display = document.getElementById("display");
    	var immagini = display.getElementsByTagName("img");
    	var percorsi = "";
    	for(var i = 0; i < immagini.length; i++) {
    		percorsi += immagini[i].src + ";";
    	}
    	
    	xmlHttp.open('GET', "php/progetto.php?spartito=" + percorsi, true);
    	xmlHttp.send(null);
    }
    Codice:
    <?php
    			$connessione = mysql_connect("127.0.0.1", "root")
    			or die ("Connessione non riuscita: " . mysql_error());
    			print ("Connesso con successo<br>");
    			
    			mysql_select_db("spartiti");
    			
    			$nome = $_POST['name'];
    			$password = $_POST['pass'];
    			$titolo = $_POST['titolo'];
    			
    			$query = "SELECT nome, password FROM utenti WHERE nome='$nome'";
    			$ris = mysql_query($query);
    			$row = mysql_fetch_array($ris);
    			if(!$row['nome']) 
    				echo "<br>L'utente $nome non esiste";
    			
    			if($row['password'] != $password) 
    				echo "<br>Password errata";
    			else 
    				echo "<br>Autenticazione effettuata";
    			
    			$query = "CREATE TABLE if not exists $nome (
    						titolo VARCHAR(45),
    						spartito LONGTEXT,
    						PRIMARY KEY (titolo)
    					) ENGINE = InnoDB;";
    			
    			$ris = mysql_query($query);
    			if (!$ris) { 
    				echo "<br>Impossibile creare la tabella: ".mysql_error(); 
    			} else { 
    				echo "<br>Tabella creata con successo"; 
    			} 
    
    			$query = "INSERT INTO $nome (titolo)
    						VALUES ('$titolo')";
    			$ris = mysql_query($query);
    			if(!$ris) {
    				echo "<br>Operazione non riuscita: ".mysql_error();
    			} else {
    				echo "<br>Query effettuata con successo";
    			}
    			
    			$spartito = $_GET['spartito'];
    			$query = "UPDATE $nome SET spartito = '$spartito' WHERE titolo = '$titolo'";
    			$ris = mysql_query($query);
    		?>
    questo è l'errore riportato
    Notice: Undefined index: spartito in C:\progetto\php\progetto.php on line 53

  14. #14
    Guest

    Predefinito

    Noto dall'errore che progetto.php è offline. Ti conviene caricare tutto su altervista nel link che ci hai dato prima.

    Per ora infatti se invio la traccia da http://ciakfoto.altervista.org/prova...tto/index.html si apre una pagina con: "provaInviooConnesso con successo" e non mi sembra quello che hai mostrato tu adesso :)

    - - - -

    Comunque sia penso di aver trovato il problema: il NOTICE che ricevi ti segnala che hai richiamato delle variabili $_POST inesistenti. Infatti hai sbagliato la logica nell'HTML.
    Ora come ora tu invii una richiesta ajax via GET con la traccia, e (non se parta effettivamente) una richiesta post con nome, traccia e password. Sono due richieste separate!! Devi fare una richiesta unica sennò quella ajax da' errore e l'altra non salva nulla.

    Se vuoi farla in ajax devi fare una richiesta unica che mandi sia user che pass che titolo che traccia. Decidi tu poi se farla GET o POST.

    Ti consiglio per ajax di usare jQuery, ti semplifica molto la vita. Fidati.
    Ultima modifica di helpcode : 25-07-2013 alle ore 10.59.37

  15. #15
    Guest

    Predefinito

    E' vero, facevo due richieste separate.. pensavo si potessero fare..
    ho quindi risolto facendo una richiesta unica, inviando tutto tramite ajax e funziona!
    grazie mille!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •