While loop, der laver en row for hver row i databasen og ID.

Her kan du få hjælp og stille spørgsmål til PHP!
Besvar
jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57
While loop, der laver en row for hver row i databasen og ID.

Indlæg af jepperask » 4. nov 2012, 18:02

Hej Nemprogrammering.dk!

Jeg er ret ny inden for PHP og MySQL, men har kastet mig ud i at bygge en blog. Jeg har lavet det hele, og er nu nået til den del hvor man kan slette posts i databasen vha. PHP (og selvfølgelig på den admin-side jeg har lavet).

Her er mit while loop, som for hver row i databasen laver en row på en side:

Kode: Vælg alt

       <?php
              
            // Connects to your Database 
            include 'db_connect.php';
            mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error()); 
            mysql_select_db("pentakill_dk_db") or die(mysql_error()); 
            $data = mysql_query("SELECT * FROM posts") 
            or die(mysql_error()); 
            
            Print "<table border cellpadding=3>"; 
            while($info = mysql_fetch_array( $data )){
                
            Print '<th><input type="submit" name="delete_id" value="Delete"></td>';
            Print "<th>Post-Title:</th> <td>".$info['title'] . "</td> "; 
            Print "<th>Body:</th> <td>".$info['post_id'] . " </td></tr>"; 
            } 
            Print "</table>"; 
            
            ?>
Jeg har gjort sådan, at den tager title og post_id fra databasen og printer på siden, og en delete-button, som gerne skulle slette den row som jeg får printet. Problemet er, at jeg gerne vil have et unikt ID til hver knap, sådan at jeg i mit "delete-script" kan sige at den skal "DELETE FROM posts WHERE $unikke-ID = post_id".

Mit spørgsmål: Hvordan gør jeg sådan, at hver submit knap den laver i loopet, får et unikt ID?

Jeg er lidt på dybt vand, så hvis der findes en smartere måde at slette en row vha. en submit-knap, så vil jeg meget gerne høre forslag. Det kan godt være det kræver lidt uddybning, men spørg gerne!

På forhånd tak - Jeppe.

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: While loop, der laver en row for hver row i databasen og

Indlæg af Daniel » 4. nov 2012, 21:53

Hey Jeppe.

Jeg er ikke sikker på jeg forstår 100%, men jeg vil alligevel prøve at hjælpe dig lidt.

Sådan som jeg forstår dig vil du gerne have en knap ved hvert indlæg som du kan trykke på, og så sletter den det pågældende indlæg.

Dette kan du gøre på to måder, enten via PHP eller via jQuery, men da du har postet det som PHP vil jeg komme med løsningen den vej igennem.

Du kan med HTML tilføje et hidden input til din tabel, dette input skulle så indeholde det pågældende id fra din database.

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = $post_id");
}

?>

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: While loop, der laver en row for hver row i databasen og

Indlæg af Daniel » 4. nov 2012, 22:25

Hey igen.

Lavede lige en lille fejl i den første kode, den rigtige kommer lige her. :)

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="id" value="<?=$info['post_id'];?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?=$info['title'];?></td>
    <th>Body:</th> <td><?=$info['post_id'];?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = $post_id");
}

?>

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: While loop, der laver en row for hver row i databasen og

Indlæg af jepperask » 4. nov 2012, 22:25

Danielh007 skrev:Hey Jeppe.

Jeg er ikke sikker på jeg forstår 100%, men jeg vil alligevel prøve at hjælpe dig lidt.

Sådan som jeg forstår dig vil du gerne have en knap ved hvert indlæg som du kan trykke på, og så sletter den det pågældende indlæg.

Dette kan du gøre på to måder, enten via PHP eller via jQuery, men da du har postet det som PHP vil jeg komme med løsningen den vej igennem.

Du kan med HTML tilføje et hidden input til din tabel, dette input skulle så indeholde det pågældende id fra din database.

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = $post_id");
}

?>
Ser fint ud - men jeg får en fejl ved den sidste variabel $delete_id, som ikke bliver brugt. Desuden melder NetBeans fejl ved de 2 th-tags rundt om formen.. Men trykkede "Disable html error checking", eller noget i den dur - så det betyder ikke noget vel?
Tak for det hurtige svar forresten :-) PS: Du har forstået det 100% rigtigt!

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: While loop, der laver en row for hver row i databasen og

Indlæg af Daniel » 4. nov 2012, 22:35

Ups, kan se jeg havde lavet en lille fejl mere. ;)

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = '$post_id'");
}

?>
Så håber jeg den virker denne gang, havde lige glemt at få sat $post_id ind i ' ' :)

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: While loop, der laver en row for hver row i databasen og

Indlæg af jepperask » 4. nov 2012, 22:44

Hmm.. Jeg får denne fejl i min browser: Notice: Undefined index: post_id in C:\xampp\htdocs\loginscripttest\delete-post.php on line 52

Hvilket svarer til den 5. sidste linje: $post_id = $_POST['post_id'];

Udover det er $info i denne linje "unused" : <th>Body:</th> <td><?$info['post_id']?></td></tr>

Og det samme med $delete_id her: $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = '$post_id'");

Brugeravatar
ThomasI
Grundlægger
Grundlægger
Indlæg:1528
Tilmeldt:28. dec 2010, 10:49

Re: While loop, der laver en row for hver row i databasen og

Indlæg af ThomasI » 5. nov 2012, 12:52

Der er fejl i din POST. Du siger den skal lede efter en POST med id : post_id , men i din form har dit input id: id...

Skift derfor $_POST['post_id'] ud med $_POST['id'] og så skulle det gerne virke...

Alternativt så skift

Kode: Vælg alt

<input type="hidden" name="id" value="<?$info['post_id']?>" />
ud med:

Kode: Vælg alt

<input type="hidden" name="post_id" value="<?$info['post_id']?>" />

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: While loop, der laver en row for hver row i databasen og

Indlæg af Daniel » 5. nov 2012, 13:40

Har virkelig siddet og stirret mig blind på den kode, tusinder gange af tak Thomas, var ved at blive vanvittig over jeg ikke kunne finde fejlen. :P

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: While loop, der laver en row for hver row i databasen og

Indlæg af jepperask » 5. nov 2012, 14:09

ThomasI skrev:Der er fejl i din POST. Du siger den skal lede efter en POST med id : post_id , men i din form har dit input id: id...

Skift derfor $_POST['post_id'] ud med $_POST['id'] og så skulle det gerne virke...

Alternativt så skift

Kode: Vælg alt

<input type="hidden" name="id" value="<?$info['post_id']?>" />
ud med:

Kode: Vælg alt

<input type="hidden" name="post_id" value="<?$info['post_id']?>" />
Lige meget hvad jeg skriver, så får jeg fejl i den her linje: $post_id = $_POST['post_id'];
Det er som om den ikke kan genkende det jeg har skrevet i formen.

Udover det siger den også at $info er unused her: <th>Body:</th> <td><?$info['post_id']?></td></tr>

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="post_id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = '$post_id'");
}

?>

Brugeravatar
Daniel
Admin
Admin
Indlæg:625
Tilmeldt:14. jun 2011, 09:27
Geografisk sted:Danmark, Fyn, Nørre Aaby
Kontakt:

Re: While loop, der laver en row for hver row i databasen og

Indlæg af Daniel » 5. nov 2012, 14:17

Ser ikke ud til du har fået mine tidligere rettelser med. :)

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="post_id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = '$post_id'");
}

?>

Brugeravatar
ThomasI
Grundlægger
Grundlægger
Indlæg:1528
Tilmeldt:28. dec 2010, 10:49

Re: While loop, der laver en row for hver row i databasen og

Indlæg af ThomasI » 5. nov 2012, 14:37

Problemet er at siden bliver loadet uden at der er blevet sendt en $_POST['post_id'] dvs. at $_POST['post_id'] ikke eksisterer når siden loades - det er jo klart når man loader siden første gang, hvor der ikke er blevet sendt data via formen.

koden skal se således ud:

Kode: Vælg alt

<?php
             
// Connects to your Database
include 'db_connect.php';
mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
mysql_select_db("pentakill_dk_db") or die(mysql_error());
$data = mysql_query("SELECT * FROM posts")
or die(mysql_error());

print "<table border cellpadding=3>";
while($info = mysql_fetch_array($data)){ ?>

    <th>
    <form method="post" action="">
    <input type="hidden" name="post_id" value="<?$info['post_id']?>" />
    <input type="submit" name="delete_id" value="Delete" />
    </form>
    </th>
    <th>Post-Title:</th> <td><?$info['title']?></td>
    <th>Body:</th> <td><?$info['post_id']?></td></tr>

<?php
}

print "</table>";

if (isset($_POST['post_id'])) {

$post_id = $_POST['post_id'];

if (isset($_POST['delete_id']) === true) {
    $delete_id = mysql_query("DELETE FROM `posts` WHERE `id` = '$post_id'");
}
}

?>
ved ikke om det virker...måske ;)

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: While loop, der laver en row for hver row i databasen og

Indlæg af jepperask » 5. nov 2012, 15:03

Den melder ikke om nogen fejl nu! Jubii - men den viser desværre hverken titel eller post_id og knappen virker heller ikke.. :D

EDIT: Jeg fik lidt hjælp på en anden side, hvor jeg nåede frem til dette som den endelige kode. Den melder ikke om fejl, den viser titel og post_id - men knappen virker ikke! :/

Kode: Vælg alt

<?php
     session_start();
     if(!isset($_SESSION['user_id'])){
         header('location: index.php');
         exit();
     }
     if (isset($_POST['post_id'])) {
         $post_id = $_POST['post_id'];
         if (isset($_POST['delete_id'])) {
             mysql_query("DELETE FROM posts WHERE post_id = " . $post_id);
         }
     }
 ?>
 <!DOCTYPE html>
 <html lang="en">
     <head>
         <meta charset="utf-8"/>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <style>
             #delete-post {
                 width: 100%;
                 margin: auto;
                 background-color: #999;
             }
         </style>
         <script src="http://code.jquery.com/jquery-1.5.min.js"></script>
     </head>
     <body>
         <div>
             <table border cellpadding="3">
                 <?php
                 mysql_connect("localhost", "root", "hejmeddig") or die(mysql_error());
                 mysql_select_db("pentakill_dk_db") or die(mysql_error());
                 $data = mysql_query("SELECT * FROM posts") or die(mysql_error());
                 while($info = mysql_fetch_array($data)){ ?>
                     <tr>
                         <th>
                             <form method="post" action="">
                                 <input type="hidden" name="post_id" value="<?php echo $info['post_id']; ?>" />
                                 <input type="submit" name="delete_id" value="Delete" />
                             </form>
                         </th>
                         <th>
                             Post-Title:
                         </th>
                         <td>
                             <?php echo $info['title']; ?>
                         </td>
                         <th>
                             Body:
                         </th>
                         <td>
                             <?php echo $info['body']; ?>
                         </td>
                    </tr>
                 <?php }    ?>
             </table>
         </div>
     </body>
 </html>

Besvar