Pagina 1 di 2
[PHP]Select
Inviato: lunedì 9 maggio 2016, 19:04
da Lucciano
Salve qualcuno potrebbe darmi un chiarimento sulla seguente riga di codice:
Codice: Seleziona tutto
echo'<option value="' .$row['movietype_id']. '" selected="selected">';
perchè all'interno di option value dopo aver messo i doppi apici mette i singoli e poi concatena il tutto?
Non si può scrivere così?
Codice: Seleziona tutto
echo'<option value="$row['movietype_id']" selected="selected">';
Grazie
Re: [PHP]Select
Inviato: martedì 10 maggio 2016, 8:11
da Zoff
Non puoi perché così non sostituiresti la variabile col suo valore.
Se non vuoi concatenare puoi fare così:
Codice: Seleziona tutto
echo "<option value=\"{$row['movietype_id']}\" selected=\"selected\">";
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:07
da Lucciano
Non ho ben capito Zoff. Gli apici singoli risolvono il valore della variabile in esso contenuto? Cioè se metto $row['movietypeid'] dentro apici singoli avrò il valore?
Per quanto riguarda questo codice
Codice: Seleziona tutto
$query='SELECT campo1,campo2,campo3
FROM persone
WHERE persone_id='.$_GET['id'];
noto che dopo la chiusura dell'apice singolo subito dopo l'uguale mette un punto e concatena $_GET['id']. Vale lo stesso discorso di prima?
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:12
da Zoff
La questione è molto semplice:
Codice: Seleziona tutto
<?php
$var = 'ciao';
echo "$var" . PHP_EOL; //Stampa ciao
echo '$var' . PHP_EOL; //Stampa $var
Quello che conta è il primo apice utilizzato, se è singolo NON vengono sostituite le variabili.
Ma cosa più importante, le query non si costruiscono né concatenando né inserendo le variabili dentro le stringhe.
Si usano i prepared statement:
http://php.net/manual/en/pdo.prepared-statements.php
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:23
da Lucciano
Quindi nel seguente codice:
Codice: Seleziona tutto
echo'<option value="' .$row['movietype_id']. '" selected="selected">';
dato che $row['movietype_id'] è contenuto in apici singoli il valore non viene sostituito?
Per quanto riguarda i prpared statement cerco di sostituire il tutto con il Pdo (se riesco). Ma con le mysqli procedurali non esiste il prepared statement?
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:26
da Zoff
In quel codice la variabile non è dentro una stringa, ma è concatenata alla stringa con l'operatore punto.
Per mysqli
http://php.net/manual/it/mysqli.prepare.php
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:34
da Lucciano
si ma ci stà l'apice singolo..
Re: [PHP]Select
Inviato: venerdì 13 maggio 2016, 22:40
da Zoff
Quella stampa equivale a:
Codice: Seleziona tutto
$var1 = '<option value="';
$var2 = $row['movietype_id'];
$var3 = '" selected="selected">';
echo $var1 . $var2 . $var3;
Non ci sono variabili dentro stringhe.
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 10:12
da Lucciano
Zoff ho il seguente codice (sto trasformando da myqli a Pdo)
Codice: Seleziona tutto
$query='SELECT campo1,campo2,campo3
FROM colonna
WHERE perosna_id='.$_GET['id'];
$result=$pdo->query($query);
extract (PDO::FETCH_ASSOC($result));
Tuttavia quando eseguo il codice mi dice:
Fatal error: Call to undefined method PDO::FETCH_ASSOC()
Ps: Ho fatto così e sembra funzionare:
$query='SELECT campo1,campo2,campo3
FROM colonna
WHERE persona_id='.$_GET['id'];
$result=$pdo->query($query);
$s=$result->fetchAll(PDO::FETCH_ASSOC);
extract ($s);
Anzi non funziona
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 10:51
da Zoff
Perché non fai come indicato nella documentazione che ti ho linkato?
Codice: Seleziona tutto
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
while ($row = $stmt->fetch()) {
print_r($row);
}
}
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 10:54
da Lucciano
Io voglio usare il Pdo!
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:05
da Lucciano
In pratca zoff il codice che mi da problemi dovrebbe essere questo:
Codice: Seleziona tutto
if ($_GET['action']=='edit')
{
$query='SELECT campo1,campo2,campo3
FROM persone
WHERE persone_id='.$_GET['id'];
$result=$pdo->query($query);
extract($result->fetchAll(PDO::FETCH_ASSOC));
}else
{
//Setta i valori a null
$nome='';
$cognome="";
$anno=date("Y");
}
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:14
da Zoff
Appunto.... la variabile $dbh è l'oggetto PDO.
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:40
da Lucciano
Si ma come applico extract? Tu fai l'esempio con il while
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:44
da Zoff
Che c'entra extract con PDO?
In ogni caso extract vuole come argomento un array associativo, tu gli passi un array che contiene array associativi.
Per intenderci, fetchAll() resistuisce:
Codice: Seleziona tutto
[
[ "campo1" => "val1", "campo2" => "val2", "campo3" => "val3"]
];
extract vuole solo:
Codice: Seleziona tutto
[ "campo1" => "val1", "campo2" => "val2", "campo3" => "val3"]
Ti consiglio vivamente di leggere la documentazione evitando di andare a caso.
Usa fetch() anziché fetchAll(), ma se non leggi la documentazione non sai scegliere i metodi giusti.
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:48
da Lucciano
Allora Zoff ti spiego. Quello che io devo fare è "trasformare" un esercizio dal mysql al pdo.
Ora nel mysql ho questo codice:
Codice: Seleziona tutto
<?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;
}
?>
Io sto tentando di trasformarlo nel Pdo con il seguent codice:
Codice: Seleziona tutto
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=moviesite', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES"utf8"');
}catch (PDOException $e)
{
$errore='Impossibile connettersi al database'.$e->getMessage();
echo $errore;
exit();
}
if ($_GET['action']=='edit')
{
$query='SELECT movie_name,movie_type,movie_year,movie_leadactor,movie_director
FROM movie
WHERE movie_id='.$_GET['id'];
$result=$pdo->query($query);
extract($result->fetchAll(PDO::FETCH_ASSOC));
}else
{
//Setta i valori a null
$movie_name='';
$movie_type=0;
$movie_year=date("Y");
$movie_leadactor=0;
$movie_director=0;
}
?>
Però ho l'impressione che qualcosa non va bene
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 11:53
da Zoff
Te l'ho appena scritto cosa non va, però non sembri leggere le risposte che ti vengono date:
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 12:00
da Lucciano
Grazie zoff.In pratica io gli passavo un arry multidimensionale, mentre extract vuole un semplice array
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 12:02
da Zoff
Ma la cosa piu' importante dovrebbe essere sostituire query() con prepare()+execute() altrimenti usi PDO ma continui ad avere TUTTI i problemi del driver base.
Re: [PHP]Select
Inviato: sabato 14 maggio 2016, 12:24
da Lucciano
Si ma non riesco a farlo!!