Problemi con un delle checkbox multiple...

Bene ragazzi sono tornato con un nuovo dubbio!

Sono sempre preso dallo studio di questo libro che mi aiuta a creare un CMS per gestire delle barzellette.

Sono arrivato alla pagina multiscopo che mi permette di inserire una nuova barzelletta nel database, tutto funziona correttamente tranne l'inserimento delle categorie nel database, o meglio le categorie a cui le barzellette fanno parte...

Ecco il codice:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Aggiungi una barzelletta</title>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>Aggiungi una Barzelletta!!!</h1>
<?php
   //Richiamo lo script di connessione 
   require("connect.php");
   
   //Una nuova barzelletta e' stata inviata utilizzando il form
   if(isset($_POST['joketext'])):
      //L'id dell'autore
      $aid = $_POST['aid'];
      $joketext = $_POST['joketext'];
      
         //Controllo che l'id dell'autore abbia un valore
         if($aid == '')
            die("Devi scegliere un'autore della barzelletta, torna indietro e ritenta");
         
         $query = "INSERT INTO joke SET 
               joketext = '$joketext',
               jokedate = CURDATE(),
               authorid = '$aid'";
         if(@mysql_query($query))
         {
            echo("<p>Nuova barzelletta aggiunta!</p>");
         }
         else
         {
            die("<p>Errore aggiungendo la barzelletta: ".mysql_error()."</p>");
         }
   /*
   Metto in una variabile il valore della barzelletta appena aggiunta, per un utilizzo nel 
   futuro prossimo, con l'utilizzo della funzione mysql_insert_id() che ha come risultato il 
   numero assegnato all'ultimo record inserito dalla caratteristica AUTO_INCREMENT in MySQL
   */
   $jid = mysql_insert_id($link);
   
   //Conto il numero delle categorie
   $numCats = 0;
   foreach($cats as $catID)
   {
      $query = "INSERT IGNORE INTO jokecategory SET jokeid='$jid', categoryid='$catID'";
      $ok = @mysql_query($query);
      if($ok)
      {
         $numCats = $numCats + 1;
      }
      else
      {
         echo("<p>Errore inserendo la barzelletta nella categoria $catID: ".mysql_error());
      }
   }
?>
<p>Barzelletta aggiunta in <?php echo $numCats . $catID; ?> categorie.</p>
<p><a href="<?php echo $_SERVER['PHP_SELF']; ?>">Aggiungi un'altra barzelletta</a></p>
<p><a href="jokes.php">Ritorna alla ricerca delle barzellette</a></p>

<?php
   else: //Permetto all'utente di inviare una nuova barzelletta
   
      $authors = @mysql_query('SELECT id, name FROM author');
      if(!$authors)
      {
         die("Non posso ritirare la lista degli autori.");
      }
      
      $cats = @mysql_query('SELECT id, name FROM category');
      if(!$cats)
      {
         die("Non posso ritirare la lista delle categorie".mysql_error());
      }
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <p>Inserisci la nuova barzelletta:<br />
   <textarea cols="45" rows="5" name="joketext"></textarea>
   </p>
   <p>Autore:
      <select name="aid" size="1">
         <option selected value="">Select One</option>
         <option value="">-------</option>
      <?php
         while($author = mysql_fetch_array($authors))
         {
            $aid = $author['id'];
            $aname = htmlspecialchars($author['name']);
            echo "<option value=\"$aid\">$aname</option>";
         }
      ?>
      </select>
   </p>
   <p>Posiziona nelle categorie:<br />
      <?php
         while($cat = mysql_fetch_array($cats))
         {
            $cid = $cat['id'];
            $cname = htmlspecialchars($cat['name']);
            echo "<label><input type=\"checkbox\" name=\"cats[]\" value=\"$cid\" />$cname</label><br />\n";
         }
      ?>
   </p>
   <input type="submit" value="Invia" />
</form>
<?php endif; ?>
</body>
</html>

Come suggerito dal libro utilizzo la funzione:

mysql_insert_id()

per ricevere il valore id dell'ultimo valore inserito nel database, o per essere piu' precisi dell'ultimo valore inserito che contiene il campo AUTO_INCREMENT.

Per far si che tutto funzioni ho anche aggiunto la variabile $link che e' l'id di sessione della connessione al database presente nello script connect.php, che in teoria lo dovrebbe passare alla pagina...

Premetto anche che l'aggiunta della variabile $link e' stata una prova successiva, visto che nel libro le parentesi rimanevano vuote...

Grazie a tutti in anticipo per le risposte!

inviato 9 anni fa
Pr0v4
X 0 X

ricevi qualche messaggio di errore o qualche indizio su dove possa essere il problema?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

E' proprio questo il problema!

Tutto funziona correttamente, anche la sezione dei link che mi deve aggiungere me li aggiunge tranquillamente!

E come detto in altri post, visto che il libro e' sempre lo stesso, le pagine multiuso le uso con i : e endif; e la cosa non ha mai creato alcun problema.

Certoooo, ma il problema nn sta nel fatto che $cats e' stato dichiarato nel blocco piu' in basso, quello che parte soltanto se if e' false, e quindi non viene inizializzata come array per tutte le categorie ma come una variabile vuota; e visto che il foreach non fa neanche un ciclo... rimane sempre a zero come impostato $numCats...

Pero' ho fatto questa prova e mi ritorna una cosa strana... non mi conta per niente quante categorie ho aggiornato...

Mi sa che devo capire meglio come fare per ritirare i risultati dai campi multipli...

Avete mica qualche idea?

risposto 9 anni fa
Pr0v4
X 0 X
Certoooo, ma il problema nn sta nel fatto che $cats e' stato dichiarato nel blocco piu' in basso,

A me invece sembra che lì ci sia un problema, infatti che senso avrebbe metere un ciclo foreach se $cats in quel punto dello script non potrà mai avere un valore.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

In effetti un errore c'e' Gianni, ma non e' quello che pensi te...

Ovvero se vai a vedere piu' in basso il form fa riferimento alla stessa pagina, quindi quando invio il form, e' la stessa pagina che lo processa e che controlla nuovamente se in $_POST, joketext e' settato o meno.

E' questo come ragionamento fila...

Il discorso che non riesco a capire io e' come cavolo posso prendere il numero delle categorie selezionate in cui inserire la barzelletta... Infatti un numero adesso me lo restituisce, ma e' assurdo! Se seleziono una categoria mi da come risultato 14, se ne seleziono 2 22; nn riesco a venirci a capo!

Per di piu' non riesco a inserire la barzelletta nelle varie categorie...

Cmq domani o stasera vi spiego meglio il problema perdonatemi ma oggi devo lavorare! A presto!

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