Newsgroup: it.comp.www.php
Titolo: Scusate ma... passare un id usando un url?

Scusate... il terzo messaggio in tre giorni sempre sullo stesso scritp 
-_-;;;
Cmq... Tramite la pagina di inserimento titoli creo un link a una pagina 
di modifica dei titoli stessi, usando il campo id.
Da ins.php clicco su un url simile a questa: 
http://www.sito.it/mod.php?tit=3
e arrivo a mod.php, che e' fatta cosi':
<?php
require('db.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
function mod_titoli() {
    connect();
    $tit=$_GET['tit'];
    $sql = mysql_query('select * from homepage where id = "$tit"');
    if (!$sql) {
    die(mysql_error());
    }
while ( $row = mysql_fetch_array($sql) ) {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Titolo:<br>
<input name="titolo" type="text" size="20" value="<?php 
echo$row["titolo"]?>"><br>
<br>
Indirizzo:<br>
<input name="url" type="text" size="20" value="<?php echo$row["url"]?>"><br>
<br>
Immagine:<br>
/home/www/html/images/<input name="img" type="text" size="20" 
value="<?php echo$row["img"]?>"><br>
<br>
Gruppo:<br>
<select name="cate">
<option value="opzione">opzione</option>
</select><br>
<input type="submit" name="submit" value="SUBMIT" />
</form>
<?php
}
}
if($_GET == "tit"):
	mod_titoli();	
endif;	
?>
</body>
</html>
Ecco... pero' la pagina e' vuota. Se elimino il where id = allora 
compaiono tanti form quanti sono i dati della tabella... :/ Quindi lo 
script funziona in qualche modo, solo non riesco a pescare l'id.
Una mano, per favore?
Grazie in anticipo,
~Neko

 $sql = mysql_query('select * from homepage where id = "$tit"');
Questa e' corretta:
$sql = mysql_query("select * from homepage where id = '$tit'"); 
io preferisco di gran lunga questa:
$sql = mysql_query ("SELECT * FROM homepage WHERE id = " . $tit); 
e comunque sarebbe meglio:
if (!isset ($_GET['tit'])) { $_GET['tit'] = -1; }
$tit = mysql_escape_string ($_GET['tit']);
Saluti.
-- 
I'am what I'am, I do what I can

 1^ Imposta l'error_reporting ad ALL
Funziona, grazie tante!!! ^_^
Ora ho un dubbio: ho inviato i dati e ricevuto il messaggio di conferma. 
Dando una occhiata nella tabella, pero', i dati sono quelli di prima... 
sembra che lo script abbia ignorato i dati modificati, "ricordando" solo 
quelli scritti con le echo. E' possibile?
~Neko

 "ricordando" solo quelli scritti con le echo. E' possibile?
Scusa, ma dove' che dovrebbe modificare i dati? Nel tuo script non ho
trovato nessuna query di UPDATE.


 trovato nessuna query di UPDATE.
Si', scusa: dopo aver aggiunto il tuo codice corretto sono andato avanti 
collo scriptino. Ora e' cosi':
<?php
require('db.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
function mod_titoli() {
    connect();
    if (!isset ($_GET['tit'])) { $_GET['tit'] = -1; }
    $tit = mysql_escape_string ($_GET['tit']);
    $sql = mysql_query ("SELECT * FROM homepage WHERE id = " . $tit);
    if (!$sql) {
    die(mysql_error());
    }
while ( $row = mysql_fetch_array($sql) ) {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Titolo:<br>
<input name="titolo" type="text" size="20" value="<?php 
echo$row["titolo"]?>"><br>
<br>
Indirizzo:<br>
<input name="url" type="text" size="20" value="<?php echo$row["url"]?>"><br>
<br>
Immagine:<br>
/home/www/html/images/<input name="img" type="text" size="20" 
value="<?php echo$row["img"]?>"><br>
<br>
Gruppo:<br>
<select name="cate">
<option value="opzione">opzione</option>
</select><br>
<input type="submit" name="submit" value="SUBMIT" />
</form>
<?php
}
}
function scrivi_mod($titolo, $url, $img, $cate) {
	connect();
		 $sql = 'UPDATE `homepage` SET `titolo` = \'$titolo\','
         . ' `url` = \'$url\','
         . ' `img` = \'$img\','
         . ' `cate` = \'$cate\' WHERE `id` = \'$tit\' LIMIT 1 '
         . ' ';
		mysql_query($sql)
		or die(mysql_error());
?>
Titolo inserito correttamente.
<?php				
}
if(isset($submit)):
	scrivi_mod($titolo, $url, $img, $cate);
elseif($tit == "$tit"):


 avanti collo scriptino. Ora e' cosi':
Hai dimenticato di passare $tit alla funzione scrivi_mod o, in
alternativo (lo sconsiglio) devi definirla come global all'interno
della funzione stessa.
Inoltre non utilizzare il costrutto if (cond): elseif (cond): endif;
function scrivi_mod($tit, $titolo, $url, $img, $cate) {
 	connect();
 		 $sql = 'UPDATE `homepage` SET `titolo` = \'$titolo\','
 . ' `url` = \'$url\','
 . ' `img` = \'$img\','
 . ' `cate` = \'$cate\' WHERE `id` = \'$tit\' LIMIT 1 '
 . ' ';
 		mysql_query($sql)
 		or die(mysql_error());
 ?>
 Titolo inserito correttamente.
 <?php				
}
Comunque preferisco:
$sql = "UPDATE homepage SET titolo = '" . $titolo . "', " .
	 "url = '" . $url . "', " .
	 "img = '" . $img . "', " .
	 "cate = '" . $cate . "' " .
	 "WHERE id = " . $tit . " LIMIT 1";
E' piu' leggibile.



fa la stessa cosa di addslakes ?


 fa la stessa cosa di addslakes ?
Tieni presente che se la direttiva magic_quotes_gpc e' ad on l'escaping
viene fatto da PHP prima di passare i parametri allo script.
Alla fin dei conti fanno la stessa cosa, comunque sarebbe sempre meglio
utilizzare mysql_real_escape_string () che fa un check anche sul set
dei caratteri utilizati da Mysql, in questo modo lo script diventa
molto piu' portabile.


 Inoltre non utilizzare il costrutto if (cond): elseif (cond): endif;
Perche' no? Credevo fosse l'unico modo per chiamare le funzioni... ;_;
Grazie per l'aiuto,
~Neko

 ($_GET['tit']); ?
Ho risolto aggiungendo un campo hidden che ha come valore il "tit". La 
funzione d'inserimento non sapeva cosa fosse "tit". Chissa' che ne e' 
dei dati in questo caso? O_O;;;
E' meglio se rileggo il manuale.
Grazie per l'aiuto comunque,
~Neko