Newsgroup: it.comp.www.php
Titolo: [OT] Aiuto MySQL

...mi arrendo...
Non so se sono OT, ma ho un problema che mi affligge... Probabilmente
sarà una cavolata, ma ho fuso il cervello e non riesco a capire dove sto
sbagliando.
Ho realizzato uno script semplicissimo:
<?php require_once('connect.php');
$colname_ulti = "1";
if (isset($HTTP_GET_VARS['ID'])) {
   $colname_ulti = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['ID'] :
addslashes($HTTP_GET_VARS['ID']);
}
mysql_select_db($database_connect, $connect);
$query_ulti = sprintf("SELECT * FROM tblnews WHERE ID = %s", $colname_ulti);
$ulti = mysql_query($query_ulti, $connect) or die(mysql_error());
$row_ulti = mysql_fetch_assoc($ulti);
$totalRows_ulti = mysql_num_rows($ulti);
$colname_dl = $row_ulti['ID'];
if (isset($HTTP_GET_VARS[$row_ulti['ID']])) {
   $colname_dl = (get_magic_quotes_gpc()) ?
$HTTP_GET_VARS[$row_ulti['ID']] :
addslashes($HTTP_GET_VARS[$row_ulti['ID']]);
}
mysql_select_db($database_connect, $connect);
$query_dl = "SELECT * FROM tbldl WHERE NEWS_ID = $colname_dl";
$dl = mysql_query($query_dl, $connect) or die(mysql_error());
$row_dl = mysql_fetch_assoc($dl);
$totalRows_dl = mysql_num_rows($dl);
?>
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<div align="center"> <a href="delete_dl_edit_news.php?ID=<?php echo
$row_dl['ID']; ?>"><?php echo $row_dl['DOWNLOAD']; ?></a></div>
</body>
</html>
<?php
mysql_free_result($ulti);
mysql_free_result($dl);
?>
ma mi da il seguente errore:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '' at line 1
Ho controllato e ricontrollato cento volte tutto, ma non riesco a
trovare il problema...
Ringrazio in anticipo tutti coloro che vorranno aiutarmi.

 
Tanto per cominciare, visto che siamo quasi alla versione 6 e 
ringraziando il Signore hanno deciso (era l'ora) di terminare lo 
sviluppo della versione 4, è cosa buona e giusta scrivere script 
utilizzando un codice "migliore": via quel $HTTP_GET_VARS, 
$HTTP_POST_VARS e passa ai superglobal $_GET e $_POST.
Poi non utilizzare *mai* i dati ricevuti da GET/POST in istruzioni sql 
senza prima aver bonificato e validato gli stessi: basta passare come 
parametro la stringa 1 or 1=1 e se quel "delete_dl_edit_news" fa quel 
che dice il nome dello script (ovvero delete) ti troverai con una bella 
tabella vuota!
Apporta tutte queste modifiche, riposta il codice e poi si corregge 
l'errore sql...è una fortuna che la query fallisca :-)
Un' ultima cosa, dovremo avere la palla ci vetro per capire se l'errore 
SQL è relativo alla prima o alla seconda query e, per togliere il vin 
dai fiaschi, prima di eseguire mysql_query(...) fai un echo della 
stringa sql ch vuoi eseguire.
Ah, dimenticavo puoi omettere, mysql_free_result non serve a niente 
visto che lo esegui come ultima istruzione dello script (al termine 
dello script tutto lo spazio allocato viene liberato) e puoi omettere 
anche il resource della connessione nelle istruzioni di query, visto che 
la connessione è sempre la stessa.
	Francesco

 l'errore sql...è una fortuna che la query fallisca :-)
Prima di tutto grazie per avermi risposto.
A causa dei molteplici ambienti dove mi trovo a lavorare (mai aggiornati 
all'ultima versione di niente), mi trovo, mio malgrado, a sviluppare 
ancora con vecchie versioni di MySQL e PHP...
Ma non mi sono abbattuto, ho aggiornato il mio sistema in locale e 
provato come tu mi hai detto ($_GET), vorrei giusto farti notare che nel 
valore:
$colname_ulti = "1";
il parametro 1 è un valore predefinito e comunque subito dopo segue:
$colname_ulti = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['ID'] : 
addslashes($HTTP_GET_VARS['ID']);
dove cerco di eseguire i controlli più elementari sulla variabile.
Comunque, inseriti i giusti superglobal al posto del vecchio codice il 
problema resta...
Credo che il vero problema stia in qualche apice o accento di troppo...

 addslashes($HTTP_GET_VARS['ID']);
Se posso permettermi un altro suggerimento: non fare il check per 
magic_quotes, ma piuttosto disattivale del tutto (se puoi).
Se sono attive usa remove_slashes() per togliere la fuffa che mettono.
Se non sono attive non usare addslashes(), ma usa la funzione apposita al 
momento giusto per fare l'escape (tipo mysql_real_escape_string(), 
urlencode(), ecc.).
Bye.

Alessandro Pellizzari ha scritto:

Grazie per i consigli, ma non credo che il problema reale risieda qui, 
ho sviluppato tutte le pagine allo stesso modo e questa è l'unica che mi 
da l'errore...
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '' at line 1
Ripropongo il codice originale, chissà che qualcuno riesca a vederci 
questo benedetto errore di sintassi (non badate alla forma):
<?php require_once('connect.php');
$colname_ulti = "1";
if (isset($HTTP_GET_VARS['ID'])) {
   $colname_ulti = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['ID'] :
addslashes($HTTP_GET_VARS['ID']);
}




<?php
mysql_free_result($ulti);
mysql_free_result($dl);
?>
Grazie ancora a tutti per i consigli, mi saranno senza dubbio utili in 
futuro.

 Credo che il vero problema stia in qualche apice o accento di troppo...
Difatti non mi sembrava di aver detto che l'errore si annidasse nell'uso 
di HTTP_POST_VARS etc...
Ti avevo suggerito ti fare, prima di ogni mysql_query, un print della 
stringa sql per verificare insieme la sintassi.
	Francesco