Pagina 1 di 2

problema con php

Inviato: lun 11 lug 2005, 15:10
da Bart
Ciao a tutti,
stavo cercando di fare una sezione per le news per il mio sito e ho dei problemi con il seguente codice in php. In questa pagina dovrebbe inserirmi nel database il testo di una form.

Codice: Seleziona tutto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;
  charset=iso-8859-1">
  <link rel=stylesheet href="style.css" type="text/css">
  <TITLE>...sezione news...</TITLE>
 </head>
 <body>
   <table align="center" width="750" bgcolor="White" border="1" cellspacing="0" cellpadding="0"><tr><TD>
   <form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" >
   <label>Inserisci la notizia: <br/>
   <textarea name="newstext" rows="20" cols="65" ></textarea>
   </label>
   <input type="submit" value="invia" />
   </form>
  <?php
   if (isset($_POST['newstext'])) {
      //Mi connetto al database
      $dbconn = @mysql_connect('localhost','root','miapassword');
      if (!dbconn) {
      echo '<p>Unable to connect to the database server at this time.</p>');
      exit();
      }
      //Seleziono il database con cui lavorare
      mysql_select_db('news',$dbconn);
      if (!@mysql_select_db('news')) {
      exit('<p>Unable to locate the news database at this time.<p>');
      }
   $newstext = $_POST['newstext'];
   $query = "Insert into table_news set testo = '$newstext', data = CURDATE()";
   if (@mysql_query($query)) {
      echo '<p> Your news has been added. </p>';
   }else {
      echo '<p> Error adding submitted news: ' . mysql_error() . '</p>';
   }
      
   }
   
  ?></TD></tr></table>
 </body>
</html>
Il file l'ho chiamato news.php ma quando vado in http://localhost/news.php vedo una pagina completamente bianca.
Ovviamente php e mysql girano correttamente sulla macchina e apache è avviato. Il database news e la tabella table_news sono state create. Dove sbaglio? Non mi sembra ci siano errori nel codice. Ciao.

Inviato: lun 11 lug 2005, 15:37
da Firetux
hai provato a togliere il simbolo @ davanti alle chiamate? ...magari hai errori e non te ne accorgi

Inviato: lun 11 lug 2005, 16:01
da Bart
Firetux ha scritto:hai provato a togliere il simbolo @ davanti alle chiamate? ...magari hai errori e non te ne accorgi
si ho provato anche senza @, ma quando carico la pagina questa rimane bianca. Non capisco perchè...

Inviato: lun 11 lug 2005, 16:27
da useless
forse hai configurato php (come è di default!) in modo che nasconda gli errori? cerca error_reporting in /etc/apache/php.ini e guarda se è impostato su E_ALL, in caso contrario impostalo così. poi restarta apache.

Inviato: lun 11 lug 2005, 16:37
da Bart
Queste sono le impostazioni di /etc/apache/php.ini

register_globals = Off
display_errors = Off
log_errors = On
output_buffering = 4096
register_argc_argv = Off
magic_quotes_gpc = Off
variables_order = "GPCS"
error_reporting = E_ALL
allow_call_time_pass_reference = Off

Forse devo mettere display_errors = On???
Io non ho mai toccato nulla nella configurazione di php.
Ciao e grazie. :wink:

Inviato: lun 11 lug 2005, 17:02
da useless
eggià :P.

Inviato: lun 11 lug 2005, 19:58
da Bart
Il problema era proprio quello. Una volta abilitato (display_errors = On) mi è apparso un errore relativo ad una ')' alla riga 22. Eliminata la parentesi ha funzionato.
Grazie a tutti per l'aiuto.

Inviato: mar 12 lug 2005, 15:24
da Bart
Un'ultima cosa:
Notice: Use of undefined constant dbconn - assumed 'dbconn' in /var/www/htdocs/news.php on line 21
Ricevo questa notizia al momento dell'inserimento. C'è un modo per disabilitarla?
Il codice funziona, inserisce il testo ma mi dice che dbconn non è stata definita.

Inviato: mar 12 lug 2005, 15:33
da Bart
Mi rispondo da solo.
Basta sostituire E_ALL con E_ALL ~E_NOTICE in /etc/apache/php.ini
che praticamente ti fa vedere tutti gli errori tranne i warning.
Ciao.

Inviato: mar 12 lug 2005, 17:36
da useless
credo che dipenda dal fatto che scrivi:
$array[dbconn]
mentre la sintassi php richeide:
$array['dbconn']

Inviato: mar 12 lug 2005, 21:27
da Bart
useless ha scritto:credo che dipenda dal fatto che scrivi:
$array[dbconn]
mentre la sintassi php richeide:
$array['dbconn']
dove? dimmi la riga altrimenti mi ci perdo.
comunque ho un altro GROSSO problema.
Ho modificato il codice così:

Codice: Seleziona tutto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;
  charset=iso-8859-1">
  <link rel=stylesheet href="style.css" type="text/css">
  <TITLE>...sezione news...</TITLE>
 </head>
 <body>
   <table align="center" width="750" bgcolor="#EEF6FF" border="1" cellspacing="0" cellpadding="0"><tr><TD>
   <form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" >
   <label>Testo della notizia: <br/>
   <textarea name="newstitle" rows="1" cols="90%" ></textarea><br/>
   <label>Corpo della notizia: <br/>
   <textarea name="newstext" rows="20" cols="90%" ></textarea>
   </label>
   <input type="submit" value="invia" />
   </form>
   <?php
   if (isset($_POST['newstext'])) {
   	//Mi connetto al database
   	$dbconn = @mysql_connect('localhost','root','miapassword'); 
   	if (!dbconn) {
		echo '<p>Unable to connect to the database server at this time.</p>';
		exit();
   	}
   	//Seleziono il database con cui lavorare
   	mysql_select_db('news',$dbconn);
   	if (!@mysql_select_db('news')) { 
		exit('<p>Unable to locate the news database at this time.<p>');
   	}
	$newstitle = $_POST['newstitle'];
	$newstext = $_POST['newstext'];
	$query = "Insert into table_news set titolo = '$newstitle', testo = '$newstext', data = CURDATE()";
	if (@mysql_query($query)) { 
		echo '<p> Your news has been added. </p>';
	}else {
		echo '<p> Error adding submitted news: ' . mysql_error() . '</p>';
	}
		
   }
   ?>
   </TD></tr></table>
 </body>
</html>
in modo che la notizia abbia anche un titolo ma succede una cosa strana.
Se inserisco una notizia corta la inserisce (quindi funziona) mentre se scrivo molte righe mi da un errore relativo all'istruzione sql.
Io ho creato la tabella "table_news" nel mio database così:

Codice: Seleziona tutto

create table table_news (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
titolo TEXT,
testo TEXT,
data DATE NOT NULL);
Dove sbaglio? Grazie per l'aiuto.

Inviato: mar 12 lug 2005, 22:01
da useless
ah no, l'errore è un altro:
$dbconn = @mysql_connect('localhost','root','miapassword');
if (!dbconn) {
echo '<p>Unable to connect to the database server at this time.</p>';
exit();
}
nella riga dell'if (la 21, come diceva lui), ci arrivi da solo? :)

quanto alla notizia: + che lunga o corta può essere che in quelle lunghe metti x caso degli apostrofi (') che andrebbero escapati?

Inviato: mer 13 lug 2005, 0:40
da Bart
useless ha scritto:ah no, l'errore è un altro:
$dbconn = @mysql_connect('localhost','root','miapassword');
if (!dbconn) {
echo '<p>Unable to connect to the database server at this time.</p>';
exit();
}
nella riga dell'if (la 21, come diceva lui), ci arrivi da solo?
Magari se mettessi un "$" in modo dale che diventi:

Codice: Seleziona tutto

if (!$dbconn) 
:D
quanto alla notizia: + che lunga o corta può essere che in quelle lunghe metti x caso degli apostrofi (') che andrebbero escapati?
Probabile. Domani (adesso è tardissimo) provo e magari ti faccio sapere. Ma tra i caratteri da evitare ci sono solo gli '. Perchè vanno evitati?
Grazie mille per i suggerimenti! :wink:

Inviato: mer 13 lug 2005, 1:39
da useless
xké delimitano le stringhe in sql.

Inviato: mer 13 lug 2005, 10:32
da Bart
Il problema era proprio quello! Ho risolto mettendoli doppi. Grazie ancora. :wink: