Dinamicamente cambiamento query MySQL all'interno di un file PHP utilizzando jQuery .post?

StackOverflow https://stackoverflow.com/questions/2716838

  •  01-10-2019
  •  | 
  •  

Domanda

provando questo per un bel po 'di tempo e ho bisogno di aiuto. Fondamentalmente ho un file PHP che di database query e voglio cambiare la query basata su un nome di login degli utenti.

Che cosa succede sul mio sito è che un utente accede con Twitter OAuth e io in grado di visualizzare i propri dati (nome utente Twitter, ecc). Ho un database che l'utente ha aggiunto informazioni da e io quello che vorrei che accada è quando l'utente accede con Twitter OAuth, ho potuto utilizzare jQuery per prendere gli utenti nome utente e la aggiornare la query mysql per mostrare solo i risultati in cui il user_name = quel nome particolari utenti.

Al momento la query mysql è:

"SELECT * FROM markers WHERE user_name = 'dave'"

Ho provato qualcosa di simile:

"SELECT * FROM markers WHERE user_name = '$user_name'"

E altrove nel file PHP devo $ user_name = $ _POST [ 'nome_utente'] ;. In un file separato (quello in cui l'utente viene reindirizzato a dopo che il log-in attraverso Twitter) ho qualche jQuery in questo modo:

$(document).ready(function(){
$.post('phpsqlinfo_resultb.php',{user_name:"<?PHP echo $profile_name?>"})});

$ nome_profilo è stato definito in precedenza su quella pagina.

So che sto chiaramente facendo qualcosa di sbagliato, sto ancora imparando. C'è un modo per ottenere ciò che voglio utilizzare jQuery per inviare gli utenti nome utente per il file PHP per modificare la query mysql per visualizzare solo i risultati relativi all'utente che ha effettuato l'accesso. Ho incluso il file PHP con la query di seguito :

    <?php
// create a new XML document
//$doc = domxml_new_doc('1.0');
$doc = new DomDocument('1.0');

//$root = $doc->create_element('markers');
//$root = $doc->append_child($root);
$root = $doc->createElement('markers');
$root = $doc->appendChild($root);
$table_id = 'marker';
$user_name = $_POST['user_name'];
// Make a MySQL Connection
include("phpsqlinfo_addrow.php");
    $result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'")
    or die(mysql_error());
// process one row at a time
//header("Content-type: text/xml");
header('Content-type: text/xml; charset=utf-8');
while($row = mysql_fetch_assoc($result)) {
    // add node for each row
  $occ = $doc->createElement($table_id);
  $occ = $root->appendChild($occ);
  $occ->setAttribute('lat', $row['lat']);
  $occ->setAttribute('lng', $row['lng']);
  $occ->setAttribute('type', $row['type']);
  $occ->setAttribute('user_name', utf8_encode($row['user_name']));
  $occ->setAttribute('name', utf8_encode($row['name']));
  $occ->setAttribute('tweet', utf8_encode($row['tweet']));
  $occ->setAttribute('image', utf8_encode($row['image']));
} // while
$xml_string = $doc->saveXML();
$user_name2->response;
echo $xml_string;
?>

Questo è per l'uso con una google map mashup im cercando di fare. Molte grazie se mi può aiutare. Se la mia domanda non è abbastanza chiaro, si prega di dire e cercherò di chiarire per voi. Sono sicuro che questo è una semplice correzione, sto solo relativamente inesperto per farlo. Stato a questo per due giorni e sto esaurendo il tempo, purtroppo.

È stato utile?

Soluzione

In un primo momento, si dovrebbe sfuggire al $ _POST si sta inserendo direttamente alla query:

'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';

Come Erik suggerisce, non gettare dalla finestra il maggior numero di avvertimenti utili -. Molto probabilmente la risposta si aprirà a destra avanti poi

Ma quello che non sono molto sicuro circa è il modo in cui le tue opere mashup. Si potrebbe ottenere molto più facile se lo farete tutto il materiale all'interno del PHP stesso, omettendo javascript affatto. Si potrebbe anche voler controllare callback OAuth - dovrebbe darvi Twitter ID o il nome utente

.

Altri suggerimenti

Non c'è niente di sbagliato con:

$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");

Altri poi essere maturo per SQL injection - dovrebbe funzionare. Si consiglia di provare la query direttamente sul database e vedere se i risultati sono ciò che vi aspettate.

Consiglio anche di accendere la segnalazione degli errori durante lo sviluppo. Aggiungere le seguenti righe all'inizio del documento:

error_reporting(E_ALL);
ini_set("display_errors", 1);

e vi aiuterà a scoprire molti errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top