Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: buserg в Mar 04, 2012, 00:53



Титла: Изтриване на ред от БД
Публикувано от: buserg в 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>

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


Титла: Re: Изтриване на ред от БД
Публикувано от: b2l в Mar 04, 2012, 17:44
1. Урока от който четеш е стар.
2. Потребителя ти за базата данни не е роот, ами е root (освен ако не си хаквал нещо mysql и не си го сменил).
3. Не си написал името на базата данни, за която да се свържи.
4. Не си написал и таблицата.
5. Грозно е да пишеш html и php в едно.


Титла: Re: Изтриване на ред от БД
Публикувано от: buserg в Mar 07, 2012, 17:48
Знам как да се вържа към база данни. Не съм ги писал нарочно. Не съм учил PHP. Искам да го направя така, че като сложа тикче и като натисна изтрий да ми трие от базата


Титла: Re: Изтриване на ред от БД
Публикувано от: Odido в Mar 08, 2012, 07:02
И аз хал хабер си нямам от php ,ноо тука има напляскани сумати затварящи тагове "?>" и доста недомислици според мен, като
Код
GeSHi (PHP):
  1. <?php
  2. }
  3. ?>
почнат while и свършен наникъде и т.н.
П.С Поправете ме ако греша.


Титла: Re: Изтриване на ред от БД
Публикувано от: neter в 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). На теб оставям да познаеш той как трябва да изглежда ;)


Титла: Re: Изтриване на ред от БД
Публикувано от: buserg в 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>


Титла: Re: Изтриване на ред от БД
Публикувано от: neter в 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-овете. Но за долния цикъл може да доведе до разминаване в масивите.


Титла: Re: Изтриване на ред от БД
Публикувано от: buserg в Mar 08, 2012, 14:15
Стана. Мерси!