prototip ajax düzgün sorgu yürütme değil

2 Cevap php

Yani prototip kullanarak başlatmaya karar verdi ve burada benim ilk soru. Ben tek bir kayıt var güncelleştiren bir php sayfasına bir ajax isteği göndermek için çalışıyorum. Ben elle bunu zaman (örn: adres + parametreleri yazmadan gayet iyi çalışıyor ancak ben javascript bu kodu kullandığınızda:

var pars = 'trackname=' + track + '&tracktime=' + time;

new Ajax.Request('php/setSongTime.php', {
method: 'get',
parameters: pars,
onSuccess: function(transport){
  var response = transport.responseText || "no response text";
  alert("Success! \n\n" + response);
  },
onFailure: function(){ alert('Something went wrong...') }

OnSuccess yangınlar ve görüntüler php gelen doğru bilgileri, ancak güncelleştirme yapılmaz. Ne php döner UPDATE dize, yani parametreleri kontrol ediyorum ve iyi görünüyorlar. Herkes bir sorun görüyor mu? Teşekkürler ...

Toplam javascript:

/*This file handles all the user-based computations*/

//variable declarations to be used throughout the session
var untimedSongArray = [];

function beginProcess(){

new Ajax.Request('php/getUntimed.php', {
method: 'get',
onSuccess: function(transport){
  var response = transport.responseText || "no response text";
  untimedSongArray = response.split("+");  
  alert(response);
  getFlashMovie("trackTimer").timeThisTrack(untimedSongArray[0]); 
  //alert("Success! \n\n" + response);
  //var html = response;
  },
onFailure: function(){ alert('Something went wrong...') }

});
}

function getFlashMovie(movieName) {
  var isIE = navigator.appName.indexOf("Microsoft") != -1;
  return (isIE) ? window[movieName] : document[movieName];  }

function setSongTime(track, time){
  alert("track " + track + " has a time of " + time);
  //$.get("php/setSongTime.php", { trackname: track, tracktime: time } );
  var pars = 'trackname=' + track + '&tracktime=' + time;

  new Ajax.Request('php/setSongTime.php', {
  method: 'get',
  parameters: pars,
  onSuccess: function(transport){
    var response = transport.responseText || "no response text";
    alert("Success! \n\n" + response);
    },
  onFailure: function(){ alert('Something went wrong...') }
  });
}

Toplam php kodu:

<?php

//turn on error reporting
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
//header('Content-Type: text/xml');

/////////////Main script
//pull variables
//need to do some error checking here
$trackname = ($_GET['trackname']);
$tracktime = ($_GET['tracktime']);

//remove leading track information
$trackname = str_replace('../music_directory/moe/moe2009-07-18/', '', $trackname);
$trackname = str_replace('.mp3', '', $trackname);
//echo $trackname;

//connect with database
$con = mysql_connect("localhost","root","");
if(!$con){
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("musicneverstopped", $con);
//end connecting to database

//////////////////////////////////////////

//update given song time
$sql = "UPDATE songs SET length = ".$tracktime." WHERE unique_song_id = ".$trackname;
echo $sql;
mysql_query("UPDATE songs SET length = '$tracktime' WHERE unique_song_id = '$trackname'");

//error check
//if(!$attempt){
//die(mysql_error());
//}

//////////////////////////////////////////

//close database connection
mysql_close($con);//close mysql connection


?>

Herkes herhangi bir başarısız hataları görmek?

2 Cevap

Aslında mysql_query ($sql daha sonra yerine iki kez sorgu dışarı yazma, sorgu içine geçmek saklayın) çalıştırmak aynı SQL yankılanıyordu sahipsiniz.

Sonra sunucu üzerinde mysql komut satırında tepki directly içinde yankılandı alır sorguyu çalıştırmayı deneyin ve neler olacağını görün.


Ayrıca, sadece SQL sorguları kaçan önemini Max yankı, ben sen değil sadece SQL kalanı ile kullanıcı girişi birleştirerek daha, sorguda bind değişkenleri kullanmanız gereken giriş sanitisation eklersiniz.

Böyle bir şey değişkenler uygun bir SQL enjeksiyon krizi önlemek için kaçtı sağlamak olacaktır.

$sql = "UPDATE songs SET length = '%s' WHERE unique_song_id = '%s'";
$query = sprintf(
    $sql,
    mysql_real_escape_string($tracktime),
    mysql_real_escape_string($trackname)
);
mysql_query($query);

Buldum! Nedense kesinleşmiş $ eser ismi önce ekstra bir boşluk başlamıştı. ltrim sağa kadar sabit. Herkes ve güvenlik özellikleri belirtilen olanlar sayesinde teşekkürler. Ben kesinlikle bu uygulamak gerekir. Dan