- Home
- Categorie
- Coding e Sistemistica
- PHP
- Inserimento/delete/modifica dati da form con casella a discesa e id collegati
-
Ciao Federico,
non devi farmi il progetto, poi lo adatto io, dovresti gentilmente cercare di fixare questi errori, io non so dove' il punto esatto del problema- i campi sono ripetuti
- non e' possibile lasciare i campi vuoti (magari io voglio aggiungere solo un dato)
guarda lo screenshot
-
questo e' un pezzo di codice preso da movie.php
[PHP]<td>Lead Actor</td>
<td><select name="movie_leadactor">
<?php
// select actor records
$query = 'SELECT
people_id, people_fullname
FROM
people
WHERE
people_isactor = 1
ORDER BY
people_fullname';
$result = mysql_query($query, $db) or die(mysql_error($db));// populate the select options with the results
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $value) {
if ($row['people_id'] == $movie_leadactor) {
echo '<option value="' . $row['people_id'] .
'" selected="selected">';
} else {
echo '<option value="' . $row['people_id'] . '">';
}
echo $row['people_fullname'] . '</option>';
}
}
?>[/PHP]
i campi sono ripetuti e non c'e' lo spazio null
-
Ciao Alex, come nei precedenti post, ti dico la mia. C'è un madornale errore di fondo.
Le funzioni for, while, do while, foreach, servono ad ottenere informazioni contenute all'interno di array associativi o multidimensionali.
In pratica cosa fanno? Queste funzioni mettono in circolo il raccoglitore (array) estraendo tutte le occorrenze al suo interno (una alla volta) fin tanto che ne esiste una.
Partendo da questo presupposto, utilizzare:
while(), con all'interno un foreach()
non fa altro che prenderti il dato reale, per poi essere ciclato nuovamente, cosa inutile, con conseguente duplicazione di risultati.
Ti consiglio di leggere:
https://www.php.net/manual/en/language.types.array.php
e le strutture di controllo: https://www.php.net/manual/en/language.control-structures.php
dove all'interno trovi i cicli menzionati, ma anche altre nozioni utili quali le condizioni, dichiarazioni etc.
Visto che vuoi imparare, iniziamo da qui. Magari trovi l'errore da solo e lo correggi.Ps. l'errore te l'ho scritto!
-
Ciao Stefano
il pezzo di codice che ho postato non lo scritto io, e trascritto a mano da me dal libro :D**
PHP 6, Apache, MySQL: Sviluppo di siti Web (Linguaggi & programmazione) di Timothy Boronczykquindi da come ho capito devo togliere foreach
esatto?
**
-
Federico per il php 7 meglio aspettare, per adesso faccio scuola con il 5.6, poi magari in futuro ci faccio un pensiero
-
con il consiglio di Ultima ho fixato il codice ;), adesso i valori non sono duplicati,
solo che vorrei ottenere uno spazio vuoto per avere la possibilita' di non inserire nulla[PHP]<?php
// select actor records
$query = 'SELECT
people_id, people_fullname
FROM
people
WHERE
people_isactor = 1
ORDER BY
people_fullname';
$result = mysql_query($query, $db) or die(mysql_error($db));// populate the select options with the results
while ($row = mysql_fetch_assoc($result)) {
{
if ($row['people_id'] == $movie_leadactor) {
echo '<option value="' . $row['people_id'] .
'" selected="selected">';
} else {
echo '<option value="' . $row['people_id'] . '">';
}
echo $row['people_fullname'] . '</option>';
}
}
?>[/PHP]
-
@Alex_2019 said:
con il consiglio di Ultima ho fixato il codice ;), adesso i valori non sono duplicati,
solo che vorrei ottenere uno spazio vuoto per avere la possibilita' di non inserire nulla[PHP]<?php
// select actor records
$query = 'SELECT
people_id, people_fullname
FROM
people
WHERE
people_isactor = 1
ORDER BY
people_fullname';
$result = mysql_query($query, $db) or die(mysql_error($db));// populate the select options with the results
while ($row = mysql_fetch_assoc($result)) {
{
if ($row['people_id'] == $movie_leadactor) {
echo '<option value="' . $row['people_id'] .
'" selected="selected">';
} else {
echo '<option value="' . $row['people_id'] . '">';
}
echo $row['people_fullname'] . '</option>';
}
}
?>[/PHP]
Ottieni uno spazio vuoto in questo modo, applicando un echo con la option della select vuota prima del ciclo while
[PHP]<?php
// select actor records
$query = 'SELECT
people_id, people_fullname
FROM
people
WHERE
people_isactor = 1
ORDER BY
people_fullname';
$result = mysql_query($query, $db) or die(mysql_error($db));
// da qui
echo '<option value="">Seleziona un attore..</option>';
//
// populate the select options with the results
while ($row = mysql_fetch_assoc($result)) {
{
if ($row['people_id'] == $movie_leadactor) {
echo '<option value="' . $row['people_id'] .
'" selected="selected">';
} else {
echo '<option value="' . $row['people_id'] . '">';
}
echo $row['people_fullname'] . '</option>';
}
}
?>[/PHP]
-
Benissimo,
adesso adatto il codice al mio e vediamo cosa combino,
spero che i precedenti attriti siano stati risolti e possiamo ricominciare da capo
Grazie a Ultima e Federico per il loro prezioso aiuto
-
sto testando il codice nel database di prova e..ho un errore
[HTML]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8[/HTML]
[PHP]<?php
$db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));if ($_GET['action'] == 'edit') {
//retrieve the record's information
$query = 'SELECT
movie_name, movie_type, movie_year, movie_leadactor, movie_director
FROM
movie
WHERE
movie_id = ' . $_GET['id'];
$result = mysql_query($query, $db) or die(mysql_error($db));
extract(mysql_fetch_assoc($result));
} else {
//set values to blank
$movie_name = '';
$movie_type = 0;
$movie_year = date('Y');
$movie_leadactor = 0;
$movie_director = 0;
}
?>[/PHP]line 8
[HTML]$query = 'SELECT[/HTML]
-
@Alex_2019 said:
sto testando il codice nel database di prova e..ho un errore
[HTML]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8[/HTML]
[PHP]<?php
$db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));if ($_GET['action'] == 'edit') {
//retrieve the record's information
$query = 'SELECT
movie_name, movie_type, movie_year, movie_leadactor, movie_director
FROM
movie
WHERE
movie_id = ' . $_GET['id'];
$result = mysql_query($query, $db) or die(mysql_error($db));
extract(mysql_fetch_assoc($result));
} else {
//set values to blank
$movie_name = '';
$movie_type = 0;
$movie_year = date('Y');
$movie_leadactor = 0;
$movie_director = 0;
}
?>[/PHP]line 8
[HTML]$query = 'SELECT[/HTML]
Sei proprio sicuro che sia questo il file e che sia esattamente questa la query? Te lo chiedo perchè in quella query non esite nessun dato indicato nell'errore **' , )'
**Anche perchè, la query è scritta correttamente e non presenta nessun errore.
-
Ti do una postilla, perchè o cercato è dato una letta rapida al libro che stai utilizzando. E' completamente, scritto con i piedi.
Sul libro si fa riferimento a PHP6, ma nella pratica si ferma a PHP 5.3.
Ci sono enormi lacune che spero siano derivate da traduzioni, perchè altrimenti sarebbe da ritirare dagli scaffali.
Inoltre, oltre a problemi di battitura vari, il codice è sporco e spesso ridondante
Ma cosa ben più grave, non vengono spiegate le funzioni di alcun tipo. Cosa grave per un libro di apprendimento, perchè presuppone una conoscenza già dei rispettivi linguaggi utilizzati, ma al contempo ha delle serie lacune.
Ti do il mio parere professionale e magari se vuoi, ti indico anche dove e come apprendere sia il codice, che le tecniche, per imparare a realizzare un sito web. Ma devi essere disposto e riniziare, cosa che ti farebbe bene, perchè apprenderesti realmente qualcosa, invece di andare per tentativi.
-
Si il libro fa pena, ma le versione italiana, mancano pezzi di codice e alcuni argomenti sono incompleti la versione inglese e' completa
i dati puntano al file commit.php, li ci sono le query
[PHP]<?php
$db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));
?>
<html>
<head>
<title>Commit</title>
</head>
<body>
<?php
switch ($_GET['action']) {
case 'add':
switch ($_GET['type']) {
case 'movie':
$query = 'INSERT INTO
movie
(movie_name, movie_year, movie_type, movie_leadactor,
movie_director)
VALUES
("' . $_POST['movie_name'] . '",
' . $_POST['movie_year'] . ',
' . $_POST['movie_type'] . ',
' . $_POST['movie_leadactor'] . ',
' . $_POST['movie_director'] . ')';
break;
}
break;
case 'edit':
switch ($_GET['type']) {
case 'movie':
$query = 'UPDATE movie SET
movie_name = "' . $_POST['movie_name'] . '",
movie_year = ' . $_POST['movie_year'] . ',
movie_type = ' . $_POST['movie_type'] . ',
movie_leadactor = ' . $_POST['movie_leadactor'] . ',
movie_director = ' . $_POST['movie_director'] . '
WHERE
movie_id = ' . $_POST['movie_id'];
break;
}
break;
}if (isset($query)) {
$result = mysql_query($query, $db) or die(mysql_error($db));
}
?>
<p>Done!</p>
</body>
</html>[/PHP]accetto consigli
-
capito il problema, se riempio tutti i campi l'errore non viene visualizzato
questo e' strano, nel database ho impostato tutti a Null, tranne movie_name
-
il codice funziona solo se compilo tutti i dati nella form, se lascio un campo/i vuoti genera errore
-
L'errore a cui ti riferisci viene dal file commit.php nella parte in cui lanci la query di INSERT.
Dovresti controllare cosa ricevi dal form in caso il campo non venga compilato. L'errore sta lì!
-
@FedeMasiero said:
L'errore a cui ti riferisci viene dal file commit.php nella parte in cui lanci la query di INSERT.
Dovresti controllare cosa ricevi dal form in caso il campo non venga compilato. L'errore sta lì!questo
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , )' at line 8
-
Esattamente, proprio questo! Deriva dal pezzo di codice in commit.php dove hai la query di inserimento: INSERT INTO ecc...
-
in alto c'e' il codice di **commit.php
ho controllato, sembra tutto a tosto :bho:
**
-
Ciao Alex, prova a riscrivere la query, come te la ho scritta io.
[PHP]
<?php
$db = mysql_connect('localhost', 'bp6am', 'bp6ampass') or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));
?>
<html>
<head>
<title>Commit</title>
</head>
<body>
<?php
switch ($_GET['action']) {
case 'add':
switch ($_GET['type']) {
case 'movie':
$query = "INSERT INTO
movie
(movie_name, movie_year, movie_type, movie_leadactor,
movie_director)
VALUES
('" . $_POST['movie_name'] . "',
" . $_POST['movie_year'] . ",
" . $_POST['movie_type'] . ",
" . $_POST['movie_leadactor'] . ",
" . $_POST['movie_director'] . ")";
break;
}
break;
case 'edit':
switch ($_GET['type']) {
case 'movie':
$query = "UPDATE movie SET
movie_name = '" . $_POST['movie_name'] . "',
movie_year = " . $_POST['movie_year'] . ",
movie_type = " . $_POST['movie_type'] . ",
movie_leadactor = " . $_POST['movie_leadactor'] . ",
movie_director = " . $_POST['movie_director'] . "
WHERE
movie_id = " . $_POST['movie_id'];
break;
}
break;
}if (isset($query)) {
$result = mysql_query($query, $db) or die(mysql_error($db));
}
?>
<p>Done!</p>
</body>
</html>
[/PHP]
-
Grazie Stefano
provops: ricordo che questo e' un codice di test per testare le funzionalita', il database originale ha altri campi e altre relazioni, da riscrivere le query