Автор Тема: Изтриване на ред от БД  (Прочетена 2490 пъти)

buserg

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
Изтриване на ред от БД
« -: Mar 04, 2012, 00:53 »
Здравейте, драги съфорумници! Искам да изтрия ред от база данни със следния код но като дам изтрий не се получава.

Ето го и го кода:

Код:
<head> 
<meta charset="windows-1251">
</head>
<?php
$host="localhost"; // Сървъра
$username="роот"; // Mysql потребителско име
$password=""; // Mysql парола
$db_name=""; // ДБ име
$tbl_name=""; // Име на таблицата

// Свързване към дб
mysql_connect("$host", "$username", "$password")or die("Не може да се свържи");
mysql_select_db("$db_name")or die("Не е избрана БД");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Изтриване от БД</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Номер</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Име</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Порода</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Обучение</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Година</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Описание</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Снимка</strong></td> 
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><?php echo $rows['id']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['name']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['breed']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['trlevel']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['tryear']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['description']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['image']; ?></td>
</tr>
<?php
}
?>
<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Изтрий"></td>
</tr>
<?php
// Започване на триенето
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
$result = mysql_query($sql);
}

// След завършване на триенето се пренасочва към файла delete_multiple.php
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=delete_multiple.php\">";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>

Благодаря на всичко които помогнат
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Изтриване на ред от БД
« Отговор #1 -: Mar 04, 2012, 17:44 »
1. Урока от който четеш е стар.
2. Потребителя ти за базата данни не е роот, ами е root (освен ако не си хаквал нещо mysql и не си го сменил).
3. Не си написал името на базата данни, за която да се свържи.
4. Не си написал и таблицата.
5. Грозно е да пишеш html и php в едно.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

buserg

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
Re: Изтриване на ред от БД
« Отговор #2 -: Mar 07, 2012, 17:48 »
Знам как да се вържа към база данни. Не съм ги писал нарочно. Не съм учил PHP. Искам да го направя така, че като сложа тикче и като натисна изтрий да ми трие от базата
Активен

Odido

  • Напреднали
  • *****
  • Публикации: 627
  • Distribution: Arch Linux
  • Window Manager: Gnome
    • Профил
Re: Изтриване на ред от БД
« Отговор #3 -: Mar 08, 2012, 07:02 »
И аз хал хабер си нямам от php ,ноо тука има напляскани сумати затварящи тагове "?>" и доста недомислици според мен, като
Код
GeSHi (PHP):
  1. <?php
  2. }
  3. ?>
почнат while и свършен наникъде и т.н.
П.С Поправете ме ако греша.
Активен

"Congratulations, you broke the Internet
Look at what you did! Are you happy now?"

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Изтриване на ред от БД
« Отговор #4 -: Mar 08, 2012, 08:58 »
Код
GeSHi (PHP):
  1. <?php
  2. }
  3. ?>
почнат while и свършен наникъде и т.н.
Няма нищо лошо в това оформление - често срещано при изписване на View-то в MVC модела, когато не се използва някакъв template engine, който да направи кода още по-странно изглеждащ :) Това изписване на HTML-а извън PHP таговете позволява кеширане на същия този HTML. Важното е бройката и местата на отварящите и затварящите скоби във вложените PHP тагове да си отговарят.
buserg, ако не използваш други езици, изискващи подобни тагове, каквито изисква PHP (като XML; може да внесе объркване), можеш в php.ini да зададеш
Цитат
short_open_tag = On
и тогава това
Цитат
<?php echo $rows['id']; ?>
да го изписваш така
Цитат
<?= $rows['id'] ?>
Относно проблема ти, че записите не се трият
Цитат
// Започване на триенето
if($delete){
Не намирам някъде да задаваш променливата $delete, поради което тази променлива винаги е без стойност, и така никога не се влиза в if-а, в който се извършва триенето. Виждам бутон, името на който е "delete", и той се намира в POST форма. След изпращане на формата неговата стойност не застава в променлива $delete, а в $_POST['delete'], така че това е променливата, която трябва да използваш в проверката. $_POST е масивът, в който се съхраняват стойностите на изпратената POST форма
Цитат
// Започване на триенето
if (@$_POST['delete']) {
Сложил съм ти @ пред променливата, за да не ти влизат Notice съобщения в лога, че променливата не е зададена, когато все още не си цъкнал бутона "Изтрий". Гледай да слагаш по някой и друг интервал, за да си четеш по-лесно кода.
Същото е положението с масива $checkbox, който използваш малко по-надолу в същия if (пак е част от $_POST). На теб оставям да познаеш той как трябва да изглежда ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

buserg

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
Re: Изтриване на ред от БД
« Отговор #5 -: Mar 08, 2012, 12:46 »
Промених го и се получи така, но пак не трие  ;D Нещо не правя както трябва :S

Код:
<head>
<meta charset="utf-8">
</head>
<?php
$host="localhost"; // Сървъра
$username="evraziab"; // Mysql потребителско име
$password="41dh5x9kf46b"; // Mysql парола
$db_name="evraziab_kuche"; // ДБ име
$tbl_name="trained"; // Име на таблицата

// Свързване към дб
mysql_connect("$host", "$username", "$password")or die("Не може да се свържи");
mysql_select_db("$db_name")or die("Не е избрана БД");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Изтриване от БД</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Номер</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Име</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Порода</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Обучение</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Година</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Описание</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Снимка</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><?= $rows['id'] ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['name']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['breed']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['trlevel']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['tryear']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['description']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['image']; ?></td>
</tr>
<?php
}
?>
<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Изтрий"></td>
</tr>
<?php
// Започване на триенето
if(@$_POST['delete']) {
for($i=0;$i<$count;$i++){
$del_id = $_POST['checkbox[$i]'];
$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
$result = mysql_query($sql);
}

// След завършване на триенето се пренасочва към файла delete.php
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=delete.php\">";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Изтриване на ред от БД
« Отговор #6 -: Mar 08, 2012, 14:03 »
Защото не си познал как трябва да изглежда променливата на checkbox-овете :) Не е
Цитат
$del_id = $_POST['checkbox[$i]'];
а е
Цитат
$del_id = $_POST['checkbox'][$i];
Но нищо - важното е, че опита ;)

П.П.: А! Сега се загледах във for цикъла ти. Това е грешна логика за нужния ти цикъл
Цитат
for($i=0;$i<$count;$i++){
Променливата, стойностите на която използваш, е $_POST['checkbox'] (триеш редове, отбелязани във формата). Следователно цикълът трябва да обхожда нея, а не редовете в таблицата
Цитат
for ($i=0;$i<count($_POST['checkbox']);$i++) {
А може и така
Цитат
foreach ($_POST['checkbox'] as $key => $value) {
и после надолу в цикъла ползваш $value, вместо $_POST['checkbox'][$i].
Иначе правилно обхождаш $count, когато принтираш редовете с checkbox-овете. Но за долния цикъл може да доведе до разминаване в масивите.
« Последна редакция: Mar 08, 2012, 14:24 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

buserg

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
Re: Изтриване на ред от БД
« Отговор #7 -: Mar 08, 2012, 14:15 »
Стана. Мерси!
Активен