Back to top

Autore Topic: [RISOLTO]Query Insert in joomla 2.5 in tabelle creata a mano  (Letto 10250 volte)

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Ciao a tutti,

Sto cercando di inserire l'indirizzo ip dei visitatori per un modulo che sto sviluppando, ma non riesco ad inserire alcun record in una tabella creata da me.

Ho cercato ovunque ma tutti gli esempi che ho letto non hanno funzionato.

Riporto il codice che sto utilizzando in una funzione.

Codice: [Seleziona]
$db = JFactory::getDBO();
           
      $query = $db->getQuery(true);
      $query = "INSERT INTO #__visit_counter (ip) VALUES (".$ip.")";
      $db->setQuery($query);
      $db->query();

Vi ringrazio anticipatamente per le risposte è urgente grazie mille ancora
« Ultima modifica: 14 Mar 2013, 16:27:20 da brando16 »

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #1 il: 13 Mar 2013, 11:17:53 »
http://docs.joomla.org/Accessing_the_database_using_JDatabase/2.5#Inserting_a_Record

Qui trovi tutto quello che ti serve per inserire un record.

Comunque penso che il tuo problema dipende dal fatto che non quoti l'ip cioe l'indirizzo deve avere un apice prima e dopo xche suppongo che tu lo salvi come varchar nel database e non gli piace un value senza apici
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #2 il: 13 Mar 2013, 11:19:09 »
Inoltre se non fai dei controlli sull'ip rischi di riempire la tabella se hai un numero discreto di visite, cioe per come sembra io se carico 1000 volte una pagina mi inserisce 1000 volte il mio indirizzo ip
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #3 il: 14 Mar 2013, 10:12:18 »
Ciao Simone83,

certamente infatti prima di fare quell'insert c'è una if che controlla il valore del check ip cioè una funzione che estrae tutti gli ip e controlla se l'ip del visitatore esiste se no mi restituisce 0 altrimenti 1.

Ma ho seguito quella guida e non riesce ad inserire nulla non da errori di nessun tipo e nessuna info che possa aiutarmi!!!

Sto impazzendo....

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #4 il: 14 Mar 2013, 10:17:34 »
ip che tipo di dato prevede nel mysql?
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #5 il: 14 Mar 2013, 13:38:16 »
io lo passo come stringa e il campo è un varchar limitato a 15 di lunghezza.

Pensi che sia il tipo di dato sbagliato?

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #6 il: 14 Mar 2013, 14:00:01 »
posta come li inserisci ora cosi ti so dire, magari potresti allegare un esportazione della tabella
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #7 il: 14 Mar 2013, 14:03:27 »
comunque potresti essere in ipv6 che non ha 16 caratteri, comunque gli indirzzi ip andrebbero salvati come interi con $ipl=sprintf('%u', ip2long($ip));
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #8 il: 14 Mar 2013, 14:10:45 »
allora la tabella è fatta da due colonne ID e IP la prima è primary ed è int la seconda è varchar 15.

ti inserisco il codice:
Codice: [Seleziona]
function insert($ip) {           
      $db = JFactory::getDBO();
      $visita = new JObject();
      $visita->ip = $ip; 
      $result = $db->insertObject('#__visit_counter', $visita);
}
La variabile $ip la prendo con la variabile server del php ($ip= $_SERVER['REMOTE_ADDR'];)

aiutami ti pregooo!!!

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #9 il: 14 Mar 2013, 14:23:54 »
Ci sto provando, comunque
1 prova a mettere varchar 100, un numero a caso
2 sei sicuro che la colonna id abbia auto increment settato?
3 l'ip prendilo con eusta funzione

Codice: [Seleziona]
function getVisitorIP() {
    $ip = "0.0.0.0";
    if( ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) && ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif( ( isset( $_SERVER['HTTP_CLIENT_IP'])) && (!empty($_SERVER['HTTP_CLIENT_IP'] ) ) ) {
        $ip = explode(".",$_SERVER['HTTP_CLIENT_IP']);
        $ip = $ip[3].".".$ip[2].".".$ip[1].".".$ip[0];
    } elseif((!isset( $_SERVER['HTTP_X_FORWARDED_FOR'])) || (empty($_SERVER['HTTP_X_FORWARDED_FOR']))) {
        if ((!isset( $_SERVER['HTTP_CLIENT_IP'])) && (empty($_SERVER['HTTP_CLIENT_IP']))) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
    }
    return $ip;
    }
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #10 il: 14 Mar 2013, 14:50:37 »
La funzione funziona benissimo la sto usando funziona come la stringa del server però fa più controlli mi piace.

Varchar impostato a 150
ID sicuro che ha autoincrement e primary

ma non inserisce nulla.

Ora ho provato al posto della variabile ip ho inserito una stringa ma nulla non inserisce nulla

non riesco a capire sono su joomla 2.5
 

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #11 il: 14 Mar 2013, 14:53:17 »
ma id è maiuscolo o minuscolo?
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #12 il: 14 Mar 2013, 15:04:47 »
tutto minuscolo sia ip che id

ma non è che devo settare qualcosa in joomla! tipo accetta script esterni?

Mi sa venedo in mente che potrebbe essere qualche permesso anche se mi sembra impossibile anche perchè io essendo in locale sto lavorando da root quindi ho tutti i permessi

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #13 il: 14 Mar 2013, 15:06:44 »
xche script esterni? è un modulo creato secondo gli standard? sei sicuro che c'entri in quella funzione?
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #14 il: 14 Mar 2013, 15:14:57 »
Script esterni era una mia paranoia, si è il modulo hello world modificato con le funzioni che mi interessano, quindi ho una cartella mod_conta e dentro tutti i file helper mod_conta.php mod_conta.xml index e la cartella tmpl dove dentro c'è il file default.php.


ora in mod_conta.php richiamo la funzione inserendo la classe dell'helper e la funzione per la precisione


modHelloWorldHelper::insert($ip);


ti inserisco tutto il file mod_conta.php cosi puoi seguirmi meglio.
Codice: [Seleziona]

defined( '_JEXEC' ) or die( 'Restricted access' );


require_once( dirname(__FILE__).DS.'helper.php' );


$ip= modHelloWorldHelper::getVisitorIP();
 
//$hello = modHelloWorldHelper::getHello( $params );


$controllo = modHelloWorldHelper::check($ip);


if($controllo==1) {
        $visite = modHelloWorldHelper::counter();
}
else {
     $id = modHelloWorldHelper::insert($ip);
     $visite = modHelloWorldHelper::counter();


}
require( JModuleHelper::getLayoutPath( 'mod_conta' ) );
?>

[size=78%]vedi se trovi qualcosa che non va, considera che la tabella è vuota e quindi il controllo non è mai 1. la cosa più strana è che la funzione counter() effettua una select count degli id e mi restituisce il valore corretto!!! mentre l'insert non va ma allucinante [/size]

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #15 il: 14 Mar 2013, 15:17:58 »
pubblica anche l'helper completo vai, perche io 5 minuti fa ho fatto una cosa molto piu complessa che utilizza la stessa funzione e non ho avuto nessun problema
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #16 il: 14 Mar 2013, 15:29:51 »
Codice: [Seleziona]



<?php
class modHelloWorldHelper
{
    function 
getVisitorIP() {
    
$ip "0.0.0.0";
    if( ( isset( 
$_SERVER['HTTP_X_FORWARDED_FOR'] ) ) && ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) {
        
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif( ( isset( 
$_SERVER['HTTP_CLIENT_IP'])) && (!empty($_SERVER['HTTP_CLIENT_IP'] ) ) ) {
        
$ip explode(".",$_SERVER['HTTP_CLIENT_IP']);
        
$ip $ip[3].".".$ip[2].".".$ip[1].".".$ip[0];
    } elseif((!isset( 
$_SERVER['HTTP_X_FORWARDED_FOR'])) || (empty($_SERVER['HTTP_X_FORWARDED_FOR']))) {
        if ((!isset( 
$_SERVER['HTTP_CLIENT_IP'])) && (empty($_SERVER['HTTP_CLIENT_IP']))) {
            
$ip $_SERVER['REMOTE_ADDR'];
        }
    }
    return 
$ip;
    }
            
    function 
check($ip) {
       
//
       
$ips = array();      
       
$db JFactory::getDbo();
       
$query $db->getQuery(true);
       
$query->select('ip');      
       
$query->from('#__visit_counter');
       
$db->setQuery($query);
       
$rows $db->loadObjectList();
        
        foreach(
$rows as $row){
         
//
         
$ips[]=$row->ip;
         
        }
        
$check=array_search($ip,$ips);
        
       if(
$check >= 0)
          {
$checkip=1;}
       else{ 
$checkip=0;}   
          
          return 
$checkip;
       }  
       
       function 
counter() {
       
$db JFactory::getDbo();
       
$query $db->getQuery(true);
       
$query"SELECT count(id) as cont from #__visit_counter";
       
$db->setQuery($query);
       
$tot $db->loadResult();
       
        return 
$tot;
      }


      function 
insert($ip) {           
      
$db JFactory::getDBO();
      
$visita = new JObject();
      
$visita->ip $ip;  
      
$result $db->insertObject('#__visit_counter'$visita);
      }
}
?>







beato te io sto perdendo i capelli non ci credo ora se riesco ti posto anche la tabella cosi hai il modulo totalmente da te


Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #17 il: 14 Mar 2013, 15:51:48 »
Simone ho trovato l'errore il problema è sul controllo che faccio sull'ip cioè array_search quindi non entrava mai nel ciclo di insert ora lo inserisce perfettamente quindi la funzione di insert è perfetta ma non capisco come controllare questo benetto array di ip con l'ip che ricavo dal visitatore!!!


ora controllo meglio la funzione.

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #18 il: 14 Mar 2013, 15:56:08 »
Stavo scrivendo qusta risposta

Va beh oggi ho deciso che volevo buttare via un po di tempo e l'ho riprodotto in locale, ma non ti sei reso conto che quella funzione non viene mai richiamata?

Il problema non è li ma in check che non si capisce che avresti voluto fare, ti sei complicato di molto la vita e male direi

se la cambi con

Codice: [Seleziona]
function check($ip) {
       //
       $ips = array();     
       $db        = JFactory::getDbo();
       $query    = $db->getQuery(true);
       $query->select('id');     
       $query->from('#__visit_counter');
       $query->where('ip = '.$db->quote($ip));
       $db->setQuery($query);
       
       return $db->loadResult();
       
       }

che ti serve fare un array search dopo un ciclo quando puoi ottere se l'ip è presente con una query semplicissima.

poi cambia l'if

Codice: [Seleziona]
if($controllo) {
   
        $visite = modHelloWorldHelper::counter();
}
else {
   

     $id = modHelloWorldHelper::insert($ip);
     $visite = modHelloWorldHelper::counter();


}

BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #19 il: 14 Mar 2013, 16:27:00 »
Hai ragione Simone83 ma considera che è il mio primo modulo che sto sviluppando e non mi ero reso conto che non richiamava la funzione, per la query si giustamente molto più veloce e semplice sei un grande grazie mille.


metto risolto

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:[RISOLTO]Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #20 il: 14 Mar 2013, 16:29:16 »
di nulla, ciao
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline brando16

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:[RISOLTO]Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #21 il: 14 Mar 2013, 17:39:46 »
Simone oggi ti perseguito giuro che è l'ultima domanda:


ma come faccio ad installare il modulo facendogli creare la tabella ho messo nel file xml install con il path sul sql ma non lo fa!!!


ti metto il file xml
Codice: [Seleziona]

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0" client="site">
    <name>Contatore Visite</name>
    <author>Andrea Manca</author>
    <version>1.0.0</version>
    <description>Un semplice contatore visite e utenti online.</description>
    <install>
        <sql>
     <file charset="utf8" driver="mysql">install.sql</file>
    </sql>
    </install>
    <uninstall>
    <sql>
     <file charset="utf8" driver="mysql">uninstall.sql</file>
    </sql>
</uninstall>
    <files>
        <filename>mod_contatore.xml</filename>
        <filename module="mod_contatore">mod_contatore.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
        <filename>sql/install.sql</filename>
        <filename>sql/unistall.sql</filename>
    </files>
    <config>
    </config>
</extension>


giuro che ti metto come autore anche a te!!!  ;) ;D

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:[RISOLTO]Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #22 il: 14 Mar 2013, 17:43:12 »
non ne ho idea. non ho mai provato e non so neanche se si puo fare, cerca su google
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

mau_develop

  • Visitatore
Re:[RISOLTO]Query Insert in joomla 2.5 in tabelle creata a mano
« Risposta #23 il: 14 Mar 2013, 19:08:52 »
ma anche tutto quel casino per controllare l'ip è inutile così come è inutile vedere se viene da un proxi col forwarded... l'unico è il remote address.

Una volta J aveva funzionalità di filtro... ma in mancanza di queste puoi usare quella di php filter() che ha la possibilitù di validare gli ip.
poi ci sono gli ipv4 e gli ipv6...

piuttosto puoi fare una richiesta inversa per il dns

 



Web Design Bolzano Kreatif