problema con php

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

problema con php

Messaggio 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.

Avatar utente
Firetux
Linux 4.x
Linux 4.x
Messaggi: 1465
Iscritto il: gio 10 giu 2004, 0:00
Località: Lecco
Contatta:

Messaggio da Firetux »

hai provato a togliere il simbolo @ davanti alle chiamate? ...magari hai errori e non te ne accorgi

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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è...

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio 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.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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:

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

eggià :P.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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.

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

credo che dipenda dal fatto che scrivi:
$array[dbconn]
mentre la sintassi php richeide:
$array['dbconn']

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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.

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio 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?

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio 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:

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

xké delimitano le stringhe in sql.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio da Bart »

Il problema era proprio quello! Ho risolto mettendoli doppi. Grazie ancora. :wink:

Rispondi