[RISOLTO]Errore caricamento file php

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
Salve seguo questo forum da molto, è la prima volta che posto una mia discussione, ho un problema con il caricamento di uno script php, spero di riuscire a farmi capire. Dunque ho il file index.php con questa porzione di codice:
PHP:
<?php 

include('../../connect.php');

$result = mysql_query("SELECT * FROM articoli")
or die(mysql_error());

while($row = mysql_fetch_array( $result )) {

;?>
                         
                       
<div>
<h3><?php echo $row['titoloArt'];?></h3>
<p><?php echo substr($row['contenutoArt'],0,200);?></p>

<?
echo '<a href="leggi_articolo.php?id='.$row['id'] .'">'. $row['titoloArt'] .'</a>';
?>
</div>

<?
}
;?>
il file leggi_articolo.php :

Codice:
<div id="articolo" class="col-md-9"></div>
un file blog.js (richiamato in leggi_articolo.php) :
Codice:
<script>
$( document ).ready(function(){
        if($('#articolo').length){
            $('#articolo').load('asset/js/articolo.php');
        }
    });
</script>
infine il file articolo.php:

PHP:
<?php

// connessione al database
include('../../connect.php');

// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sia numerico/maggiore di 0)
if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0)
{
// query db
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM articoli WHERE id=$id")
or die(mysql_error());
$row = mysql_fetch_array($result);

// verifica che l' 'id' corrisponda a una riga nel database
if($row)
{

// ottiene i dati dal db
$titoloArt = $row['titoloArt'];
$contenutoArt = $row['contenutoArt'];
}
else
// se non corrisponde visualizza il risultato
{
echo "Nessun risultato!";
}
}
else
// se l' 'id' nell'URL non è valido, o se non vi è alcun valore di 'id', visualizza un errore
{
echo 'Errore!';
}

?>

<h2><? echo $titoloArt ;?></h2>
<p><? echo $contenutoArt ;?></p>
Quando clicco sul link presente in index.php per leggere l'articolo selezionato mi da errore (
else
// se l' 'id' nell'URL non è valido, o se non vi è alcun valore di 'id', visualizza un errore
{
echo 'Errore!';
}
).

Chiedo scusa in anticipo se ho violato qualche regola del forum, se sono stato poco chiaro chiedete pure di cosa avete bisogno per capire meglio il mio problema.

Grazie in anticipo per il vostro aiuto.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
non ho capito bene, come output ti da Errore o la parte di script dall'else?
comunque a parte questo non vedo errori di sintassi salvo che utilizzi gli short tag php, usa sempre il tag completo <?php e soprattutto non mischiarli

per verificare meglio ti consiglio di mettere un var_dump per verificare il get
PHP:
// connessione al database
include('../../connect.php');
var_dump($_GET['id']);
// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sia numerico/maggiore di 0)
if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0){
    // query db
    //.................
e guarda che riporti l'id giusto che hai selezionato

un altro consiglio abbandona le vecchie istruzioni php mysql_xyz (deprecate) e passa alle mysqli_xyz
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
ciao
non ho capito bene, come output ti da Errore o la parte di script dall'else?
comunque a parte questo non vedo errori di sintassi salvo che utilizzi gli short tag php, usa sempre il tag completo <?php e soprattutto non mischiarli

per verificare meglio ti consiglio di mettere un var_dump per verificare il get
PHP:
// connessione al database
include('../../connect.php');
var_dump($_GET['id']);
// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sia numerico/maggiore di 0)
if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0){
    // query db
    //.................
e guarda che riporti l'id giusto che hai selezionato

un altro consiglio abbandona le vecchie istruzioni php mysql_xyz (deprecate) e passa alle mysqli_xyz
Ciao e grazie per la risposta, dunque mi da errore "Errore!" riferito a quella parte di else che ho postato, in pratica non legge l'id, ho corretto tag php come mi hai suggerito ma questo non ha risolto il problema, inserendo il var_dump come me lo hai scritto tu mi da "NULL" , scrivendo
PHP:
var_dump($_GET);
exit;
il risultato è "array(0) { }" l'id dell'articolo è 1.

Un'ultima cosa, all'inizio il codice era tutto su un unico file "leggi_articolo.php" e funzionava perfettamete, il problema è sorto nel momento in cui ho separato il codice su due file con caricamento tramite jQuery.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
questa non la capisco: da null, ma se metti l'exit da array?
comunque fai una prova, in index selezioni l'articolo
PHP:
echo '<a href="leggi_articolo.php?id='.$row['id'] .'">'. $row['titoloArt'] .'</a>';
chiamando la pagina leggi_articolo e trasmettendo l'id via get l'id
prova a farlo semplicemente senza jquery, se funziona allora la colpa è lì
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
ciao
questa non la capisco: da null, ma se metti l'exit da array?
comunque fai una prova, in index selezioni l'articolo
PHP:
echo '<a href="leggi_articolo.php?id='.$row['id'] .'">'. $row['titoloArt'] .'</a>';
chiamando la pagina leggi_articolo e trasmettendo l'id via get l'id
prova a farlo semplicemente senza jquery, se funziona allora la colpa è lì
Ciao, se non passo via jQuery funziona, ma dovrei mettere lo script php nella pagina leggi_articolo.php ma è proprio questo che sto cercando di evitare, nonostante l'id lo prende dalla url, in qualche modo questo passaggio fa perdere a $_GET il valore id eppure la url è giusta. Forse inserendo in articolo.php uno script js che recuperi l'id dalla url e lo passi a php magari risolvo.
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
Dunque ho modificato il codice in questo modo: nel file articolo.php
PHP:
<?php

// connessione al database
include('../../connect.php');

// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sia numerico/maggiore di 0)

?>

<script type="text/javascript">
   
    (function($) {


    $.urlParams = function(name){
   
        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
       
        if (!results) { 
            return 0; 
        }
       
        return results[1] || 0;
        };

        var id = $.urlParams('id');

        })(jQuery);

</script>

<?php

// query db
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM articoli")
or die(mysql_error());
$row = mysql_fetch_array($result);




// verifica che l' 'id' corrisponda a una riga nel database
if($row)
{

// ottiene i dati dal db
$titoloArt = $row['titoloArt'];
$contenutoArt = $row['contenutoArt'];
}
else
// se non corrisponde visualizza il risultato
{
echo "Nessun risultato!";
}

?>

<h2><?php echo $titoloArt ;?></h2>
<p><?php echo $contenutoArt ;?></p>
Adesso lo script js preleva il valore di id dalla url che è giusta e lo passa a get, funziona o quasi, il problema ora è che mostra sempre l'articolo con id=1 nonostante la url riporti un altro valore dell'id.

Qualche suggerimento per favore?
GRazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, al click cambi pagina per andare in leggi_articolo.php che al suo caricamento richiama in ajax la pagina articolo.php, non ha molto senso, in ogni caso devi ripassare i parametri anche alla pagina articolo.php, puoi semplicemente fare cosi :
Codice:
$('#articolo').load('asset/js/articolo.php?id=<?php echo $_GET['id']; ?>');
sarebbe più sensato caricare l'articolo direttamente nella pagina leggi_articolo.php, ma probabilmente non ho capito la struttura che hai
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
non sono un esperto di ajax/jq, ma anch'io non capisco a che serva, o richiamata nella stessa o un'altra es con il target _blank
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
la forza di ajax è che ti permette di eseguire del codice php in background senza bisogno di ricaricare la pagina.
Guarda questo esempio che avevo postato qualche giorno fa.
Ogni volta che interagisci con gli elementi del form viene inviata la richiesta ad una pagian php che stampa la REQUEST
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
si, ma non so, se fai in unica pagina hai ragione (qualcuno senza far nomi mi ha corretto giustamente una pagina di ricerca), ma se fai in due pagine diverse la chiamata viene caricata comunque, o sbaglio
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
Ciao, al click cambi pagina per andare in leggi_articolo.php che al suo caricamento richiama in ajax la pagina articolo.php, non ha molto senso, in ogni caso devi ripassare i parametri anche alla pagina articolo.php, puoi semplicemente fare cosi :
Codice:
$('#articolo').load('asset/js/articolo.php?id=<?php echo $_GET['id']; ?>');
sarebbe più sensato caricare l'articolo direttamente nella pagina leggi_articolo.php, ma probabilmente non ho capito la struttura che hai
Buona sera Ciric e grazie per l'interessamento, dunque la soluzione che mi hai postato fa riferimento all'ultimo file articolo.php che ho postato o a quello originale? comunque in entrambi i casi non funziona... Nell'ultimo file articolo.php che ho postato qui :

PHP:
<?php

// connessione al database
include('../../connect.php');

// ottiene il valore 'id' dall'URL (se esiste), assicurandosi che sia valido (controlla che sia numerico/maggiore di 0)

?>

<script type="text/javascript">
   
    (function($) {


    $.urlParams = function(name){
   
        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
       
        if (!results) { 
            return 0; 
        }
       
        return results[1] || 0;
        };

        var id = $.urlParams('id');
        alert(id);

        })(jQuery);

</script>

<?php

// query db
$id = $_GET['id'];
$query = mysql_query("SELECT * FROM articoli");
$row = mysql_fetch_array($query);




//verifica che l' 'id' corrisponda a una riga nel database
if($row)
{

// ottiene i dati dal db
$titoloArt = $row['titoloArt'];
$contenutoArt = $row['contenutoArt'];
}
else
// se non corrisponde visualizza il risultato
{
echo "Nessun risultato!";
}

?>

<h2><?php echo $titoloArt ;?></h2>
<p><?php echo $contenutoArt ;?></p>
Quest'ultima soluzione sembra funzionare se non fosse che nonostante lo script js riconosca il valore esatto di ID l'articolo mostrato è sempre lo stesso (cioè quello con id=1).

Per chiarirvi la situazione, in altri casi sarebbe più semplice come dite voi caricare tutto in leggi_articolo.php e non ci sarebbero nessun problema, infatti in questo modo tutto funzionerebbe senza intoppi e questo post non esisterebbe nemmeno :) Ma il mio progetto prevede che nella pagina leggi_articolo.php l'articolo venga richiamato attraverso un div con la classe/id della funzione. Spero di essere stato abbastanza chiaro :D
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
Dunque ho provato a rilevare la url letta dallo script php presente in articolo.php la url che legge è tipo questa:

http://sito.it/sviluppo/asset/js/articolo.php mentre in realtà è :

http://sito.it/sviluppo/leggi_articolo.php?id=2

se invece in leggi_articolo.php metto:

<?php include('asset/js/articolo.php')>

funziona bene e la url letta è quella corretta, ora perchè tutto ciò? la funzione .load di jQuery non è uguale a quella include di php?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
le istruzioni php vengono interpretate solo dai file con estensione .php. ho sbagliato io a non specificarti di metterlo nel file leggi_articolo.php. Sono appena rientrato da una giornata di lavoro sfigatissima, domani con calma rileggo il tuo codice.
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
le istruzioni php vengono interpretate solo dai file con estensione .php.
Si in realtà nemmeno io ci ho pensato a questa cosa, comunque alla fine l'ho messo in leggi_articolo.php, funziona anche se non è il risultato che stavo cercando, per ora mi accontento di questo altrimenti rimango giornate intere, più in la vedrò di trovare un'altra soluzione grazie a tutti per l'aiuto. ;)

P.S. come posso mettere risolto alla discussione?
 

antonio_farella

Nuovo Utente
8 Nov 2016
12
1
3
35
Ecco la migliore soluzione che ho trovato:
PHP:
<div id="articolo" class="col-md-9" data-articolo-id="<?php echo $_GET['id'] ?>"></div>
poi nella funzione di blog.js:

Codice:
$( document ).ready(function(){      
   if($('#articolo').length){
      var id = $('#articolo').attr('data-articolo-id'); // spero si prenda così :-)
      $('#articolo').load('asset/js/articolo.php?id='+id);        
   }    
});
</script>
[/QUOTE]

Suggeritami su un altro forum, a questo punto posso mettere risolto, come posso fare?