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..

Codice: Seleziona tutto

"'  .$row['movietype_id'].  '"

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:
Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4881981#p4881981][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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, 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!!