Avatar billede sabumnim Novice
10. januar 2012 - 11:51 Der er 23 kommentarer og
1 løsning

Noget slet med while løkke

Hej alle

Jeg sidder her med et lille problem.

Jeg vil gerne have lavet følgende:

- En lille formular som lister al indhold fra en DB.
- Hver enkelt tabel fra min DB som vises, skal have en Checkbox ud for så når jeg sætter hak i denne checkbox og til slut trykker på knappen SLET, vil den pågældende række i min DB blive slettet.

Jeg har følgende pt:



PHP CONNECTION og FOREACH
<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);

if(isset($_POST['letsgo'])){
    foreach($_POST['id'] as $id){
      $query="DELETE FROM todo WHERE id='$_GET[id]'";
    }
}
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

while ($myrow = mysql_fetch_array($result) or die(mysql_error())) {

?>


<form action="setup.php" method="post">
<input type="checkbox" name="id[]" value="<?php echo $myrow['id'];?>" /> <?php echo $myrow['name'];?>
    <input type="submit" name="letsgo" value="Slet" />
</form>








Min DB

CREATE TABLE IF NOT EXISTS `todo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(255) COLLATE utf8_danish_ci DEFAULT NULL,
  `linkshow` char(60) COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=4 ;

--
-- Data dump for tabellen `todo`
--

INSERT INTO `todo` (`id`, `name`, `linkshow`) VALUES
(1, 'PSP', 'http://gamestop.dk'),
(2, 'Strømper', 'http://stroemper.dk'),
(3, 'Senge uro', 'http://oenskeboern.dk');



Men det virker ikke helt med den foreach :0(

Kan I hjælpe lidt måske ?

//Carsten
Avatar billede runesoft Nybegynder
10. januar 2012 - 11:59 #1
Du får aldrig eksekveret din $query.  Enten skal du samle alle dine deletes sammen i én streng og sende den, eller sende dine delete sql statements hver for sig
Avatar billede sabumnim Novice
10. januar 2012 - 12:02 #2
Huh ?

Ikke forstået....

Kan du måske prøve at forklare mere uddybende

//Carsten
Avatar billede sabumnim Novice
10. januar 2012 - 12:03 #3
..eller bedre endnu, komme med et bud på hvad du mener for det første forstod jeg desværre ikke :0/
Avatar billede michael_stim Ekspert
10. januar 2012 - 12:33 #4
Du mangler en mysql_query og så havde jeg nok kigget på WHERE id IN(....
10. januar 2012 - 12:41 #5
sabumnim, jeg antager, for at være precis, at det ikke drejer sig om at liste alt indhold fra en database men alt indhold fra en enkelt tabel i databasen, i dette tilfælde tabellen todo.  Yderligere går jeg ud fra, at den fil du viser hedder setup.dp, således at formen kalder sin egen fil.

Det som er problemet (eller et af problemerne) er, at du laver en form for hver række du får trukket ud.  Således får du, ved tryk på 'letsgo' kun sendt en enkelt id til dit delete script.  Problemet ligger således ikke i foreach'en. Den får en enkelt række, som den så sandsynligvis deleter.  (Det er formentligt det samme runesoft mener.)

Her er en kode der vil give dig en enkelt form der indeholder alle rækkerne fra dit udtræk, hver række med en checkbox, men kun med en enkelt submit.  Jeg har ikke testet koden, så måske er der lidt syntaks, der skal bakses på plads.


<?php
....
....
$result = $result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);
?>
<form action="setup.php" method="post">
<?php
while ($myrow = mysql_fetch_array($result) or die(mysql_error())) {
?>
<input type="checkbox" name="id[]" value="<?php echo $myrow['id'];?>" /> <?php echo $myrow['name'];?>
<?php
}
?>
<input type="submit" name="letsgo" value="Slet" />
</form>
Avatar billede sabumnim Novice
10. januar 2012 - 13:09 #6
Hej Christian og velkommen til :0)

Du har helt ret i at det på ingen måde drejer sig om at LISTE al indholdet fra en DB, men mere specifikt fra en tabel...en lille svipser fra min side :0)

Jeg har nu følgende på min side setup.php:



<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(isset($_POST['letsgo'])){
    foreach($_POST['id'] as $id){
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");

echo "<form action='setup.php' method='post'>";

while ($myrow = mysql_fetch_array($result) or die(mysql_error())) {

echo "<input type='checkbox' name='id[]' value='$id' /> <label>$myrow[name]</label>";

}
?>


    <input type="submit" name="letsgo" value="Slet" />
</form>



Jeg får fint nok listet alle rækkerne fra min tabel, men min Submit knap med navnet "letsgo" er ikke synlig ?

Nogle gode input på hvorfor ikke ?
Avatar billede expnet Seniormester
10. januar 2012 - 13:20 #7
prøv det her ud-testet

<form action="setup.php" method="post">

<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(!empty($_POST['letsgo'])){
    foreach($_POST['id'] as $id){
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");



while ($myrow = mysql_fetch_array($result) or die(mysql_error())) {

echo '<input type="checkbox" name="id[]" value="$id" />';
echo '<label>'.$myrow['name'].'</label>';

}
?>


<input type="submit" name="letsgo" value="Slet" />
</form>
Avatar billede sabumnim Novice
10. januar 2012 - 13:28 #8
Hej expnet

Det gør nøjagtig det samme, viser udtræk fra tabellen, men ingen Submit knap....
Avatar billede expnet Seniormester
10. januar 2012 - 13:41 #9
der må komme en eller anden fejl ellers må du have noget andet kode forsager at det ikke vil vise
Avatar billede sabumnim Novice
10. januar 2012 - 13:50 #10
Hej igen

Der kommer ingen fejl ud og der ser ikke ud til at være noget som skulle udmønter i det.

Min kode ser sådan ud:



<form action="setup.php" method="post">

<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(!empty($_POST['letsgo'])){
    foreach($_POST['id'] as $id){
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");



while ($myrow = mysql_fetch_array($result) or die(mysql_error())) {

echo "<input type='checkbox' name='id[]' id='$myrow[id]' value='$myrow[id]' /> <label for='$myrow[id]' >$myrow[name]</label>";
echo "<p>Set hos: <a href='http://$myrow[linkshow]' title='$myrow[linkshow]'>$myrow[linkshow]</a></p>";



}
?>

echo "<input type='submit' name='letsgo' value='Slet' />";


</form>



Avatar billede sabumnim Novice
10. januar 2012 - 13:55 #11
..og dette er hvad min kilde kode viser:




<form action="setup.php" method="post">



<input type='checkbox' name='id[]' id='1' value='1' /> <label for='1' >PSP</label><p>Set hos: <a href='http://www.gamestop.dk' title='www.gamestop.dk'>www.gamestop.dk</a></p><input type='checkbox' name='id[]' id='3' value='3' /> <label for='3' >Senge uro</label><p>Set hos: <a href='http://www.oenskeboern.dk' title='www.oenskeboern.dk'>www.oenskeboern.dk</a></p><input type='checkbox' name='id[]' id='2' value='2' /> <label for='2' >Strømper</label><p>Set hos: <a href='http://www.stroemper.dk' title='www.stroemper.dk'>www.stroemper.dk</a></p>





Men hvis man kigger efter i denne kildekode, så ses hverken input submit eller form slut ?
Avatar billede expnet Seniormester
10. januar 2012 - 14:42 #12
du gør så vi kan se den online evt. også som kilde kode
10. januar 2012 - 16:34 #13
sabumnin, det er mystisk, at submitknappen og formafslutningen falder væk.  Her er endnu et forslag: Put submitknappen og formslutningen indenfor php koden som vist nedenfor.  Du skal lægge mærke til, at dine anførselstegn i <input type='submit'... skal være enkelt anførselstegn (apostroffer) for ikke at konflikte med echo anførselstegnene.

<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(isset($_POST['letsgo']))
{
    foreach($_POST['id'] as $id)
    {
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");

echo "<form action='setup.php' method='post'>";

while ($myrow = mysql_fetch_array($result) or die(mysql_error()))
{
  echo "<input type='checkbox' name='id[]' value='$id' /> <label>$myrow[name]</label>";
}
echo "<input type='submit' name='letsgo' value='Slet' />";
echo "</form>";
?>
Avatar billede sabumnim Novice
10. januar 2012 - 16:42 #14
Hej igen Christian

Ja, jeg er sgu lige så forundret over det her som jer.

Jeg har nu forsøgt at gøre som du skrev.

Min kode på setup.php ser nu sådan ud:



<form action="setup.php" method="post">

<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(isset($_POST['letsgo']))
{
    foreach($_POST['id'] as $id)
    {
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");

echo "<form action='setup.php' method='post'>";

while ($myrow = mysql_fetch_array($result) or die(mysql_error()))
{
  echo "<input type='checkbox' name='id[]' value='$id' /> <label>$myrow[name]</label>";
}
echo "<input type='submit' name='letsgo' value='Slet' />";
echo "</form>";
?>




Og min kildekode ved showsource ser nu sådan ud:



<form action="setup.php" method="post">



<form action='setup.php' method='post'><input type='checkbox' name='id[]' value='' /> <label>PSP</label><input type='checkbox' name='id[]' value='' /> <label>Senge uro</label><input type='checkbox' name='id[]' value='' /> <label>Strømper</label>


Men jeg har stadig ingen Submit knap

????
10. januar 2012 - 17:47 #15
Så når koden har lavet den tredje løkke i while er der noget der stopper koden, så den ikke går videre med submit knap og form slut.  Hvis det havde været mit problem ville jeg debugge ved at udelade nok kode til at få resten til at virke og så tilføje mere og mere kode, indtil det går galt, og så lede efter fejlen der hvor det går galt.  Såsom:

Trin 1.  Ændre koden til:

...
...
echo "<form action='setup.php' method='post'>";
echo "<input type='submit' name='letsgo' value='Slet' />";
echo "</form>";
?>

Forhåbenlig får du så submitknappen.  (Ellers er det forhekset.)

Trin 2.


echo "<form action='setup.php' method='post'>";

while ($myrow = mysql_fetch_array($result) or die(mysql_error()))
{

}
echo "<input type='submit' name='letsgo' value='Slet' />";
echo "</form>";
?>

o.s.v.
Avatar billede sabumnim Novice
10. januar 2012 - 19:16 #16
Hej igen

Nu har jeg prøvet at udkommentere nogle af koderne, og når jeg gør dette:


....
....

//while ($row = mysql_fetch_array($result) or die(mysql_error())) {
    echo "<input type='checkbox' name='id[]' id='$row[id]' value='$row[id]' /> <label for='$row[id]'>$row[name]</label>";
    echo "<p>Set hos: <a href='http://$row[linkshow]' title='$row[linkshow]'>$row[linkshow]</a></p>";
//}
?>



Så kommer der én checkbox samt en lille tekst hvor der står "Set hos:" ganske som forventet.

Jeg har på fonemmelsen at der opstår noget i denne linie:



if(isset($_POST['letsgo']))
{
    foreach($_POST['id'] as $id)
    {
        $db->query("DELETE FROM todo WHERE id=$id"); //denne linie
    }
}




Som ikke helt spiller sammen med det resterende...

Nogle bud på en løsning?
Avatar billede michael_stim Ekspert
10. januar 2012 - 19:32 #17
mysql_query("DELETE FROM todo WHERE id=".$id."", $db); //måske
10. januar 2012 - 19:41 #18
Den fangede jeg ikke helt.  Hvor kommer  echo "<p>Set hos: <a href='http://$row[linkshow]' title='$row[linkshow]'>$row[linkshow] pludselig fra?  Og i det kodeafsnit du viser forekommer submit knappen slet ikke, hvorimod det netop var den der skulle frem. 

Jeg forstår situationen, at i den kode du viser i #14 bliver de sidste par linjer ikke udført, submit knappen og form slut.  Så må vejen frem vel være at lede efter hvad det er i den bestående kode der blokkerer for at vise submitknappen.  Det kunne man gøre ved at udelade den kode der kommer lige før submit knappen for at se om submit knappen så kommer frem, og hvis ja, så sætte den slettede kode tilbage linie for linie, indtil submitknappen forsvinder igen.  Når det sker, så kan man lede efter problemer i den sidste kodelinie der blev tilføjet igen.

Det kan da godt være du hellere vil gå din egen vej.  I så fald ønsker jeg held med det.  Hvis jeg skal være med længere, så vil jeg bede dig køre denne kode og fortælle om du så fik en submit knap:

<form action="setup.php" method="post">

<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(isset($_POST['letsgo']))
{
    foreach($_POST['id'] as $id)
    {
        $db->query("DELETE FROM todo WHERE id=$id");
    }
}

$result=mysql_query("SELECT id, name, linkshow FROM todo ORDER BY name ASC");
echo "<form action='setup.php' method='post'>";
echo "<input type='submit' name='letsgo' value='Slet' />";
echo "</form>";
?>

Fortæl om du beslutter at prøve det og hvad resultatet blev.
Avatar billede sabumnim Novice
10. januar 2012 - 19:41 #19
Hej igen alle

Jeg sad lige og fiflede lidt med det selv og så kom du Michael med det sidste stik :0)

Min kode ser nu sådan ud og nu får jeg både én SLET knap og den virker, så nu kører det bare:



<?php
$db = mysql_connect("localhost", "MINBRUGER", "MITPW");
mysql_select_db("MINDB",$db);
$result = mysql_query("SELECT * FROM todo ORDER BY id DESC",$db);

if(isset($_POST['letsgo']))
{
    foreach($_POST['id'] as $id)
    {
        mysql_query("DELETE FROM todo WHERE id=".$id."", $db); //måske
    }
}


$result=mysql_query("SELECT * FROM todo ORDER BY id ASC");


?>
<form action="caap2.php" method="post">

<?php
$foresp = mysql_query("SELECT * FROM todo ORDER BY id DESC");
                    while($row = mysql_fetch_array($foresp)){
                   
        $id = $row['id'];
        $name = $row['name'];
        $linkshow = $row['linkshow'];
        echo "<input type='checkbox' name='id[]' id='$row[id]' value='$row[id]' /> <label for='$row[id]'>$row[name]</label>";
        echo "<p>Set hos: <a href='http://$row[linkshow]' title='$row[linkshow]'>$row[linkshow]</a></p>";

}

?>

<input type='submit' name='letsgo' value='Slet' />
</form>




Jeg ville egentlig gerne uddele nogle flere point til de af jer der har hjulpet, men skal så oprette et nyt sp. herinde kun til det.
I har jo hjulpet rigtig meget i løbet af dagen, så sig til hvis i ønsker nogle point, ellers tildeler jeg Michael pointene, da han tog det sidste stik hjem.
Avatar billede michael_stim Ekspert
10. januar 2012 - 19:45 #20
1. Samler ikke på point
2. Ville være uretfærdigt over for Christian at tage pointene
3. Ville nu kigge på WHERE id IN(implode(dit_array).. Så slipper du for at lave så mange kald
Avatar billede sabumnim Novice
10. januar 2012 - 19:47 #21
Ok Michael, tak alligevel, og vil lige se lidt nærmere på det med Implode :0)

Og tak igen for hjælpen.

Christian, vil du tildeles de 15 point, så kast mig et svar :0)
Avatar billede sabumnim Novice
10. januar 2012 - 20:00 #22
Til #18

Christian, jeg kørte din kode og fik en SLETTE knap frem og ikke andet.

Indsatte så de resterende echoer, og fik indhold ud som forventet.

Men ved klik på Submit knappen får jeg denne fejl:



Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\mikewishlist\caap3.php on line 12



Men som jeg skrev i #19, så har jeg fået det hele på plads, og du Christian har især haft en stor rolle i det, og eftersom Michael ikke ønsker point, så synes jeg du skal tildeles disse.

Så kunne du ikke sende mig et svar ?

Og igen en stor tak Christian
10. januar 2012 - 20:31 #23
Svar fra mig.  Og godt det lykkedes.
Avatar billede sabumnim Novice
10. januar 2012 - 20:38 #24
Ja det må du nok have lov at sige.

Ps. jeg har svaret på dine forespørgsler i #18, hvis du ikke har set det :0)

Igen en stor tak for hjælpen Chrisian


//Carsten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester