array da mysql

ciao a tutti,

vi pongo un mio problema al quale sto cercando una soluzione, sempre ammesso esista!

ho sul database mysql un tabella contentente nome-1-2-3

i campi 1,2,3 contengono 0-1 (true-false).

a me interessa interrogare il database dove il nome corrisponde all'utente e ottenere un array cosi strutturato:

se il campo 1 risulta 0, lo prendo, se risulta 1 non lo prendo. e cosi via per i 3 campi.

l'array avrà quindi solo i campi che hanno valore 0.

mettiamo caso che 1-->0, 2-->1, 3-->0.

l'array che devo ottenere sarà 1,3

tutto questo perchè, devo poi, in un form, avere come option value i valori dell'array, quindi in questo caso mi dovranno comparire come opzioni, i numeri 1 e 3.

è possibile? qualcuno ha qualche idea su come poterlo realizzare?

grazie in anticipo!

inviato 5 anni fa
sinistro
X 0 X

Beh, fai una semplice query a mysql per ricavare i dati, poi li processi con un ciclo per ricostruire un array o le variabili con le tue necessita...

risposto 5 anni fa
Mario Santagiuliana
X 0 X

si però con un ciclo di questo tipo, ottengo come variabile cioè che c'è dentro il campo della mia tabella mysql, quindi i valori 1 o 0. non ottengo i numeri 1,3, ecc.

e come faccio a selezionare solo i campi 1,2,3 che contengono il valore 0?

$query = "SELECT 1,2,3 FROM db WHERE nome='$link';
$result = mysql_query($query);
   if (!$result) {
   die("Errore nella query $query: " . mysql_error());
   }

   while ($row = mysql_fetch_assoc($result)) {
   
      $1                       = htmlentities($row['1']);
      $2      = htmlentities($row['2']);
      $3      = htmlentities($row['3']);
risposto 5 anni fa
sinistro
X 0 X

No, con la query selezioni tutti i campi. Poi con un ciclo e dei controlli if scremi i campi che hanno valore 1.

Per cui, prima di ogni riga nel tuo ciclo while:

if($row['1'] == 0)
  //fai quello che ti interessa se no niente
risposto 5 anni fa
Mario Santagiuliana
X 0 X

in pratica verrebbe cosi?

$query = "SELECT 1,2,3 FROM db WHERE nome='$link';
$result = mysql_query($query);
   if (!$result) {
   die("Errore nella query $query: " . mysql_error());
   }

   while ($row = mysql_fetch_assoc($result)) {
   
      if($row['1'] == 0) {$1 = htmlentities($row['1']);}
      if($row['2'] == 0) {$2 = htmlentities($row['2']);}
      if($row['3'] == 0) {$3 = htmlentities($row['3']);}
                }
$scelta = array($row);

e poi vado a inserire nel mio form

<option value="<?php echo $scelta?>"</option>
risposto 5 anni fa
sinistro
X 0 X

Una cosa analoga, ovviamente non puoi fare un echo di un array, ma delle tue variabili $1 $2 e $3. E dovresti aggiungere dei controlli sul fatto che una variabile è inizializzata o meno.

Allora ti suggerisco: perchè non fai un semplice controllo prima di stampare il tuo codice html in cui controlli che il valore è 0 o 1 e a seconda del caso stampi o meno in un modo il tuo codice html?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

mmm a me interessa che le opzioni che compaiono nel form siano quelle passate dentro l'array.

cioè se arrivo al form, come opzioni ci devono effettivamente essere i campi contenenti 0

risposto 5 anni fa
sinistro
X 0 X

Ok, ma se tu non hai una variabile valorizzata, come hai fatto vedere ora, tu inserisci una "option" senza valore. Sarebbe meglio non inserire proprio la "option". Mi sono spiegato?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ok quello risolto!

adesso sono arrivato in una parte di codice, dove ho un ciclo while per ottenere dei valori dal mio database.

while ($row = mysql_fetch_assoc($result)) {
      $confronto = htmlentities($row['maglia']);
      

semplice semplice, se non fosse che può ottenere 1 valore come può ottenerne 10. quindi se stampo $confronto, ad esempio avrò 070311101250 (perchè i valori che ottiene sono numeri).

a me interessa confrontare tra loro quei numeri, con il numero nuovo inserito, in modo che non si ripetano. come posso fare?

risposto 5 anni fa
sinistro
X 0 X
a me interessa confrontare tra loro quei numeri, con il numero nuovo inserito, in modo che non si ripetano. come posso fare?

Non ho esattamente capito cosa hai bisogno di fare...

risposto 5 anni fa
Mario Santagiuliana
X 0 X

devo fare un ciclo while come quello scritto sopra, che mi faccia ottenere n dati dal database.

a questo punto i seguenti dati li devo inserire nel form

<form name='form_registrazione' method='post' action=''>
           <select name="dato"><label class='style2'>
         <option value="1" <?if($dato==1) echo 'selected="selected"'?>>1</option>
         <option value="2" <?if($dato==2) echo 'selected="selected"'?>>2</option>
         <option value="3" <?if($dato==3) echo 'selected="selected"'?>>3</option>
               </select><input name='invia' type='submit' value='Invia' /></form>

ma anzichè scrivere uno a uno le varie opzioni, devo visualizzare come opzioni i dati scaricati in precedenza con il ciclo (premetto che i dati possono essere 10 come 1, è un numero variabile e quindi deve visualizzare un numero variabile di opzioni).

fatto questo, passo l'opzione con $_POST in modo da poterla poi modificare nel database.

si può fare secondo te?

risposto 5 anni fa
sinistro
X 0 X

Fai un ciclo for, no?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

non ho capito dove.. mi potresti fare un esempio?

cioè non un esempio di un ciclo for perchè so cos'è, intendo un esempio di come verrebbe il codice della pagina

risposto 5 anni fa
sinistro
X 0 X

Una cosa simile:

<form name='form_registrazione' method='post' action=''>
           <select name="dato"><label class='style2'>
<?php
for($i=1;$i<=10;$++) {
       if($dato[$i] == $i)
         echo '<option value="'.$i.'" selected="selected>'.$i.'</option>';
       else
         echo '<option value="'.$i.'">'.$i.'</option>';
}
               </select><input name='invia' type='submit' value='Invia' /></form>
risposto 5 anni fa
Mario Santagiuliana
X 0 X

in pratica $i sarebbe la variabile in cui ci sono i dati presi dal database con il ciclo while?

e poi l'utente sceglie una $i particolare e la seleziona e io poi posso recuperarla con $_POST

giusto?

però c'è ancora un problemino, io non so il numero esatto delle variabili che tira fuori dal database e questo numero è variabile a seconda dell'utente

risposto 5 anni fa
sinistro
X 0 X

Scusa, mi sembra sei un po' confuso. Tu sta creando una serie di opzioni a scelta. Se è presente nel database un dato valore fai in modo che nel browser appaia selezionato o no?

I valori del menu saranno prefissati o no? Se sono una serie di numeri incrementali il ciclo for è perfetto.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

no perchè... provo a farti un esempio pratico.

sul database

utente1 -- articolo1 --caratteristica

utente1 -- articolo2 -- c

utente1 -- articolo3

utente2 -- articolo1

utente2 -- articolo4

tramite il ciclo while tiro fuori $articoli dove utente è uguale a utente1

se stampo $articoli avrò:

articolo1

articolo2

articolo3

il mio problema adesso è far diventare questo elenco ($articoli) delle opzioni del form, in modo che l'utente1 selezioni esempio articolo1

e poi io dopo con $_POST posso andare a modificare il campo caratteristica nella tabella (utente1 -- articolo1)

risposto 5 anni fa
sinistro
modificato 5 anni fa
X 0 X

Temo che ti stai approcciando in modo sbagliato a tutto il problema...un po' mi suonava strana la tua richiesta di estrarre dei campi dal database in modo "variabile"...In genere si estraggono le righe di un database che corrispondono a determinati criteri, non i campi della tabella di un database.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

infatti!

corrispondono al criterio "utente1"

o "utente2"

non si conosce il numero esatto degli articoli che corrispondo all'utente, ma non sono estratti a caso

devo estrarre il valore del campo articolo delle righe dove utente=utente1

risposto 5 anni fa
sinistro
modificato 5 anni fa
X 0 X

E allora è scorretto tutto l'approccio iniziale come il ciclo while.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ma il ciclo while cosi impostato funziona

$query = "SELECT articolo FROM database WHERE utente='utente1'";
   $result = mysql_query($query);

   if (!$result) {
   die("Errore nella query $query: " . mysql_error());
   }

   while ($row = mysql_fetch_assoc($result)) {
      $articolo        = htmlentities($row['articolo'])
}
risposto 5 anni fa
sinistro
X 0 X

Si ma allora bisogna che spieghi meglio il problema e cosa vuoi fare.

Quel ciclo while può essere inutile per estrarre i dati di una query, puoi farlo con altre funzioni più specifiche:

http://php.net/manual/en/ref.mysql.php

risposto 5 anni fa
Mario Santagiuliana
X 0 X

cerco di spiegarmi meglio!

estrarre i dati non era il mio problema infatti.

col ciclo while così impostato riesco ad estrarli.

il problema è che dopo voglio rendere disponibili quei dati estratti come opzioni del form

cioè se l'utente1 ha articolo1,articolo2,articolo3

il ciclo while restituisce articolo1,articolo2,articolo3 nella variabile $articolo

a questo punto io devo fargli scegliere tramite form quale articolo visualizzare

quindi deve esserci il menu a tendina con le opzioni: articolo1,articolo2,articolo3

spero di essere riuscito a spiegarmi :D

risposto 5 anni fa
sinistro
X 0 X

Ok, in tal caso il ciclo while è usato a sproposito, per inserire i dati in un array. Possiamo usare direttamente il ciclo while per stampare a video i dati della query.

Per permettere all'utente di vedere l'articolo, perchè usare un sistema di form e POST? Basta mettere un link per ogni articolo no? Usi l'array GET, è più semplice.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Per permettere all'utente di vedere l'articolo, perchè usare un sistema di form e POST? Basta mettere un link per ogni articolo no? Usi l'array GET, è più semplice.

cioè? cosa intendi? mi potresti fare un esempio?

risposto 5 anni fa
sinistro
X 0 X

Semplicemente sostituisci il form con un link:

vedi_articolo.php?id=id_articolo

Una cosa del genere.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

sono riuscito ad ottenere il menu a tendina con questo codice

?>
<form name='form' method='post' action=''>
<select name='codice'><label class='style2'>

<?
$query = "SELECT codice,articolo FROM db WHERE utente='$utente'";
$result = mysql_query($query);

if (!$result) {
die("Errore nella query $query: " . mysql_error());
}


while ($row = mysql_fetch_assoc($result)) {
$articolo = htmlentities($row['articolo']);
$codice = htmlentities($row['codice']);


?>
<option value='<? $codice ?>' <? echo "selected='selected'>$articolo" ?></option> 


<?
}
?> 

</select>
<input name='invia' type='submit' value='Invia' /></form>

quando poi però vado a richiamare la variabile con $codice = $_POST['codice'];

non mi passa nessun valore e quindi non mi passa il codice relativo all'articolo scelto dall'utente

risposto 5 anni fa
sinistro
X 0 X

Perchè usi ""selected='selected'"?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

non so, conoscevo quello. cos'altro posso usare?

risposto 5 anni fa
sinistro
X 0 X

Quello lo inserisci solo una volta nella lista per far vedere un'opzione preselezionata, altrimenti non aggiungerlo.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Quello lo inserisci solo una volta nella lista per far vedere un'opzione preselezionata, altrimenti non aggiungerlo.

l'ho eliminato, ma il problema resta

risposto 5 anni fa
sinistro
X 0 X

Fa un debug del tuo codice.

Prova a fare un var_dump o un print_r dell'array POST per capire che variabili invii dal tuo form.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

restituisce bool(false)

risposto 5 anni fa
sinistro
X 0 X

Allora c'è qualche problema con il tuo form...puoi farci vedere il codice html del form di invio?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ok ho risolto cambiando il codice di visualizzazione delle opzioni

ecco il nuovo codice funzionante

echo "\t<option value=\"$codice\">$nome</option>\n";
risposto 5 anni fa
sinistro
X 0 X

Bene così!

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda