Apici... dov'è l'errore??

Salve a tutti ragazzi...

mi trovo di fronte ad un problema forse banale per Voi, ma esasperante per me!  :buck:

Tutto funziona correttamente, tranne una cosa... il server non riconosce il simbolo "apice" (" ' "), lo vede come un errore...

In quale parte devo modificare il codice di seguito riportato?

Grazie mille per ogni risposta!!

Luca   :)

inviato 9 anni fa
Luca
Luca
1
X 0 X

...ooopsss...

mi sono scordato di postare il codice, sorry!!

<?php
if($_POST) {
   inserisci_record();
}
else {
   mostra_form();
}

function inserisci_record()
{
   // richiamo il file di configurazione
   require 'config.php';

   // richiamo lo script responsabile della connessione a MySQL
   require 'connect.php';

   // recupero i campi di tipo "stringa"
   $data      = trim($_POST['data']);
   $titolo     = trim($_POST['titolo']);
   $testo = trim($_POST['testo']);

   // verifico se devo eliminare gli slash inseriti automaticamente da PHP
   if(get_magic_quotes_gpc())
   {
      $data     = stripslashes($data);
      $titolo     = stripslashes($titolo);

      
   }

   $data      = mysql_real_escape_string($data);
   $titolo     = mysql_real_escape_string($titolo);
   $testo = str_replace(array("\r\n", "\r"), "\n", $testo);




   // verifico la presenza dei campi obbligatori
   if(!$data)
   {
      $messaggio = urlencode("Non hai inserito la data");
      header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
      exit;
   }

   if(!$titolo)
   {
      $messaggio = urlencode("Non hai inserito il titolo");
      header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
      exit;
   }
   
   if(!$testo)
   {
      $messaggio = urlencode("Non hai inserito il testo");
      header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
      exit;
   }

   // preparo la query
   $query = "INSERT INTO news (data,titolo,testo)
           VALUES ('$data','$titolo','$testo')";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
      die("Errore nella query $query: " . mysql_error());
   }

   // recupero l'id autoincrement generato da MySQL per il nuovorecord inserito
   $id_inserito = mysql_insert_id();

   // chiudo la connessione a MySQL
   mysql_close();

   $messaggio = urlencode("Inserimento effettuato con successo (ID=$id_inserito)");
   header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}

function mostra_form()
{
   // mostro un eventuale messaggio
   if(isset($_GET['msg']))
      echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
   ?>
   <form name="form_inserimento" method="post" action="">
     <label>Data:
     <input name="data" type="text" maxlength="10" />
     </label>
     
     <p>
       <label>Titolo:
       <input name="titolo" type="text" maxlength="34" />
       </label>
     </p>

     <p>
       <label>Testo:<br />
       <textarea name="testo" cols="40" rows="20"></textarea>
       </label>
     </p>
     <p>
       <input name="invia" type="submit" value="Invia" />
     </p>
   </form>
   <br><br>
   <a href="delete2.php">cancella news</a> <a href="update.php">Aggiorna news</a>
   <?php
}
?>

Ciao!!!

 :)

risposto 9 anni fa
Luca
Luca
1
X 0 X

La sintassi del codice che hai riportato è corretta. Non è chiaro però il problema degli apici. Cosa non funziona? Che errore ricevi?

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni... grazie della risposta!

L'errore sta nel fatto che nel momento in cui inserisco una parola apostrofata nel form, tipo "L'aurora", mi appare un messaggio d'errore con scritto "Errore vicino a " 'aurora" (detto a parole mie s'intende), e non mi permette quindi di inviare la mia Query!

Grazie..

risposto 9 anni fa
Luca
Luca
1
X 0 X

cambia il codice in questo modo (e cerca di capire perché va fatto!!!)

// recupero i campi di tipo "stringa"
$data = trim($_POST['data']);
$titolo = trim($_POST['titolo']);
$testo = trim($_POST['testo']);

// verifico se devo eliminare gli slash inseriti automaticamente da PHP
if(get_magic_quotes_gpc())
{
   $data  = stripslashes($data);
   $titolo = stripslashes($titolo);
   $testo = stripslashes($testo);
}

$data = mysql_real_escape_string($data);
$titolo = mysql_real_escape_string($titolo);
$testo = mysql_real_escape_string($testo);

$testo = str_replace(array("\r\n", "\r"), "\n", $testo);

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni!!

Mentre attendevo la Reply... Ho risolto anche in questo modo:

   if (!get_magic_quotes_gpc()) {
      $data = addslashes($_POST['data']);
      $titolo = addslashes($_POST['titolo']); 
      $testo = addslashes($_POST['testo']); 
} 

else {
   $data      = trim($_POST['data']);
   $titolo     = trim($_POST['titolo']);
   $testo = trim($_POST['testo']);
}


   $data      = mysql_real_escape_string($data);
   $titolo     = mysql_real_escape_string($titolo);
   $testo = str_replace(array("\r\n", "\r"), "\n", $testo);

Pensi sia corretto?!

Grazie e Buon 2007...in ritardo!

Luca   :)

risposto 9 anni fa
Luca
Luca
1
X 0 X

No, è sbagliato! Quel codice inserisce 2 volte i backslash. La procedura corretta è:

1) togliere i backslash inseriti (eventualmente) da PHP con l'istruzione stripslashes()

2) inserire OPPORTUNAMENTE i backslash con la funzione mysql_real_escape_string()

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda