[PHP] Parse error: syntax error, unexpected variabile (T_VARIABLE)

username90

Nuovo Utente
27 Ott 2016
29
0
1
34
Ciao a tutti, spero di non sbagliare sezione del post e regole...sto facendo un progetto per l'uni, ma ho dei problemi quando scrivo gli script php. Il mio codice, salvato nel file inserisci_ricetta.php, è il seguente (avrei voluto metterlo usando gli appositi tag ma non sono stata capace, chiedo scusa in anticipo per questa cosa):
PHP:
<body>
    <h2>SEZIONE UTENTE</h2>
    <a><img src="img/utente.jpg" width="10%" height="10%"></a><br>
    <?PHP include "menu.inc.php";
    $tipo=$_GET["tipologia"];
    $titolo=$_GET["titolo"];
    $prep=$_GET["preparazione"];
    $diff=$_GET["difficolta'"];
    $cottura=$_GET["cottura"];
    $porzioni=$_GET["porzioni"];
    $cal=$_GET["porzioni"];
    $not=$_GET["note"];
  
    include "database.inc.php";
    $query="INSERT INTO ricetta (tipologia, titolo, preparazione, difficolta', cottura, porzioni, calorie, note)
            VALUES ("$tipo", "$titolo", "$prep", "$diff", "$cottura", "$porzioni", "$cal", "$not")";
    mysql_query($query) or die ("Query fallita: ".mysql_error());
    echo "<br><br><strong>INSERIMENTO AVVENUTO CON SUCCESSO</strong><br><br>";
    mysql_close($connessione);
    ?>
  
</body>
nel file menu.inc.php ci sono solo tre link nell'apposito hashtag <a></a>, nel file database.inc.php invece ho specificato come connettersi al mio database tramite la funzione mysql_connect. Quando vado a testare dal web la pagina inserisci_ricetta.php mi appare il seguente errore "Parse error: syntax error, unexpected '$tipo' (T_VARIABLE) in C:\xampp\htdocs\www\rivista\inserisci_ricetta.php on line 27". Dove sbaglio e soprattutto cosa? a me sembra corretto, ho preso spunto da un file trovato online per scrivere questo codice.
 
Ultima modifica di un moderatore:
Ciao,
PHP:
$query="INSERT INTO ricetta (tipologia, titolo, preparazione, difficolta', cottura, porzioni, calorie, note)
VALUES ("$tipo", "$titolo", "$prep", "$diff", "$cottura", "$porzioni", "$cal", "$not")";

Prova a togliere le variabili dalle virgolette, in questo modo:
PHP:
$query="INSERT INTO ricetta (tipologia, titolo, preparazione, difficolta', cottura, porzioni, calorie, note)
VALUES ($tipo, $titolo, $prep, $diff, $cottura, $porzioni, $cal, $not)";

Per postare il codice ti basta cliccare sulla quartultima icona presente nella barra superiore dell'editor (quella a sinistra del floppy) e selezionare "Codice" e successivamente PHP, inserendo il relativo codice.
 
Grazie per avermi risposto. Allora ho corretto come mi hai detto tu ed effettivamente quell'errore di prima ora non c'è più, ma ce ne sono altri:
Notice: Undefined index: titolo in C:\xampp\htdocs\www\rivista\inserisci_ricetta.php on line 17

Notice: Undefined index: difficolta' in C:\xampp\htdocs\www\rivista\inserisci_ricetta.php on line 19

Warning: mysql_connect(): Access denied for user 'muzzo'@'localhost' (using password: YES) in C:\xampp\htdocs\www\rivista\database.inc.php on line 3
Conessione non riuscita: Access denied for user 'muzzo'@'localhost' (using password: YES)

muzzo è lo user del db che ho inserito nel file database.inc.php che è così scritto:
<?PHP
$connessione=mysql_connect("localhost", "muzzo", "mypwd") or die ("Conessione non riuscita: ".mysql_error());

mysql_select_db("dbprova") or die ("Selezione database non avvenuta");
?>
 
• Cambia i salvataggi del GET in questo modo
PHP:
$tipo=isset($_GET["tipologia"]) ? $_GET["tipologia"] : "";
$titolo=isset($_GET["titolo"]) ? $_GET["titolo"] : "";
// e tutte le altre variabili allo stesso modo

• Togli l'apostrofo a difficolta'.

Controlla che le credenziali per la connessione al db siano corrette.
 
  • Like
Reactions: username90
Notice: Undefined index: titolo in C:\xampp\htdocs\www\rivista\inserisci_ricetta.php on line 17
probabilmente hai scritto male "titolo" nella url che hai usato per chiamare lo script
il suggerimento che ti hanno già dato, non risolve il problema ma impedisce che l'informazione sia scritta nel db

Notice: Undefined index: difficolta' in C:\xampp\htdocs\www\rivista\inserisci_ricetta.php on line 19
idem come sopra, ma non usare mai caratteri speciali e spazi nei nomi degli oggetti, é un "volersi fare del male"

Conessione non riuscita: Access denied for user 'muzzo'@'localhost' (using password: YES)
l'utente che hai usato per accedere al db non ha le autorizzazioni necessarie, oltre a creare l'utente, devi dare le necessarie autorizzazioni,
non conosco mysql, ma vedi se, "GRANT SELECT ON nometabella TO PUBLIC" da ripetere con insert, update, delete e alter, è sufficiente a risolvere il problema
puoi provare la connessione con utente "root" probabilmente senza password

prossimo errore previsto,
$query="INSERT INTO ricetta (tipologia, titolo, preparazione, difficolta, cottura, porzioni, calorie, note)
VALUES ($tipo, $titolo, $prep, $diff, $cottura, $porzioni, $cal, $not)";
difficolta non accentata,
tutti i valori alfanumerici (es titolo) devono essere scritti tra apici
...., $titolo,......
...., '".$titolo."',.....
so che richiede attenzione e annoia, ma gli apici sono obbligatori
per chiarezza
virgola apice virgolette punto $titolo punto virgolette apice virgola
 
  • Like
Reactions: username90
probabilmente hai scritto male "titolo" nella url che hai usato per chiamare lo script
il suggerimento che ti hanno già dato, non risolve il problema ma impedisce che l'informazione sia scritta nel db

Il suggerimento mira ad accertare che esista effettivamente l'indice "titolo" (e tutti gli altri) all'interno di $_GET, prima di andare a salvare quel valore in una variabile. Quindi se nell'url non viene passato il valore per titolo, allora in $_GET non sarà presente l'indice titolo e, quando viene richiamato in quel modo, PHP ti restituisce la Notice: undefined index.

Inoltre, non impedisce affatto la scrittura in tabella, semplicemente attribuisce alla variabile in questione una stringa vuota, poiché, per ipotesi, non viene passato il parametro.

Poi, potrebbe anche essere un problema di incongruenza tra il name dell'input e l'indice di $_GET, ma è un altro discorso.

Dunque, prima di dire che una soluzione non risolve il problema, cerchiamo prima di individuare il problema.
 
allora i problemi sugli indici li ho risolti in questo modo: difficolta sbagliavo a mettere l'apostrofo come entrambi mi avevate fatto notare, per titolo c'era incongruenza tra il name dell'input e l'indice di $_GET (che poi ho cambiato con $_POST). L'unico problema rimasto che sto cercando di risolvere è quello legate alle credenziali. Ho provato come utente "root" e password "" e quando compila mi dice Selezione database non avvenuta, perchè io nel file di configurazione avevo messo quest'istruzione mysql_select_db("dbprova") or die ("Selezione database non avvenuta");
 
Ultima modifica:
ciao
il modo corretto per scrivere la query (presupponendo che le variabili siano tutte tipo stringa)
PHP:
$query="INSERT INTO ricetta (tipologia, titolo, preparazione, difficolta, cottura, porzioni, calorie, note)
VALUES ('$tipo', '$titolo', '$prep', '$diff', '$cottura', '$porzioni', $cal, '$not')";
se una variabile è tipo intero gli apici non ci vogliono es se calorie è un intero

per la stringa vuota attenzione: se il campo è settato a not null è facile che la query non avvenga e senza riportare errori
 

Discussioni simili