Newsgroup: it.comp.www.php
Titolo: trasferimento campi in db

Lo script sotto riportato provvede a trasferire dei campi di una 
tabella su un' altra tabella, ma sembra non funzionare mi da ( Erorre 
durante l'inserimento ) per ogni campo e non riesco a capire il motivo:
 
<?
include("area_riservata.php"); 
include("config.inc.php");
for ($rec = 34000; $rec <=34471; $rec++) { 
 
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file 
config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri 
nel file config.inc.php");
$query = "SELECT id,zona,testoannuncio,cognome,data,titolo,email  FROM 
lavqual3 WHERE id = $rec AND tipo = 'offerta' AND bollettino 
= 'ATTIVATO' ";
$result = mysql_query($query, $db);
$row = mysql_fetch_array($result);
 
$cognome = $row[cognome];
$email = $row[email];
$titolo = $row[titolo];
$titolo2 = $row[titolo];
$zona = $row[zona];
$data = $row[data];
$testoannuncio = $row[testoannuncio];
mysql_close($db);
 
print $cognome;
print "<BR>";
print "<BR>";
print $email;
print "<BR>";
print "<BR>";
print $titolo;
print "<BR>";
print "<BR>";
print $titolo2;
print "<BR>";
print "<BR>";
print $zona;
print "<BR>";
print "<BR>";
print $data;
print "<BR>";
print "<BR>";
print $testoannuncio;
print "<BR>";
print "<BR>";
 
# INSERIMENTO NUOVO RECORD #####################################
###############################################################
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file 
config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri 
nel file config.inc.php");
 
$query = "INSERT INTO prova (cognome , email , testoannuncio , 
titolo , titolo2 , data , zona  VALUES 
('$cognome', '$email', '$testoannuncio', '$titolo', '$titolo2', '$data'
, '$zona')";
if (mysql_query($query, $db))
echo "COMPILAZIONE CORRETTA.\n\n<br>";
else
echo "Erorre durante l'inserimento";
mysql_close($db);
print "<BR>";
print "<BR>";
}
 
?>
 


1) perché usi mysql_connect che è una shortcut per richiamare Baal 
Chtulhu e i 4 cavalieri dell'apocalisse?
Quel codice è ributtante e molto rischioso
Usa almeno PDO
2) Perché istanzi due volte lo stesso db? non chiuderlo dopo la prima 
query e riutilizzalo
3) se non ti fai dare l'errore che MySql riporta non saprai mai perché 
non va
4) se non chiudi la parentesi prima di values sicuramente non funziona
 
 
-- 
I fatti mi cosano

 4) se non chiudi la parentesi prima di values sicuramente non funziona
 
ma soprattutto:
 
5) perche' non fai fare tutto al db?
 
Ciao.
 
 
-- 
Pubblicita' regresso: 
http://www.ferrero.org
 
** Per scrivermi in mail, sostituire nutella con ferrero...
** To contact me by email, change nutella to ferrero...


Intendi mettendo
INSERT INTO table (val, val ,val .... ) ?
Secondo me quello è l'unico punto che fa meno rabbrividire
All'inizio della mia carriera facevo anch'io
SELECT *
poi ho capito che specie con l'sql è meglio essere pedanti


 
 
 
ho risolto il problema chiudendo la parentesi , solo che adesso mi dà 
errore durante 
l'inserimento quando il campo testoannuncio contiene l'apostrofo (  '  )
 


Appunto per questo ti parlavo di PDO
 
Col codice qui sotto puoi inserire qualsiasi cosa tu voglia, senza 
diventare matto con l'escaping
http://www.php.net/manual/en/pdo.prepared-statements.php
 
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, 
:value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
 
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
 
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>


 
 
Credo di studiare meglio il PDO
solo che adesso mi puoi consigliare come risolvere facilmente il problema 
dell'escaping nello script che ho postato ?
 


Fare l'escape di qualsiasi cosa tu possa avere come argomento richiede 
molto più tempo che usare PDO
Inoltre dato che non sembri molto esperto nel campo vedrai che finisci 
con i valori salvati pieni di "\" se te lo fai a mano, fidati
 
Non è che devi fare poi chissà che per trasformare il tuo codice e usare PDO
praticamente dove istanzi il $db istanzi PDO. Fatto quello crei un 
prepared statement al quale passi come argomenti i valori
È esattamente il codice che ti ho mostrato
 
Ti manca solo come istanziare PDO, poi funziona in modo molto simile
http://www.php.net/manual/en/pdo.connections.php
 
