come interrogo array php?

  • Creatore Discussione Creatore Discussione VAik
  • Data di inizio Data di inizio

VAik

Utente Attivo
16 Apr 2016
117
3
18
ciao a tutti ragazzi
tramite un programma php

PHP:
$strsql= "SELECT * FROM slideshow ";
$rs = @mysqli_query($link, $strsql) or die("Errore query database: " . mysqli_error($link));


    $result = array();
    while ($riga = mysqli_fetch_array($rs)) {
        $result[] = $riga;
    }
    echo json_encode($result);

ottengo un array con diverse coppie chiave-valore.

come faccio ora con un metodo $.ajax a prelevare delle info dall'array (mi interessa una chaive in particolare indirizzo_foto) e costruire un tag <img src="">

Codice:
$.ajax({
            url: 'file.php',
            dataType: "json",     //<-----o devo mettere HTML?
             
            success: function (dati) {

//in dati ci dovrebbe essere l'array costruito nel file .php. giusto?

                     console.log(dati);
                //var indi=dati.indirizzo_foto;      //con .indirizzo_foto  vado ad accedere ad una chiave dell'array . E' corretto?
               // var image = "<img src=\"" + indi + "\">";   //vorrei costruire un tag img
                  $('img src').html(dati.indirizzo_foto);
                var image = "<img src=\"" + indi + "\">";
                $('#boxslide img').append(image);
            }
        });
   
    
    }
 
Ciao, tutto corretto ma devi usare un ciclo : la query ti restituisce più risultati
in questo modo dovresti riuscire a estrarre il primo valore
Codice:
var indi=dati[0].indirizzo_foto;
con un ciclo each() li estrai tutti
 
  • Like
Reactions: VAik
Ciao Criric
grazie per avermi risposto. Ho modificato in questo modo, ma non mi funziona la comparsa delle immagini:

HTML:
 function animo(tipo) {
        if (tipo=='succ' && spostamento>-imgdim*numimg) {
            spostamento -= imgdim;
            slideDB();
            $box.css('margin-left',spostamento+'px');
        } else if (tipo=='prec' && spostamento<0) {
            spostamento += imgdim;
            slideDB();
            $box.css('margin-left',spostamento+'px');
        }
    }

  function slideDB() {
        $.ajax({
            url: 'lettura-da-altervista_per_slideshow.php',
            dataType: "json",
          
            success: function (dati) {
                     console.log(dati);
                         
                $(dati).each(function () {//scorro questo oggetto
                    var indi=dati[0].indirizzo_foto;
                    var image = "<img src=\"" + indi + "\">";
                    $('#boxslide').append(image);
                    });
            
            
            }
        });
 
 
 
    }//chiudo funzione
});//chiudo tutto lo script

        </script>



</head>
<body>
<section id="slogan">
         <div id="controllo_slide">
               <div id="finestra_slide">
                      <div id="boxslide">
                           <img src="../images/slide1.png" width="570" alt="Slide 1">
                        <!--    <img src="../images/slide2.png" width="570" alt="Slide 2">
                               <img src="../images/slide3.png" width="570" alt="Slide 3"> -->
                            </div>
                        </div>
                     
                        <a href="#" class="prec"><img src="../images/prev.png" width="24" height="43" alt="Precedente"></a>
                        <a href="#" class="succ"><img src="../images/next.png" width="24" height="43" alt="Successivo"></a>
                    </div>
                    <img src="../images/cornice.png" alt="">
                </section>

</body>
</html>
 
la sintassi giusta è questa
Codice:
$.ajax({
        url: 'lettura-da-altervista_per_slideshow.php',
        dataType: "json",
        success: function (dati) {
            $(dati).each(function (i, e) {//scorro questo oggetto
                var image = "<img src=\"" + e.indirizzo_foto + "\">";
                $('#boxslide').append(image);
            });
        }
    });
guarda nella console del browser se ti dà errori.
 
ciao Criric
ho modificato anche come hai scritto tu, non ci sono errori ma non funziona.

Perchè hai usato questa forma ed hai abbandonato

var indi=dati[0].indirizzo_foto;

e poi hai messo come parametri di ingresso alla funzione del ciclo each() la i e la e
e poi hai usato solo la e?
 
la prima serviva per estrarre solo il primo elemento , era un prova
la i e la e servono per estrarre dal ciclo l'indice e l'elemento
metti nel ciclo console.log(e.indirizzo_foto) e anche console.log(i) e guarda in console cosa ti scrive
 
ciao

allora
HTML:
console.log(e.indirizzo_foto);
mi da in consolle 14 indefiniti

HTML:
console.log(i);
mi da proprio l'indice ed infatti ne vedo 1-2-3-4-------14
HTML:
console.log(dati[0].indirizzo_foto);
mi da in consolle 14 indefiniti
 
posta tutta la struttura del json
console.log(dati);
 
questo lo ottengo se nel datatype del metodo $.ajax imposto html.
Se imposto json non riesco a vedere nulla
Codice:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>leggo i file dal db di altervista</title>
</head>

<body><!-- BEGIN AV_TOOLBAR -->
<div id="av_toolbar_regdiv">
<div class="av_site"><a target="_blank" href="http://it.altervista.org/crea-sito-gratis.php?utm_campaign=toolbar&amp;utm_source=link&amp;utm_medium=link" title="Siti, blog e web hosting gratis">Crea sito</a></div>
</div>
<script type="text/javascript">
(function(d, s) {
    var fjs = d.getElementsByTagName(s)[0], js = d.createElement(s);
    js.src = "//tb.altervista.org/js/script.js?1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script'));
</script>
<!-- END AV_TOOLBAR -->



tutto l'array è[{"0":"1","id":"1","1":"prima slide","titolo":"prima slide","2":"prima slide dello slideshow","descrizione":"prima slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide1.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide1.png"},
{"0":"2","id":"2","1":"seconda slide","titolo":"seconda slide","2":"seconda slide dello slideshow","descrizione":"seconda slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide2.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide2.png"},
{"0":"3","id":"3","1":"terza slide","titolo":"terza slide","2":"terza slide dello slideshow","descrizione":"terza slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide3.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide3.png"}]
    </body>
    </html>
 
Ultima modifica:
intendevo quello che esce in console.
Fai cosi : modifica la query aggiungendo LIMIT 1 cosi lavoriamo su una sola immagine
rimetti nel ciclo console.log(i) e console.log(e) e guarda in console cosa ti scrive
 
la pagina php deve esclusivamente mandare in echo il json, non ci può essere altro codice. Togli tutto il resto e lascia solo il risultato della query : echo json_encode($result);
 
allora ho modificato il file .php eliminando tutto ciò che era html.

con console.log(e); e console.log(i); ottengo
Codice:
jquery-latest.js:2 Uncaught Error: Syntax error, unrecognized expression: [{"0":"1","id":"1","1":"prima slide","titolo":"prima slide","2":"prima slide dello slideshow","descrizione":"prima slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide1.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide1.png"}]
fa.error @ jquery-latest.js:2
fa.tokenize @ jquery-latest.js:2
fa.select @ jquery-latest.js:2
fa @ jquery-latest.js:2
n.fn.extend.find @ jquery-latest.js:2
n.fn.init @ jquery-latest.js:2
n @ jquery-latest.js:2
$.ajax.success @ prova_slideshow_da_fonte_esterna.html:122
i @ jquery-latest.js:2
j.fireWith @ jquery-latest.js:2
z @ jquery-latest.js:4
(anonymous function) @ jquery-latest.js:4
 
Ultima modifica:
se richiami direttamente la pagina php cosa ti stampa il browser ?
metti limit 1
 
si ho messo LIMIT 1 e mi da appunto solo la prima immagine: cioè aprendo il file .php visualizzo questo

Codice:
[{"0":"1","id":"1","1":"prima slide","titolo":"prima slide","2":"prima slide dello slideshow","descrizione":"prima slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide1.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide1.png"}]
 
anche se considero console.log(dati) ottengo

quello di prima e sotto anche quello del messaggio 13
 
il json che hai postato è corretto. Ho fatto questa prova :
pagina json.php
PHP:
<?php

echo '[{"0":"1","id":"1","1":"prima slide","titolo":"prima slide","2":"prima slide dello slideshow","descrizione":"prima slide dello slideshow","3":"http:\/\/miosito.org\/img_s_show\/slide1.png","indirizzo_foto":"http:\/\/miosito.org\/img_s_show\/slide1.png"}] ';
manda in echo il json

pagina index.hrml
HTML:
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
    $.ajax({
        url: 'json.php',
        dataType: "json",
        success: function (dati) {
            $(dati).each(function (i, e) {
                console.log(i);
                console.log(e.indirizzo_foto);
            });
        }
    });
</script>
scrive correttamente in console l'indice 0 e l'url dell'immagine.
Ricontrolla bene tutto il tuo codice e prova anche questo semplice esempio con il tuo file php
 
  • Like
Reactions: VAik
ok, allora ho trovato....usciva il problema sempre per via del DataType del metodo $.ajax.
Se imposto "json" ora va bene.
con
console.log(e.indirizzo_foto);
vedo appunto l'indirizzo dell'immagine

invece con
console.log(e);

vedo l'oggetto
Codice:
Object {0: "1", 1: "prima slide", 2: "prima slide dello slideshow", 3: "http://miosito.org/img_s_show/slide1.png", id: "1", titolo: "prima slide", descrizione: "prima slide dello slideshow", indirizzo_foto: "http://miosito.org/img_s_show/slide1.png"}

Levando dal file .php il LIMIT 1 alla query, vedo tutte e tre gli oggetti

QUINDI

diciamo che legge bene il file esterno.

EDIT:forse funziona anche con le slide
 
Ultima modifica:
bene, puoi togliere i log e il limit 1 , dovrebbe funzionare.
 
  • Like
Reactions: VAik
si quando ho modificato per l'ennesima volta dicendo che funzionava, mi riferivo proprio a questo fatto: che le slide scorrono.

Bellissimo, veramente bell'effetto. Devo limare qualcos'altro però penso che un grande passo è stato fatto.
GRAZIE GRAZIE GRAZIE
Per ora mi fermo perchè è arrivato il momento tanto atteso del pranzo.
Dopo vedo come migliorare l'effetto.
 
  • Like
Reactions: criric

Discussioni simili