Homepage  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


.dsy:it. .dsy:it. Archive > Community > Forum De Bell Tolls
 
[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.

Hamelin
Grazie mille!

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...

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate