 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[PHP/MySQL] Cos'ho sbagliato?? Clicca QUI per vedere il messaggio nel forum |
Hamelin |
Mi spiegate perché con il seguente form e la seguente pagina che dovrebbe raccogliere gli input del form non riesco ad ottenere il risultato desiderato? Viene inserito un nuovo record nel database, ma i campi "nome" e "cognome" rimangono vuoti... non NULL... vuoti... mah...
<html>
<head>
<title>Modulo</title>
</head>
<body>
<p>Inserisci nome e cognome</p>
<form method="POST" action="inserisci.php">
<p>Nome:</p>
<input type="text" name="nome">
<br />
<p>Cognome:</p>
<input type="text" name="cognome">
<br />
<input type="submit" value="Invia">
</body>
</html>
___________________________
<html>
<head>
<title>Inserimento record</title>
</head>
<body>
<p>Con questa pagina inserisco un nuovo record nella tabella "prova"</p>
<?php
$idconn = mysql_connect('localhost', '', '') or die("Connessione non riuscita " . mysql_error());
mysql_select_db('fibo', $idconn) or die("Selezione database non riuscita " . mysql_error());
$query = "INSERT INTO prova (nome, cognome) VALUES ('$nome', '$cognome')";
mysql_query($query, $idconn) or die("Inserimento record non riuscito " . mysql_error());
mysql_close($idconn);
?>
</body>
</html> |
korn |
Non funziona perché leggi le variabili dalla pagina di input come globals, cosa che per default è disattivata nelle nuove versioni di php per motivi di sicurezza.
leggile così:
$HTTP_POST_VARS['nome']
$HTTP_POST_VARS['cognome']
o anche:
$_POST['nome']
$_POST['cognome']
quindi in definitiva:
$query = "INSERT INTO prova (nome, cognome) VALUES ('$HTTP_POST_VARS[nome]', '$HTTP_POST_VARS[cognome]')";
nota: gli apici dell'indice dell'array vanno tolti se è inserito all'interno di una stringa. |
AlphaGamma |
L'ho scoperto anche io settimana scorsa. :)
Comunque non funziona nemmeno come dice Korn: non puoi fare una query utilizzando direttamente HTTP_POST_VARS. :sad:
Almeno, su Aruba non funge.
Quindi molto semplicemente faccio cosi'.
Supponiamo che HTTP_POST_VARS["pippo"] sia la nostra variabile. Dichiaro $pippo=HTTP_POST_VARS["pippo"], ed inserisco nella query $pippo. Questo inoltre ti da il vantaggio di non dover riscrivere il codice delle query.
Semplicemente |
korn |
Originally posted by AlphaGamma
L'ho scoperto anche io settimana scorsa. :)
Comunque non funziona nemmeno come dice Korn: non puoi fare una query utilizzando direttamente HTTP_POST_VARS. :sad:
Almeno, su Aruba non funge.
Uhm io ho sempre fatto così e non ho avuto problemi, però non su Aruba. |
Hamelin |
Boh... io lo sto provando in locale e mi funziona benissimo... grazie ancora...
OT (parziale): a proposito... quali servizi di hosting con MySQL incluso consigliate? |
AlphaGamma |
Aruba mi piace, tutto sommato. E' veloce come tempo di elaborazione script, hai spazio illimitato (50 mega di mysql), e costa poco.
Pero' farei a cambio con uno spazio postgres. :) |
korn |
Originally posted by AlphaGamma
Comunque non funziona nemmeno come dice Korn: non puoi fare una query utilizzando direttamente HTTP_POST_VARS. :sad:
Almeno, su Aruba non funge.
Per curiosità, che errore ti dà?
Scusa se faccio un appunto apparentemente banale, ma anche tu saprai che spesso sono le più piccole sviste a minare i programmi: quando hai montato la query in quel modo, avevi tolto gli apici dal nome dell'indice dell'array? |
AlphaGamma |
Originally posted by korn
Per curiosità, che errore ti dà?
Non da errore. Semplicemente la variabile non la vede.
E quindi la query risulta sbagliata e mi da errore mysql.
Scusa se faccio un appunto apparentemente banale, ma anche tu saprai che spesso sono le più piccole sviste a minare i programmi: quando hai montato la query in quel modo, avevi tolto gli apici dal nome dell'indice dell'array?
Non ricordo, ma mi pare di si.
Ricordo anche di aver provato vari test prima di buttarla in query. :)
Adesso pero' mi fai venire qualche dubbio... :pensa: |
korn |
Originally posted by AlphaGamma
Adesso pero' mi fai venire qualche dubbio... :pensa:
Te l'ho detto proprio perché per esperienza personale so che a volte scrivi centinaia di righe di codice tecnicamente corretto e magari non funziona per una minima svista come quella... infatti ormai quando ho problemi col codice le prime cose che controllo sono le cavolate :) |
Cr34t|v3 |
Soluzione alternativa>
Nel file di configurazione del php(php.ini) setta:
register.global = on |
holylaw |
guarda che deve essere:
register_globals = on , per settare le variabili globali :)
anche se non e' il massimo in termini di sicurezza...... |
Cr34t|v3 |
si scusa distrattamente ho scritto il contrario ....
:-D
cmq ho trovato in giro molti server configurati in questo modo |
korn |
Originally posted by Cr34t|v3
si scusa distrattamente ho scritto il contrario ....
:-D
cmq ho trovato in giro molti server configurati in questo modo
Le vecchie versioni di PHP avevano le globals impostate su ON per default, quindi probabilmente molti server le tengono ON tutt'ora per non costringere gli utenti alla modifica di tutti gli script.
Ciononostante, se possibile sarebbe meglio evitare, gli sviluppatori le hanno messe OFF di default perché creano problemi di sicurezza... |
|
|
|
|