PHP и MySQL обновляют записи, но на дисплее страницы не отображаются новые данные

#php #mysql

#php #mysql

Вопрос:

Спасибо за помощь, ребята, теперь она перенаправляет на winner.php но не обновляет базу данных…

вот что у меня есть сейчас:

 // Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$sql="SELECT * FROM $tbl_name WHERE depot = 'plainview'";
$result=mysql_query($sql);

// Count table rows
$count=mysql_num_rows($result);


if( isset($_POST['Submit'])){
for($i=0;$i<$count;$i  ){

$sql1 = "UPDATE $tbl_name SET 

    available='{$_POST['available'][$i]}', 
    rent='{$_POST['rent'][$i]}', 
    corp_ready='{$_POST['corp_ready'][$i]}', 
    down='{$_POST['down'][$i]}', 
    gfs='{$_POST['gfs'][$i]}',
    dateTime = NOW()  

WHERE id='$id[$i]'"; 


$result1 = mysql_query($sql1) or die(mysql_error());
}
}


if($result1){
header("location: winner.php");
}
mysql_close();
?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script language="JavaScript1.1" type="text/javascript">
<!--
function mm_jumpmenu(targ,selObj,restore){ //v3.0
  eval(targ ".location='" selObj.options[selObj.selectedIndex].value "'");
  if (restore) selObj.selectedIndex=0;
}
//-->
</script>
<title>Untitled Document</title>
</head>

<body>

<div>
    <p>Plainview, North East Region</p>
    <p>Select a different region: <select onchange="mm_jumpmenu('parent',this,0)" name="lostlist">
                <option value="" selected="selected">Choose Your Depot</option>
                <option value="plainview.php">Plainview</option>
                <option value="worcrester.php">Worcrester</option>

                </select></p>
</div><Br />

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td>
<table width="700" border="0" cellspacing="1" cellpadding="0">

<tr>
<td>ID</td>
<td align="center"><strong>Product Name</strong></td>
<td align="center"><strong>Available</strong></td>
<td align="center"><strong>Rent</strong></td>
<td align="center"><strong>Corp Ready</strong></td>
<td align="center"><strong>Down</strong></td>
<td align="center"><strong>GFS</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="left"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>

<td align="left"><?php echo $rows['product']; ?></td>
<td align="center"><input name="available[]" type="text" id="available" value="<?php echo $rows['available']; ?>" size="5"></td>
<td align="center"><input name="rent[]" type="text" id="rent" value="<?php echo $rows['rent']; ?>" size="5"></td>
<td align="center"><input name="corp_ready[]" type="text" id="corp_ready" value="<?php echo $rows['corp_ready']; ?>" size="5"></td>
<td align="center"><input name="down[]" type="text" id="down" value="<?php echo $rows['down']; ?>" size="5" /></td>
<td align="center"><input name="gfs[]" type="text" id="gfs" value="<?php echo $rows['gfs']; ?>" size="5"></td>

</tr>
<?php
}
?>
<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>



</body>
</html>
  

Я понимаю, что это взломано вместе, я только начинаю изучать PHP … медленно…

спасибо за помощь!

Комментарии:

1. mm_jumpmenu() Ах, ностальгия … 🙂

Ответ №1:

чтобы добавить то, что BraedenP уже написал:

  • это должно быть if( isset($_POST['Submit'])){
  • ваш код широко открыт для SQL-инъекций

Комментарии:

1. Похоже, что OP является довольно новым для разработки PHP. Некоторые ссылки на то, что такое SQL-инъекция и как ее предотвратить, вероятно, были бы хорошо восприняты.

Ответ №2:

Здесь у вас две проблемы…

Во-первых, чтобы перенаправить страницу, вам действительно нужно отправить заголовок; прямо сейчас вы просто устанавливаете переменную $ redirect . Вам нужно будет заменить строку:

 $redirect = "winner.php";
  

с:

 header("location: winner.php");
  

Во-вторых, вы не можете перенаправить страницу после того, как вы уже записали на нее содержимое, потому что запись содержимого завершает отправку заголовков обратно в браузер. Перенаправление должно произойти в верхней части страницы с остальной частью вашего кода.

После изменения строки выше вы должны переместить весь PHP, который находится под вашей таблицей, в конец материала вверху страницы. После того, как вы это сделаете, все должно работать нормально.

Комментарии:

1. Перенаправление работает, но теперь база данных не обновляется новыми данными… Я отредактировал свой первоначальный вопрос, чтобы показать, что у меня есть на данный момент.

2. Хм… Теперь код выглядит нормально. Возможно, $ _POST[‘Submit’] не установлен, поэтому он вообще не входит в цикл запроса?

Ответ №3:

Вероятно, вам следует изменить свой код.

 <?php

  // 1. Update if POST contains data

  // 2. query database here

  // 3. output result

?>
  

Таким образом, вам не нужно перенаправление, потому что если вы что-то измените, вы сделаете это до повторного чтения базы данных.

Ответ №4:

Вы пробовали изменить: WHERE id=’$id[$i]'» на это: WHERE id = ‘$ i'»

Кроме того, вот ссылка на SQL-инъекцию, которая может дать вам некоторую информацию, которой у вас еще нет:http://www.unixwiz.net/techtips/sql-injection.html

Ответ №5:

Разместите код на странице в таком порядке:

SELECT сначала выполните запрос, чтобы получить числовые строки, поскольку UPDATE запросу нужна эта информация. UPDATE запросите SELECT запрос ($result=mysql_query($sql);) еще раз, чтобы обновить данные страницы, в противном случае на странице будут отображаться только предварительно обновленные данные.

Не очень чисто, но это работает…

Я отмечаю, что код взят из PHPEasystep.com веб-сайт.