problema con l'inserimento dei dati

Dato il seguente codice:

        <?php

          $query="SELECT Codposto,Codpr,proiezione.Codsala,proiezione.IDcinema,Data_pr

                 FROM proiezione JOIN posto ON(proiezione.Codsala=posto.Codsala AND   proiezione.IDcinema=posto.IDcinema

                     WHERE Data_pr='$_POST[Data_pr]'";

         $ris=mysql_query($query,$conn);

         while($row=mysql_fetch_array($ris))

                         {    $prezzo=5.50;

                   $cliente=0;

                  $Codpren=0;

 $inserimento=mysql_query("INSERT INTO prenbiglietto(Codpren,Codposto,Codpr,Codsala,IDcinema,Datapren,Prezzo,Cliente)

             VALUES (\"$Codpren\",\"$row[Codpr]\",\"$row[Codsala]\",\"$row[IDcinema]\",\"$row[Data_pr]\",\"$prezzo\",\"$cliente\")");

              }?>

Il problema è che i i dati ottenuti con la select e quelli impostati,non vengono inseriti!Eppure credo che la sintassi dell'Insert sia giusta!Quindi non riesco a trovare il problema!

Aiutatemi se possibile  :'(  :'(

inviato 10 anni fa
flaky
X 0 X

prima di tutto prova la sintassi sql con mysql direttamente, così ti levi tutti i dubbi sulla sua sintassi... fammi sapere!!!

risposto 10 anni fa
ttan
ttan
1
X 0 X

Se faccio l'inserimento direttamente da mysql del tipo:

INSERT INTO prenbiglietto(Codpren,Codposto,Codpr,Codsala,IDcinema,Datapren,Prezzo,Cliente)

             VALUES (1,111,1112,100,NA,2006-03-27,5.50,1)

allora funziona,quindi la sintassi per l'inserimento è fatta bene.

risposto 10 anni fa
flaky
X 0 X

non ti da nessun errore? quando fai la query prova così:

<?php
$ris = mysql_query($query)or die(mysql_error();
?>

così, se non funziona, almeno vedi l'errore che ti da mysql...

risposto 10 anni fa
ttan
ttan
1
X 0 X

Me li calcola correttamente i risultati.

risposto 10 anni fa
flaky
X 0 X

stesso procedimento con $insermento allora..

risposto 10 anni fa
ttan
ttan
1
X 0 X

dopo la query di inserimento prova a mettere un controllo tipo:

if(!$inserimento) die (mysql_error());

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non ti da nessun errore? quando fai la query prova così:

<?php
$ris = mysql_query($query)or die(mysql_error();
?>

così, se non funziona, almeno vedi l'errore che ti da mysql...

ho scordato una parentesi alla fine!!! ops!!!  :uglystupid: :uglystupid:

<?php
$ris = mysql_query($query)or die(mysql_error());
?>
risposto 10 anni fa
ttan
ttan
1
X 0 X

Ciao Gianni.HO fatto il controllo dopo l'inserimento,che tu mi hai proposto e ho ottenuto come risposta questo:

Cannot add or update a child row: a foreign key constraint fails.

Insomma un vincolo di chiave esterna viene a mancare.

risposto 10 anni fa
flaky
X 0 X

DEVO INSERIRE alcuen righe di uan tabella in un'altra tabella creata.

AD esempio consideriamo una tabella composta da 10 righe.Io di questa tabella solo tre righe voglio inserire.

Per toccare le singole righe ho pensato di usare i cursori.

Quello che vi domando:in php possono essere utilizzati i cursori?Se si mi potete fare un esmepio epr

piacere ?

Nel caso di utilizzo dei cursori,i valori restituiti si ottengono sempre con mysql_fetch_array()?

Se non è possibile utilizzare i cursori,come è possibile toccare le singole righe di una tabella?

Arrivederci

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

flaky, devi rispettare le foreign key. Se non risolvi questo problema è inutile che vai avanti.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho capito come risolvere il problema dell'inserimento rispettando le foreign key,

Ora il problema è un altro che prima di fare l'inserimento,devo scorrere solo alcune righe di una tabella e inserire solo le righe selezionate in un'altra tabella!

Solo che non so bene come si utilizzano i cursori,e mi chiedevo se ci fosse un altro metodo!

risposto 10 anni fa
flaky
X 0 X

MySQL non ha i cursori!  :crazy:

Se devi fare una select e poi con i risultati che ottieni una insert allora ti basta una sola query:

INSERT INTO nome_tabella_1 (tab1_campo_1, tab1_campo_2, tab1_campo_3)
   SELECT tab2_campo_1, tab2_campo_2, tab2_campo_3 FROM nome_tabella_2 ...

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ma a me servono solo alcune righe della tabella,non tutte.La select  mi prende tutte le righe che soddisfano le condizioni  poste nella clausula WHERE e me le inserisce tutte.Mentre a me serve un sottogruppo di quest'ultime.

risposto 10 anni fa
flaky
X 0 X

Possibile che con la clausola WHERE o con la LIMIT non riesci a selezionare proprio quelle che vuoi? Come le selezioneresti in PHP?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

LIMIT non l'ho mai utilizzato,non so nemmeno  a cosa serve.

In php nn so come selezionarle,infatti lo ho chiesto prima io!

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

Qual'è la condizione che devono rispettare le righe della prima tabella per entrare nella seconda?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho selezionato tutte le righe che rispettano le seguenti condizioni:L'identificativo del cinema,l'orario e la data di proiezione e il film siano quelli scelti.Ad esmepio:

Select codposto

From posto JOIN proiezione ON(posto.IDcinema=proiezione.IDcinema AND posto.Codsala=proiezione.CODsala)

Where IDcinema='$_POST[IDcinema]' AND Titolo='$_POST[Film]' AND Data='$_POST[DATA]' AND Orario='$_POST[Orario]';

Con questa select selezioni tutte le righe che mi soddisfano i parametri della where.

Supponaimo che escono in tutto 10 righe.

Supponiamo che un cliente voglia prenotare 3 posti su 10.

Come faccio se non si possono utilizzare i cursori a considerare solo i primi 3 pasti su   10 presenti?

risposto 10 anni fa
flaky
modificato 10 anni fa
X 0 X

[tt]SELECT... FROM ... WHERE ... LIMIT 3[/tt]

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

AL POSTO DI:

SELECT... FROM ... WHERE ... LIMIT 3

è possibile scrivere

SELECT... FROM ... WHERE ... LIMIT '$_POST[numposti]',

visto che il numero di posti richiesti nn è fisso,cioè nn è detto che siano per forza 3,possono essere richiesti anche 2,5,10...

risposto 10 anni fa
flaky
X 0 X

Certo che è possibile, tanto a MySQL la query arriva comunque con il numero. E' PHP che provvede a sostituire la variabile con il numero che contiene.

Comunque nella query non sono necessari gli apici per i numeri.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ciao ragazzi...sto scrivendo vari codici in php e li provo in locale con easyphp: mi sono imbattuto in un problema davvero molto strano, e vengo a spiegarmi...

scrivo una tabella semplicissima con data(timestamp) titolo(varchar255) e news(longtext).

nella visualizzazione della tabella è tutto ok, ma nell'inserimento dei dati attraverso un altra pagina, succede una cosa stranissima...

se scrivo poco testo(tipo come titolo scrivo ciao e come news scrivo ciao ciao), va tranquillamente.

se provo ad incollare del testo molto lungo o lo provo a scrivere...non va! la pagina non inserisce il testo nella tabella!

ho provato a cambiare la tabelle da longtext a text...e all'inizio...cosa stranissima andava! per tre - quattro volte lo scrpit inseriva tutto correttamente, e poi è tornato a fare come prima...poco testo lo inserisce...molto no!

lo script che ho fatto è veramente semplicissimo! è ancora agli inizi! è questo:

include('../db.php');

$titolo=$_POST['titolo'];

$news=$_POST['news'];

$query="INSERT INTO news(titolo, news)VALUES('$titolo','$news')";

qualcuno sa dirmi a cosa sia dovuto il problema?

risposto 10 anni fa
micdech
X 0 X

Probabilemente è un problema di apici nella stringa $news che non vengono protetti con dei backslash.

Comunque lo scopri controllando l'esito della query:

$query = mysql_query($query) or die ("Errore: ".mysql_error());

Se si tratta proprio di apici basta modificare $news così:

$news = addslashes ($news);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

no...non ti capisco...dove pensi stia il problema?

e perchè il problema si verifica solo se scrivo grossi testi?

Grazie e complimenti per la velocità!! :-)

risposto 10 anni fa
micdech
X 0 X

Inizia col fare la query in questo modo:

mysql_query($query) or die (mysql_error());

e poi riporta l'errore che ottieni.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

...dove pensi stia il problema?

e perchè il problema si verifica solo se scrivo grossi testi?

Se inserisci un testo con dentro degli apici, esempio:

$news = "l'albero era tutto fiorito";

$titolo = "ciao";

quando vai a fare la query:

$query="INSERT INTO news(titolo, news)VALUES('$titolo','$news')";

=

INSERT INTO news(titolo, news)VALUES('ciao','l');

incontra l'apice e il resto della frase non te la inserisce, con la funzione che ti ha postato Gianni,

addslashes, mette lo slash davanti all'apice:

INSERT INTO news(titolo, news)VALUES('ciao','l\'albero era tutto fiorito');

ancora meglio di addslashes

http://it.php.net/manual/it/function.mysql-escape-string.php

non mi ricordo le differenze tra le due funzioni, ma quest'ultima è quella fatta apposta da utilizzare con le stringhe che andranno usate in mysql...

PS scusate l'intromissione

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

di nuovo ciao. :-)

un codice per la verifica dell'inserimento o dell'errore già lo avevo predisposto...in effetti tutta la pagina è questa:

<?php

include('../db.php');

$titolo=$_POST['titolo'];

$news=$_POST['news'];

$query="INSERT INTO news(titolo, news)VALUES('$titolo','$news')";

if (mysql_query($query, $db))

{

echo "Funge";

}

else {

echo "Non funge<br>";

die (mysql_error());

}

?>

ora l'errore che mi da mysql_error è :

Errore di sintassi nella query SQL vicino a 'importanza del voto','Nel giorno 4 aprile 2006 una parte della sede centrale è s' linea 1

dopo l'ultimo posto ho provato anche a mettere i backslashes e quindi ho scritto così: VALUES('\$titolo','\$news')";

in questo modo i dati nel db si scrivono...ma scrive $titolo nel campo titolo e $news nel campo news! :-)

E' strano che tre o quattro volto lo script ha inserito i dati! com'è possibile!!!!

risposto 10 anni fa
micdech
X 0 X

ora l'errore che mi da mysql_error è :

Errore di sintassi nella query SQL vicino a 'importanza del voto','Nel giorno 4 aprile 2006 una parte della sede centrale è s' linea 1

dopo l'ultimo posto ho provato anche a mettere i backslashes e quindi ho scritto così: VALUES('\$titolo','\$news')";

in questo modo i dati nel db si scrivono...ma scrive $titolo nel campo titolo e $news nel campo news! :-)

E' strano che tre o quattro volto lo script ha inserito i dati! com'è possibile!!!!

non devi mettere lo slash prima delle variabili, devi fare come ti ha detto Gianni:

$news = addslashes ($news);
$titolo = addslashes ($titolo);

prova...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

lore non so se ho capito bene cosa intendi...ma il fatto è che lo script nn inserisce proprio niente...neanche parte del testo fino all'apice...quindi non penso sia quello...

P.s. intromettiti...intromettiti...che qui servono tante menti!!! ;D

P.P.S. ragazzi siete velocissimi! complimenti! era da tanto che non incontravo un forum così vivo!

risposto 10 anni fa
micdech
X 0 X

Fai così:

$query="INSERT INTO news(titolo, news)VALUES('$titolo','$news')";

echo $query;

ti stamperà la query che cerchi di inserire, provala su phpmyadmin o il tool di gestione che usi tu e vedi che errore ti restituisce...

PS posta anche qui la stampa della query...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

se gli apici non sono corrttamente preceduti da un backslash la query non va in porto e non viene inserito NULLA!!!

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

già feci questa prova...stampa cmq i dati che ho messo...ma cmq mi dice che non li inserisce...nel caso specifico "Non funge".

 sto per impazzire! :uglystupid:

risposto 10 anni fa
micdech
X 0 X

VALUES(\'$titolo\',\'$news\')";

cioè così?

gianni ti prego postami un esempio di come devo scrivere! sto impazzendo! non riesco a capire perchè se scrivo ciao va e se scrivo la divina commedia no!

uff!  :'(

risposto 10 anni fa
micdech
X 0 X

$news = addslashes ($news);

$titolo = addslashes ($titolo);

VALUES('$titolo','$news')";

prova così...

risposto 10 anni fa
Lore
Lore
1
X 0 X

VALUES('\$titolo\',\'$news\')";

scritto così non mi inserisce i dati nella tabella neanche se scrivo ciao!

risposto 10 anni fa
micdech
X 0 X

le righe 3 e 4 sono queste:

$news = addslashes ($news);

$titolo = addslashes ($titolo);

il messaggio che mi da la pagina è questo:

Notice: Undefined variable: news in c:\programmi\easyphp1-8\www\micdech\admin\addnews.php on line 3

Notice: Undefined variable: titolo in c:\programmi\easyphp1-8\www\micdech\admin\addnews.php on line 4

però, caso strano...funge!!!!

mi ha scritto i dati!

risposto 10 anni fa
micdech
X 0 X

Prova così e dimmi se funziona o l'errore che ricevi.

<?php
include('../db.php');
$titolo=$_POST['titolo'];
$news=$_POST['news'];

if(!get_magic_quotes_gpc())
{
   $news = addslashes ($news);
   $titolo = addslashes ($titolo);
}

$query="INSERT INTO news (titolo, news) VALUES('$titolo','$news')";
if (mysql_query($query, $db))
{
   echo "Funge";
}
else
{
echo "Non funge<br>";
die (mysql_error());
}
?>
risposto 10 anni fa
Gianni Tomasicchio
X 0 X

le righe 3 e 4 sono queste:

$news = addslashes ($news);

$titolo = addslashes ($titolo);

il messaggio che mi da la pagina è questo:

Notice: Undefined variable: news in c:\programmi\easyphp1-8\www\micdech\admin\addnews.php on line 3

Notice: Undefined variable: titolo in c:\programmi\easyphp1-8\www\micdech\admin\addnews.php on line 4

però, caso strano...funge!!!!

mi ha scritto i dati!

per eliminare il notice:

$titolo = "";

$news = "";

$news = addslashes ($news);

$titolo = addslashes ($titolo);

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

lore, io ho provato a fare così:

$news = addslashes ('$news');

$titolo = addslashes ('$titolo');

quindi ho messo gli apici nelle parentesi...

Ora secondo te...è meglio come dici tu o come ho fatto io?

quali sono le differenze? io ho scritto solo una baggianata e il codice non ha dato errore per pura casualità...o è buono come script?

Grazie ancora ragà! sarò un assiduo frequentatore!

risposto 10 anni fa
micdech
modificato 10 anni fa
X 0 X

lore, io ho provato a fare così:

$news = addslashes ('$news');

$titolo = addslashes ('$titolo');

quindi ho messo gli apici nelle parentesi...

Ora secondo te...è meglio come dici tu o come ho fatto io?

quali sono le differenze? io ho scritto solo una baggianata e il codice non ha dato errore per pura casualità...o è buono come script?

Grazie ancora ragà! sarò un assiduo frequentatore!

Guarda lo script che ti ha postato Gianni...quello è corretto...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

siamo alle solite...

è tornato di nuovo a non inserire più i dati!

ho provato sia con il mio metodo che con il metodo che mi ha proposto lore! ma niente....in nessuno dei due modi...

A questo punto non so più che fare ne che pensare! Posso solo pensare che il mio modulo php sia posseduto!

risposto 10 anni fa
micdech
X 0 X

Hai provato con il codice che ti ha postato Gianni...

Prova con quello e vedrai che funziona...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

con il codice di gianni è andato...

però gianni una cortesia: vorrei essere spiegato la parte di codice che mi hai aggiunto!

è un mio pallino...non mi piace scrivere codice che non conosco...per una questione semplicemente di comprensione...

Grazie!

risposto 10 anni fa
micdech
modificato 10 anni fa
X 0 X

ok gianni....

con il manuale di php ho trovato la spiegazione di magic_quotes

è mitico!

penso che fra un pò vi verrò a rompere per farmi aiutare in una impaginazione molto particolare di alcuni dati!

risposto 10 anni fa
micdech
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda