Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Inserire $_SERVER['QUERY_STRING'] sul database MySQL

    Salve, ho un problema che abbiamo analizzato in 4 ma che non riusciamo a capire da cosa deriva.

    ho il mio script, che è il seguente:

    Codice PHP:
    $ora time();
    $name $_SESSION['username'];
    $ip $_SERVER['REMOTE_ADDR'];
    $varget $_SERVER['QUERY_STRING'];

    $search "SELECT ip FROM sessions WHERE ip='$ip'";
    echo 
    $search;
    $search2 $db->query($search);
    $conta $db->conta($search2);
      if (
    $conta==0
      {
         
    $insertvis "INSERT INTO sessions (ip, username, location, time) VALUES ('$ip', '$name', '$varget', '$ora')";
         
    $insertvis2 $db->query($insertvis);
         echo 
    $insertvis;
      }
      else
     {
        
    $updatevis "UPDATE sessions SET location='$varget', time='$ora', username='$name'";
        
    $updatevis2 $db->query($updatevis);
        echo 
    $updatevis;
     } 
    Funziona tutto alla perfezione tranne che per il campo "location" che rimane sempre vuoto.

    Inoltre ho provato diversi casi:
    1. Se inserisco una stringa qualsiasi (es. 'pippo') FUNZIONA
    2. Se inserisco una stringa simile a una variabile get (es. 'page=ciao') FUNZIONA
    3. Se printo la variabile $_SERVER['QUERY_STRING'] FUNZIONA
    4. Se printo le query con la variabile $_SERVER['QUERY_STRING'] all'interno FUNZIONA

    Divertitevi a capire cosa nn va



    Grazie anticipatamente

    Terence

  2. #2
    Le variabili vanno inserite come variabili non come stringhe:

    $updatevis = "UPDATE sessions SET location='".$varget."', time='".$ora."', username='".$name."'";

    vedrai che adesso funziona


  3. #3
    Nell'UPDATE manca il WHERE (ip = '$ip').
    Poi hai provato ad eseguire da phpmyadmin l'output di echo $insertvis; ?

  4. #4
    silverwings, grazie per il suggerimento, questa ancora la provavo

    cubalibre810, il where c'è ma per fretta nn l'ho postato perchè avevo fatto delle modifiche al codice e nn le ho annullate prima di postarlo qui.

    Comunque printando la stringa appare tutto, se printo la query appare tutto, ma nel database SOLAMENTE IL CAMPO LOCATION rimane vuoto

  5. #5
    Ho provato la soluzione postata da silverwings

    Stringa printata:

    Codice PHP:
    echo"$_SERVER['QUERY_STRING']"
    Risultato:

    codice:
    page=chat&room=musica
    Query printata:

    Codice PHP:
    $updatevis "UPDATE sessions SET location='".$varget."', time='".$ora."', username='".$name."' WHERE ip='".$ip."'";
    echo 
    $updatevis
    Risultato

    codice:
    UPDATE sessions SET location='page=chat&room=musica', time='1212693718', username='visitatore' WHERE ip='127.0.0.1'
    In phpmyadmin la query funziona, anche inserendo una normale stringa di testo al posto di $_SERVER['QUERY_STRING'] tutto funziona, però quando vado a inserire questa variabile nella query il risultato è il campo 'location' vuoto come nell'immagine


  6. #6
    ho provato lo script isolato, inserendo solo la query_string nel database e tutto funziona alla perfezione, invece quel codice postato prima da problemi...

  7. #7
    ho provato anche questa soluzione

    Codice PHP:
    define("STRINGA"$_SERVER['QUERY_STRING']);
    ...
    ...
    $insertvis "INSERT INTO sessions (ip, username, location, time) VALUES ('".$ip."', '".$name."', '".STRINGA."', '".$ora."')";
    ...
    ...
    $updatevis "UPDATE sessions SET location='".STRINGA."', time='".$ora."', username='".$name."' WHERE ip='".$ip."'"
    ma il campo rimane vuoto.

    Ho provato anche una query a parte

    Codice PHP:
    $query9 "UPDATE sessions SET location = '".$varget."' WHERE ip='".$ip."'"
    $query10$db->query($query9); 
    echo 
    $varget
    L'echo alla fine mi conferma che nella stringa $varget c'è il valore che effettivamente dovrei scrivere nel database.

    Ma perchè non lo fa?

    Se la query di prima diventa così

    Codice PHP:
    $query9 "UPDATE sessions SET location = 'ciao mondo' WHERE ip='".$ip."'"
    $query10$db->query($query9); 
    echo 
    $varget
    Nel database avrò:



    Se scrivo SET location = 'page=chat' (una stringa simile a quella che mi dovrebbe restituire la variabile)

    ottengo:



    Concludo con questo

    Codice PHP:
    <?php 
    require_once("main.php");  
    $varget $_SERVER['QUERY_STRING']; 
    echo 
    $varget;  
    $insertdb "INSERT INTO sessions (location) VALUES ('".$varget."')"
    $insertdb2 $db->query($insertdb); 
    echo 
    $insertdb;  
    ?>
    se a questa pagina invio delle variabili via GET, lo script SCRIVE PERFETTAMENTE la stringa nel DB.

    Da solo funziona, perchè in quell'altro script no?

    Premetto che si trovano nella stessa cartella, il codice scritto è lo stesso, ma uno funziona e uno no...

  8. #8
    Forse hai dei bug nelle funzioni che hai creato perchè ho replicato il tuo db e il tuo codice in locale e funziona.

    Prova ad eseguire tutto con mysql_query e ricorda che query_string ha degli / che potrebbero creare problemi.

  9. #9
    Avevo già provato a rimpiazzare le funzioni e a fare i vari controlli sulla stringa (addslashes, htmlspecialchars ecc.) ma niente di buono.

    Mi sembra di capire che la stringa get deve essere mandata direttamente alla pagina in cui risiede lo script, io invece lo script l'ho inserito attraverso un require_once() nell'index.php

    Potrebbe essere questo il problema

  10. #10
    Ho risolto! era uno script Ajax (che effettuava il reload per la chat in php) che mi creava problemi.

    Adesso devo trovare la soluzione per bypassarlo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.