Zapytanie do MySQL z JQuery

0

Witam.

Jestem "zielony" jeśli chodzi o JQuery i php...
Mam napisaną prostą stroną do "katalogowania" produktów.
Jednak pojawił się problem ponieważ można kilka razy dodać towar o tym samym kodzie.
Próbuje zrobić skrypt który temu zapobiegnie.
Na podstawie tego co znalazłem w sieci naklepałem coś takiego:

INDEX.HTML:

<HTML>
<HEAD>
</HEAD>

<BODY>
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
	<script type="text/javascript">

	$(document).ready(
	function()
	{
		$("input").change(function(){
		alert('START!');
			var sprawdzkod =  $('.spr').val(); 
			$.ajax({
                type: 'POST', 
                url: "sprawdz.php",
                data: ({
                   sprawdzkod: sprawdzkod 
						}),
				dataType: 'json',
				success: function(towary){                       
                         alert(towary['0']);                          
										}   
					});
									});
	});	
</script>
	
<form action="dodaj.php" METHOD="POST">
<tr><td><input name="nazwa" class="spr" value="" ></td></tr>
<tr><td> KOD PRODUKTU </td></tr>
</table>
</br></br>
<input type="submit" name="" value="WY¦LIJ">
<input type="reset" name="" value="WYCZY¦Ć">
</BODY>
</HTML>

sprawdz.php:

<HTML>
<HEAD>
</HEAD>

<BODY>


<?php
  $mysql_connect=@mysql_connect('sql___.______.pl', '__________', '_________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  mysql_select_db('__________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  
  $sprawdzkod = $_POST['sprawdzkod'];

  $query = @mysql_query("SELECT kcnazwa FROM kody WHERE kod = '$sprawdzkod'");
 
  while($row = mysql_fetch_array($query))
                {
                  $towary .= $row['kcnazwa'];
                }		

  echo json_encode($towary); 
  
  mysql_close($mysql_connect);
?>
</BODY>
</HTML>

Jednak nie mogę poradzić sobie z odebraniem informacji zwrotnej z php (alert w success: function(towary) się nie pokazuje).
Kod zaczyna się wykonywać bo alert('START!'); wyskakuje, ale na tym się kończy (a w konsoli pusto....).

Podpowiecie mi co namieszałem ?

poprawienie kolorowania składni - furious programming

0

najprawdopodobniej cos sie sypie po stronie php, wiec ajax nie zwraca success, a tam wywolujesz drugi alert dodaj to:

,
              complete: function(data) {
                 console.log(data.responseText);
             }

po

success: function(towary){                       
                         alert(towary['0']);                          
                                        }

i sprawdz w konsoli co zwraca php :)

0

Są jakieś postępy :)...

Po dodaniu complete: function(data) w konsoli otrzymałem:

<HTML>
<HEAD>
</HEAD>

<BODY>

"PASTA BLEND-A-MED HERBAL ANTI-CAVI 100ML"</BODY>
</HTML>

<HTML>

Usunąłem znaczniki HTML z pliku php zostawiając tylko:

<?php
 $mysql_connect=@mysql_connect('sql___.______.pl', '__________', '_________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  mysql_select_db('__________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  
  $sprawdzkod = $_POST['sprawdzkod'];
 
  $query = @mysql_query("SELECT kcnazwa FROM kody WHERE kod = '$sprawdzkod'");
 
  while($row = mysql_fetch_array($query))
                {
                  $towary .= $row['kcnazwa'];
                }        
 
  echo json_encode($towary); 
 
  mysql_close($mysql_connect);
?>
       

Teraz w konsoli otrzymuje pełną nazwę (czyli to co potrzebuje), ale w alercie (tym w success) dostaje tylko pierwszą literę nazwy towaru...


Wiem już że związane jest to z tym:
towary['0']
0 - oznacza indeks znaku (jesli zmienie na 1 to pokaże mi drugą literkę)
Tylko jak to zmienić na cały wynik ?

0

skoro sklejasz w string nazwy towarów, to odwołując się jakasZmiennaTypuString[0] otrzymujesz jej pierwszą literkę, co jest normalne.

$towary[] = $row['kcnazwa']; - pewnie o to Ci chodziło? (już mniejsza o to, że doklejasz coś do niezadeklarowanej zmiennej)

0

Po zmianie
$towary .= $row['kcnazwa'];
na
$towary[] = $row['kcnazwa'];

w konsoli otrzymuje nazwę towaru w nawiasach kwadratowych, natomiast w alercie "undefined"

a gdy zamienię to na
$towary = $row['kcnazwa'];

w konsoli otrzymuje pełną nazwę, a w alercie znów jedną literkę


Udało się :)
w php:
$towary = $row['kcnazwa'];

w html:
alert(towary);

Dziękuję serdecznie za pomoc :)

0

ale to Ci nadpisuje nazwę towaru jak jest więcej jak jeden?

0

To nic nie szkodzi, muszę dostać informację czy kod jest w bazie danych (nie ważne ile razy).
Wszystko przez chwile fajnie działało, teraz php zwraca mi nulla za każdym razem nie wiem czemu...
Mam coś takiego :

<?php
  $mysql_connect=@mysql_connect('sqlair.______________.pl', '__________', '___________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  mysql_select_db('________')
  or die('Nie mo_na si_ po_±czy_: ' . mysql_error());
  
  $sprawdzkod = $_POST['sprawdzkod'];
  
  $query = @mysql_query("SELECT kcnazwa FROM kody WHERE kod = '$sprawdzkod'");
  echo("SELECT kcnazwa FROM kody WHERE kod = '$sprawdzkod'"); 
  while($row = mysql_fetch_array($query))
                {
                   $towary = $row['kcnazwa'];
				}      
 
  echo json_encode($towary); 
 
  mysql_close($mysql_connect);
?>

       

w konsoli widzę zapytanie SELECT kcnazwa FROM kody WHERE kod = '5900627047356' jesli je skopiuje bezpośrednio do HediSQL zwraca wynik (1 rekord)


@dzek69 miałeś racje....
zmieniłem w while($row = mysql_fetch_array($query) na :

  while($row = mysql_fetch_array($query))
                {
                   echo($row['kcnazwa']);
                   $towary = $row['kcnazwa'];
		}  

I w konsoli otrzymałem:
SELECT kcnazwa FROM kody WHERE kod = '5905027001359'P�ATKI KOKOSOWE 50Gnull

Widać że najpierw $towary przyjmuje pożądaną wartość a później null...

Co z tym zrobić ?

0

Udało mi się znaleźć prawie gotowy skrypt:
Funkcja wygląda tak:

$(document).ready(function(){
$('#username').keyup(username_check);
});
	
function username_check(){	
var username = $('#username').val();
if(username == "" || username.length < 4){
$('#username').css('border', '3px #CCC solid');
$('#tick').hide();
}else{

jQuery.ajax({
   type: "POST",
   url: "check.php",
   data: 'username='+ username,
   cache: false,
   success: function(response){
if(response == 1){
alert('KOD ISTNIEJE W BAZIE DANYCH \n\nUPEWNIJ SIE, ZE NIE MA GO NA LISCIE TOWAROW \nORAZ NA LISCIE TOWAROW USUNIETYCH!');
	$('#username').css('border', '3px #C33 solid');	
	$('#tick').hide();
	$('#cross').fadeIn();
	}else{
	$('#username').css('border', '3px #090 solid');
	$('#cross').hide();
	$('#tick').fadeIn();
	     }

}
});
}
}

Skrypt php sprawdzający czy wpis jest w bazie:

include("dbConnector.php");
$connector = new DbConnector();

$username = trim(strtolower($_POST['username']));
$username = mysql_escape_string($username);

$query = "SELECT kcnazwa FROM kody WHERE kod = '$username' LIMIT 1";
$result = $connector->query($query);
$num = mysql_num_rows($result);

echo $num;
mysql_close();

Chciałbym wprowadzić jedną zmianę:
aby przekazywana była nazwa towaru a nie tylko informacja że jest w bazie (tak aby alert brzmiał : KOD ISTNIEJE W BAZIE DANYCH NAZWA: .............................) .

Możecie mi z tym pomóc ?

Z góry dziękuję :)!

1 użytkowników online, w tym zalogowanych: 0, gości: 1