Предаване на PHP променлива към JS

  • Автор Автор ivo75
  • Начална дата Начална дата

ivo75

Registered
Използвам следния код за обновяване на БД

Код:
Това е jS кода

<script type="text/javascript">
  function example3() {
            $.msgBox({
                title: "Промяна на поръчка",
                content: "Наистина ли желаете да промените статуса на поръчката?",
                type: "confirm",
                buttons: [{ value: "Да" }, { value: "Не" }],
                success: function (result) {
                    if (result == "Да") {
                        update_porachki();
                    }
                }
            });
        }
 </script>
<script type="text/javascript">
        
function update_porachki(){
        $.ajax({
			type: "POST",
            url: "update_porachki.php",
            data:     'id=' +
<?php echo $_POST['hidden']; ?>,
Код:
      success: function(html){
			

            },
			//error: function doClear(){
				
			//	 $('#cena').text('');
			//}
        });
        
        }
    </script>


Това е HTML кода

<?php 
$i=0;
do {  
$i=$i+1;
?>
<form action="padadeni_porachki.php" method="post">
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td><?php echo $i; ?></td>
	<td><?php echo $row_rs_porachki['model']?></td>
    <td><?php echo $row_rs_porachki['razmer']?></td>
	<td><?php echo $row_rs_porachki['broy']?></td>
	<td><?php echo $row_rs_porachki['cena']?></td>
	<td><?php echo $row_rs_porachki['data_por']?></td>
    
    <td>
    <?php  $izp=$row_rs_porachki['isexecuted'];
	 // echo $izp;
	  if ($izp==1) 
	  {
		 echo "<input type='checkbox' name='izpalneno' value='1' checked='checked' disabled='disabled'  />"; 
		  }
	  else
	  {
		  echo "<input type='checkbox' name='izpalneno' value='0' disabled='disabled'/>";
		  }
	  ?></td>
      <td ><input type="hidden" name="hidden" value="<?php echo $row_rs_porachki['id']?>" id="hidden"/></td>
    <td> <?php if ($izp==0) 
	  { ?>  <input type="button" value="Изпълни" class="obnovi" onclick="example3();"/>
<?php } ?>
</td>
  </tr></form>
	<?php
} while ($row_rs_porachki = mysql_fetch_assoc($rs_porachki));
?>

</table>

PHP кода е това

<?php
if(isset ($_POST['id']))
{
$id=$_POST['id'];
//echo $id;
$sql = "UPDATE poracki SET isexecuted=1 WHERE id='$id'";

mysql_select_db('drehi');
$result1 = mysql_query( $sql);
if(! $result1 )
{
//  die('Проблем при обновяване: ' . mysql_error());
}

}
?>


Проблема е, че нещо в JS не мога да предам променлива с $_POST и после да го постне към файла update_poracki.php. С червено съм отбелязал как го правя, но нещо не се получава.
 
Мисля, че така трябва да работи:


Код:
<script type="text/javascript">
  function example3() {
            $.msgBox({
                title: "Промяна на поръчка",
                content: "Наистина ли желаете да промените статуса на поръчката?",
                type: "confirm",
                buttons: [{ value: "Да" }, { value: "Не" }],
                success: function (result) {
                    if (result == "Да") {
                        update_porachki();
                    }
                }
            });
        }
 </script>
<script type="text/javascript">
        
        
function update_porachki(){
        $.ajax({
         type: "POST",
            url: "update_porachki.php",
            data:    { id: <?php echo $_POST['hidden']; ?> },
            success: function(html){
         

            },
         //error: function doClear(){
            
         //    $('#cena').text('');
         //}
        });
        
        }
    </script>


Това е HTML кода

<?php 
$i=0;
do {  
$i=$i+1;
?>
<form action="padadeni_porachki.php" method="post">
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td><?php echo $i; ?></td>
   <td><?php echo $row_rs_porachki['model']?></td>
    <td><?php echo $row_rs_porachki['razmer']?></td>
   <td><?php echo $row_rs_porachki['broy']?></td>
   <td><?php echo $row_rs_porachki['cena']?></td>
   <td><?php echo $row_rs_porachki['data_por']?></td>
    
    <td>
    <?php  $izp=$row_rs_porachki['isexecuted'];
    // echo $izp;
     if ($izp==1) 
     {
       echo "<input type='checkbox' name='izpalneno' value='1' checked='checked' disabled='disabled'  />"; 
        }
     else
     {
        echo "<input type='checkbox' name='izpalneno' value='0' disabled='disabled'/>";
        }
     ?></td>
      <td ><input type="hidden" name="hidden" value="<?php echo $row_rs_porachki['id']?>" id="hidden"/></td>
    <td> <?php if ($izp==0) 
     { ?>  <input type="button" value="Изпълни" class="obnovi" onclick="example3();"/>
<?php } ?>
</td>
  </tr></form>
   <?php
} while ($row_rs_porachki = mysql_fetch_assoc($rs_porachki));
?>

</table>

PHP кода е това

<?php
if(isset ($_POST['id']))
{
$id=$_POST['id'];
//echo $id;
$sql = "UPDATE poracki SET isexecuted=1 WHERE id='$id'";

mysql_select_db('drehi');
$result1 = mysql_query( $sql);
if(! $result1 )
{
//  die('Проблем при обновяване: ' . mysql_error());
}

}
?>
 
Не става дава следната грешка в Firebug

SyntaxError: syntax error
[Break On This Error]

data: { id: },
 
Вземи стойността на hidden чрез jquery... или кажи какво точно искаш да направиш (с малко повечко код). :)
 
Както се виждам извличам данните от БД и ги прехвърлям в таблица като едната колона е "hidden" а другата колона са бутони е "button". Като натисна бутона искам да се редактира съответния ред където е бутона т.е. да взима стойността на "hidden" от реда на бутона. А за кода почти целия код е там.
 
Код:
data:    { id: <?php echo $_POST['hidden']; ?> }
не трябва ли да е id: '<?php echo $_POST['hidden']; ?> '
тоест в кавички щом се придава стойност директно, а не от js?

Код:
var id= ....;
id: '1'
id: ID
 
Това, което забелязах сега е, че типа на бутона е button, a не submit, поради което не се постват данни сигурно
 
Добре бе човек, ти като заредиш страница нямаш нищо в $_POST...

Ако правилно разбирам правиш следното:

вадиш стойност от база данни и я слагаш в hidden input
и искаш като натиснеш бутон чрез ajax и тази стойност да направиш нещо

еми, да, взимаш я $('#hidden_id').val() и я подаваш чрез ajax-a. :roll:
 
Виж как създавам динамично hidden-a
Код:
<td style="display:none;"><input type="hidden" name="hidden" value="<?php echo $row_rs_porachki['id']?>" id="hidden"/></td>
но всеки ред има input type="hidden" с id="hidden" и като се опитам да предам стойността чрез document.getElementById("hidden").value взима стойността на input type="hidden" от първия ред, което не ми върши работа
 
<td style="display:none;"><input type="hidden" name="porachka_id" value="<?php echo $row_rs_porachki['id']?>" /></td>

var id = $('input[name="porachka_id"]').val();
 
ето ти целия код за таблицата

Код:
<table class="hovertable">
<tr>
	<th>№</th>
	<th>Модел</th>
	<th>Размер</th>
	<th>Брой</th>
	<th>Цена</th>
	<th>Дата</th>
    
    <th>Статус</th>
    <th style="display:none;">скрит</th>
    <th>Редактиране <br />на поръчка</th>
</tr>

<?php 
$i=0;
do {  
$i=$i+1;
?>
<form action="padadeni_porachki.php" method="post">
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td><?php echo $i; ?></td>
	<td><?php echo $row_rs_porachki['model']?></td>
    <td><?php echo $row_rs_porachki['razmer']?></td>
	<td><?php echo $row_rs_porachki['broy']?></td>
	<td><?php echo $row_rs_porachki['cena']?></td>
	<td><?php echo $row_rs_porachki['data_por']?></td>
    
    <td>
    <?php  $izp=$row_rs_porachki['isexecuted'];
	 // echo $izp;
	  if ($izp==1) 
	  {
		 echo "<input type='checkbox' name='izpalneno' value='1' checked='checked' disabled='disabled'  />"; 
		  }
	  else
	  {
		  echo "<input type='checkbox' name='izpalneno' value='0' disabled='disabled'/>";
		  }
	  ?></td>
      <td style="display:none;"><input type="hidden" name="hidden" value="<?php echo $row_rs_porachki['id']?>" id="hidden"/></td>
    <td> <?php if ($izp==0) 
	  { ?>  <input type="button" value="Изпълни" class="obnovi" onClick="example3();"/>
<?php } ?>
</td>
  </tr></form>
	<?php
} while ($row_rs_porachki = mysql_fetch_assoc($rs_porachki));
?>

</table>

така както си ми написал ти пак ще вземе стойността в първата input type="hidden" с име porachka_id, но колкото записа има и толкова input type="hidden" ще има с име porachka_id.

Другото което се сещам е на всеки ред да се промени името на input type="hidden" т.е. към края на името да добавя и $i същото мога да направя и за бутона и чрез тази функция да присвоя стойност на променлива, която да бъде id-то на бутона

function get_button_id() {
var button_id = this.id;
alert(button_id);
}

но така като използвам текста в алерт-а е undefined, a като напиша
var button_id = this.id;
alert(button_id);

в onclick на бутона ми извежда точното id, но пак не мога да използвам променливата button_id, явното защото не е глобална ?!
 
http://jsfiddle.net/t4eyZ/

[js]
$('input[type="button"].obnovi').on('click', function() {
var parent = $(this).parents('tr');
var id = parent.find('input[name="hidden"]').val();
});
[/js]
 
Оправих се ето така
Код:
<td style="display:none"><input type="hidden" name="hidden" value="<?php echo $row_rs_porachki['id']?>" id="hidden<?php echo $i; ?>"/></td>
    <td> <?php if ($izp==0) 
	  { ?>  <input type="button" value="Изпълни" class="obnovi" onclick="example3(); button_id = this.id;" id="button<?php echo $i; ?>"/>
<?php } ?>
</td>


а jQuery-то е това

Код:
function update_porachki(){
	        $.ajax({
			type: "POST",
			//dataType: 'json',
            url: "update_porachki.php",
            data:     "id=" + document.getElementById("hidden"+button_id.substr(6)).value,
            success: function(html){
				document.location.reload(true)
            },
			
        });
        
        }
 
Добре де, моят начин не прави ли същото но много по-лесно и разбираемо???


Код:
при натискането на бутон като твоя - който и да е, изпълни следната функция:
    намери tr тага, в който е този бутон (натиснания)
    в него (в tr тага) намери hidden поле с името "porachka_id" и вземи стойността му

2 реда код, които могат да се направят и на 1...
 

Back
Горе