08. januar 2009 - 16:44
Der er
28 kommentarer og 1 løsning
PHP kode fejler
Hej, hvor kan jeg ikke slette flere beskeder på en gang? tænker at der er noget i vejen med slet afkrydsede beskeder Link min PHP kode: // Start formular så det er muligt at slette flere beskeder på en gang echo "<form action=\"?mode=sletbesked\" method=\"post\" name=\"sletform\">\n"; // Hent alle beskeder fra database $sql = mysql_query("SELECT * FROM `post` WHERE `modtager` = '$modtager' ORDER BY `id` DESC"); // Udskriv antal beskeder echo "<p>Antal beskeder: <b>"; $beskeder = mysql_query("SELECT COUNT(*) FROM `post` WHERE `modtager` = '$modtager'"); $antal = mysql_result($beskeder, 0); echo $antal . "</b></p>"; // Opret tabel for at få det til at se bedre ud... echo "<table cellspacing=\"0\" border=\"1\">\n"; echo "<tr><th bgcolor=\"#CCCCCC\">Afsender</th><th bgcolor=\"#CCCCCC\">Emne</th><th bgcolor=\"#CCCCCC\">Dato</th><th bgcolor=\"#CCCCCC\">Slet</th></tr>\n"; while ($row = mysql_fetch_array($sql)) { // Besked løkke echo "<tr><td align=\"center\">$row[afsender]</td><td align=\"center\"><a href=\"?mode=laesbesked&id={$row[id]}\">$row[emne]</a>"; if ($row["laest"] == "nej") echo "</td><td align=\"center\">$row[dato]</td><td align=\"center\"><input type=\"checkbox\" name=\"slet[]\" value=\"$row[id]\" /></td></tr>\n"; } echo "</table>"; echo "\n<p><a href=\"?mode=nybesked\">Skriv besked</a>\n-\n"; echo "<a href=\"java script:this.sletform.submit();\">Slet afkrydsede beskeder</a></p>\n"; // Afslut formular echo "</form>"; }
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
08. januar 2009 - 16:58
#1
Der må mangle noget kodet - der er ikke noget php i ovenstående der sletter beskeder
08. januar 2009 - 17:06
#2
Prøv i din post kode, der hvor du fanger $_GET['mode'] = sletbesked at lav: echo '<pre>'; print_r($_POST); echo '</pre>';
08. januar 2009 - 18:11
#3
øvv duer ik... og linket reagere heller ikke når man trykker på det
08. januar 2009 - 20:11
#4
Så er der jo tydeligvis noget galt.
09. januar 2009 - 15:48
#5
hmm jaa.........
09. januar 2009 - 16:33
#6
Men som straszek er inde på, du viser ikke alt kode, så det er svært at hjælpe yderligere.
10. januar 2009 - 19:13
#7
sorry, ;-) hele koden er : <?php session_start(); class community { var $user; // Brugernavn var $pass; // Password var $mode; // Mode var $db_host; /* Host var $db_user; Brugernavn var $db_pass; Password var $db_name; Navn - på database */ // Database kontakt function database() { $this->db_host = "mysql.dinhost.net"; $this->db_user = "wwwtii"; $this->db_pass = "55221166"; $this->db_name = "wwwtii"; mysql_connect($this->db_host, $this->db_user, $this->db_pass) or die("Kan ikke kontakte database: mysql_error()"); mysql_select_db($this->db_name) or die("Kan ikke vælge database: mysql_error()"); } function menu() { // Menu til dem, der er logget ind echo '<a href="/login/site/mail/" target=_parent">Indbakke</a>'; // Vis brev hvis der er ulæste beskeder if (mysql_num_rows(mysql_query("SELECT `laest` FROM `post` WHERE `laest` = 'nej' AND `modtager` = '$_SESSION[user]'")) > 0) { echo "Ny post"; } echo '<br /><a href="/login/site/forum/" target=_parent">Forum</a>'; echo '<br /><a href="/login/site/alluse/" target=_parent">Brugerliste</a>'; echo '<br /><a href="?mode=logout" target=_parent">Log ud</a>'; } // Login procedure function login($user, $pass) { $this->user = stripslashes($user); $this->pass = stripslashes($pass); if (!$user || !$pass) { // Hvis intet brugernavn ... return false; } else { $sql = mysql_query("SELECT * FROM `login` WHERE `user` = '$this->user' AND `pass` = '$this->pass'"); $row = mysql_fetch_array($sql); if (mysql_num_rows($sql) == 1) { // Hvis $sql returnerer 1 række ... // Opdater tid for online $time = time(); mysql_query("UPDATE `login` SET `online` = '$time' WHERE `user` = '$this->user'"); // Autologin procedure if ($_POST["auto"]) { setcookie("user", "$this->user", time()+1209600*2); setcookie("pass", "$this->pass", time()+1209600*2); } $_SESSION["user"] = $row["user"]; $_SESSION["pass"] = $row["pass"]; $_SESSION["log"] = true; $this->user = $row["user"]; $this->pass = $row["pass"]; echo "Velkommen <b>$this->user</b><hr />"; $this->menu(); return true; } else { echo "Forkert brugernavn eller password"; echo "<meta http-equiv=\"refresh\" content=\"2; url=?mode=logout\" />"; } } } function indbakke($modtager) { // Start formular så det er muligt at slette flere beskeder på en gang echo "<form action=\"?mode=sletbesked\" method=\"post\" name=\"sletform\">\n"; // Hent alle beskeder fra database $sql = mysql_query("SELECT * FROM `post` WHERE `modtager` = '$modtager' ORDER BY `id` DESC"); // Udskriv antal beskeder echo "<p>Antal beskeder: <b>"; $beskeder = mysql_query("SELECT COUNT(*) FROM `post` WHERE `modtager` = '$modtager'"); $antal = mysql_result($beskeder, 0); echo $antal . "</b></p>"; // Opret tabel for at få det til at se bedre ud... echo "<table cellspacing=\"0\" border=\"1\">\n"; echo "<tr><th bgcolor=\"#CCCCCC\">Afsender</th><th bgcolor=\"#CCCCCC\">Emne</th><th bgcolor=\"#CCCCCC\">Dato</th><th bgcolor=\"#CCCCCC\">Slet</th></tr>\n"; while ($row = mysql_fetch_array($sql)) { // Besked løkke echo "<tr><td align=\"center\">$row[afsender]</td><td align=\"center\"><a href=\"?mode=laesbesked&id={$row[id]}\">$row[emne]</a>"; if ($row["laest"] == "nej") echo "</td><td align=\"center\">$row[dato]</td><td align=\"center\"><input type=\"checkbox\" name=\"slet[]\" value=\"$row[id]\" /></td></tr>\n"; } echo "</table>"; echo "\n<p><a href=\"?mode=nybesked\">Skriv besked</a>\n-\n"; echo "<a href=\"java script:this.sletform.submit();\">Slet afkrydsede beskeder</a></p>\n"; // Afslut formular echo "</form>"; } function brugerliste() { $sql = mysql_query("SELECT * FROM `login` ORDER BY `user` ASC"); echo "<table border=\"1\" cellspacing=\"0\">\n"; echo "<tr><th bgcolor=\"#CCCCCC\">Brugernavn</th><th bgcolor=\"#CCCCCC\">Oprettet</th><th bgcolor=\"#CCCCCC\">Status</th></tr>\n"; while ($row = mysql_fetch_array($sql)) { // Brugernavn- og tid-variabler $user = $row["user"]; $aktuel_tid = time(); $bruger_tid = $row["online"]; // Udskriv data echo "<tr><td align=\"center\">$user</td><td align=\"center\">$row[dato]</td><td align=\"center\">"; if ($bruger_tid < $aktuel_tid - 60) { echo "<font color=\"#FF0000\">Offline</font>"; } else { echo "<font color=\"#008000\">Online</font>"; } echo "</td></tr>"; } } function laesbesked() { $id = $_GET["id"]; $modtager = $_SESSION["user"]; if (!id || !$modtager) { header("location: ?mode=index"); exit; } $sql = mysql_query("SELECT * FROM `post` WHERE `modtager` = '$modtager' AND `id` = $id"); $row = mysql_fetch_array($sql); echo "<table cellspacing=\"0\" border=\"1\">\n"; echo "<tr><td bgcolor=\"#CCCCCC\">Afsender:</td><td>$row[afsender]</td></tr>\n"; echo "<tr><td bgcolor=\"#CCCCCC\">Emne:</td><td>$row[emne]</td></tr>\n"; echo "<tr><td bgcolor=\"#CCCCCC\">Dato:</td><td>$row[dato]</td></tr>\n"; echo "</table>"; echo "<hr />"; // Behandl afsender $afsender = $row["afsender"]; $afsender = stripslashes($afsender); $afsender = htmlspecialchars($afsender); // Behandl emne $emne = $row["emne"]; $emne = stripslashes($emne); $emne = htmlspecialchars($emne); // Behandl besked før udskrift $besked = $row["besked"]; $besked = stripslashes($besked); $besked = htmlspecialchars($besked); // Deaktiver html $besked = nl2br($besked); // Aktiver linieskift // Tillad phpBB tags $besked = str_replace("", "<b>", $besked); $besked = str_replace(" ", "</b>", $besked); $besked = str_replace("", "<u>", $besked); $besked = str_replace(" ", "</u>", $besked); $besked = str_replace("", "<i>", $besked); $besked = str_replace(" ", "</i>", $besked); echo $besked; // Udskriv besked echo "<hr />\n"; echo "<a href=\"?mode=sletbesked&id=$id\">Slet</a> - <a href=\"?mode=nybesked&modtager=$afsender&emne=Re: {$emne}\">Besvar</a>"; echo "<br/><br/><a href='?mode=indbakke'>Tilbage</a>"; mysql_query("UPDATE `post` SET `laest` = 'ja' WHERE `id` = $id"); } function nybesked() { // Besked variabler $modtager = stripslashes($_POST["modtager"]); $afsender = $_SESSION["user"]; $emne = $_POST["emne"]; $besked = $_POST["besked"]; $dato = date("d/m-Y - H:i"); // Send besked hvis den er skrevet if ($besked) { mysql_query("INSERT INTO `post` (`modtager`, `afsender`, `emne`, `dato`, `besked`, `laest`) VALUES ('$modtager', '$afsender', '$emne', '$dato', '$besked', 'nej')"); echo "<p>Beskeden er sendt til <b>$modtager</b></p>"; } // Formular til at skrive besked med echo "<form action=\"?mode=nybesked\" method=\"post\">\n"; echo "<table>\n"; echo "<tr>\n"; echo "<td>Modtager:</td><td>"; // Kør alle brugere igennem $sql = mysql_query("SELECT `user` FROM `login` ORDER BY `user` ASC"); echo "<select name=\"modtager\">\n"; while ($row = mysql_fetch_array($sql)) { echo "<option value=\"$row[user]\""; if ($_GET["modtager"] == $row["user"]) { echo " selected=\"selected\""; } echo ">" . stripslashes($row["user"]) . "</option>\n"; } echo "</select></td></tr>\n"; echo "<tr><td>Emne:</td><td><input type=\"text\" name=\"emne\" class=\"field\" value=\"" . $_GET["emne"] . "\" /></td></tr>\n"; echo "<tr><td>Besked:</td><td><textarea name=\"besked\" cols=\"35\" rows=\"8\"></textarea></td></tr>\n"; echo "<tr><td></td><td><input type=\"submit\" value=\"Send besked\" /></td></tr><n</table>\n</form>"; echo "<a href='?mode=indbakke'>Tilbage</a>"; } function sletbesked() { $slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { foreach ($slet as $val) { mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!"); } } else { mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked!"); } return true; } function opret() { $user = addslashes(htmlentities($_POST["user"])); $pass = addslashes(htmlentities($_POST["pass"])); $mail = addslashes(htmlentities($_POST["mail"])); $hjemmeside = addslashes(htmlentities($_POST["hjemmeside"])); $dato = date("d/m-Y - H:i"); if ($user) { if (!ereg("[A-z]", $user)) { $fejl[] = "Dit brugernavn er ugyldig"; } if (!ereg("[A-z]", $pass)) { $fejl[] = "Dit password er ugyldig/optaget"; } if (!ereg("(^[A-z0-9_.]+)([A-z0-8_-]*)(@+)([A-z0-9]*)(\.+)([A-z]{2,}$)", $mail)) { $fejl[] = "Din e-mail adresse er ugyldig"; } if (mysql_num_rows(mysql_query("SELECT * FROM `login` WHERE `user` = '$user'")) == 1) { $fejl[] = "Brugernavnet er optaget"; } if (is_array($fejl)) { for ($i = 0; $i < count($fejl); $i++){ echo "<li>$fejl[$i]</li>\n"; } echo "</ul>"; echo "<a href='/login/?mode=opret'>Tilbage</a>"; exit; } else { echo "Din bruger er nu oprettet."; mysql_query("INSERT INTO `login` (`user`, `pass`, `mail`, `hjemmeside`, `dato`, `online`) VALUES ('$user', '$pass', '$mail', '$hjemmeside', '$dato', '0')") or die("Kunne ikke oprette bruger: mysql_error()"); } } if ($_SESSION["log"] == true) { return false; } else { echo "<form action=\"?mode=opret\" method=\"post\">"; echo "<table>"; echo "<tr>Brugernavn:<br/><input type=\"text\" name=\"user\"/></tr>"; echo "<tr>Password:<br/><input type=\"password\" name=\"pass\"/></tr>"; echo "<tr>E-mail:<br/><input type=\"text\" name=\"mail\"/></tr>"; echo "<tr><input type=\"submit\"value=\"Opret\"/></tr></table></form>"; echo "<a href='/login/'>Tilbage</a>"; } } function loginformular() { // Formular til at logge ind echo "<form action=\"?mode=login\" method=\"post\">"; echo "<table>"; echo "<tr>Brugernavn:<br/><input type=\"text\" name=\"user\" class=\"field\"/></tr>"; echo "<tr>Password:<br/><input type=\"password\" name=\"pass\" class=\"field\"/></tr>"; echo "<tr><input type=\"submit\" value=\"Login\" /> <input type=\"checkbox\" name=\"auto\" value=\"true\"/>Autologin</tr>"; echo "</table></form>"; echo "</table>\n</form>"; // Link til at oprette bruger echo "<a href=\"?mode=opret\">Opret bruger</a>"; } } // Tilslut klasse $community = new community; $community -> database(); // Opret kontakt til database // Opdater if ($_SESSION["log"]) { $time = time(); $user = $_SESSION["user"]; mysql_query("UPDATE `login` SET `online` = '$time' WHERE `user` = '$user'"); } // Opret $mode $mode = $_GET["mode"]; if (!$mode) { $mode = "index"; } // Udfør kommandoer ved hjælp af $mode ... switch($mode) { case "opret": if ($community -> opret() === false) { exit("Du er allerede logget ind på brugeren <b>" . $_SESSION["user"] . "</b></body></html>"); } break; case "login": if ($_SESSION["log"]) { $community -> login($_SESSION["user"], $_SESSION["pass"]); } elseif ($_COOKIE["user"]) { $community -> login($_COOKIE["user"], $_COOKIE["pass"]); } else { $community -> login($_POST["user"], $_POST["pass"]); } break; case "brugerliste": $community -> brugerliste(); break; case "indbakke": if ($_SESSION["log"]) { $community -> indbakke($_SESSION["user"]); exit("</body></html>"); } else { header("location: ?mode=index"); exit; } break; case "nybesked": if ($_SESSION["log"]) { $community -> nybesked(); exit("</body></html>"); } else { header("location: ?mode=index"); exit; } break; case "laesbesked": if ($_SESSION["log"]) { $community -> laesbesked(); exit("</body></html>"); } else { header("location: ?mode=index"); exit; } break; case "sletbesked": if ($_SESSION["log"]) { if ($community -> sletbesked()) { header("location: ?mode=indbakke"); exit("</body></html>"); } } else { header("location: ?mode=index"); exit; } break; case "logout": header("location: ?mode=all-logout"); exit; break; case "all-logout": { // Tøm session session_unset(); // Slet eventuelle cookies setcookie("user", "", time()-3600); setcookie("pass", "", time()-3600); // Redirect til loginformular header("location: /"); exit; } break; default: { if ($_COOKIE["user"]) { $community -> login($_COOKIE["user"], $_COOKIE["pass"]); exit; } if ($_SESSION["log"]) { $community -> login($_SESSION["user"], $_SESSION["pass"]); exit; } else { $community -> loginformular(); exit; } } } mysql_close(); echo "</body></html>"; ?>
10. januar 2009 - 20:07
#8
Prøv at lav noget debug omkring: case "sletbesked": if ($_SESSION["log"]) { if ($community -> sletbesked()) { header("location: ?mode=indbakke"); exit("</body></html>"); } } else { header("location: ?mode=index"); exit; } break; Bliver denne kode afviklet ?
10. januar 2009 - 21:07
#9
hvad er debug? og hva' mener du med afviklet ? startet på php for ca. 2 uger siden hehh :)
10. januar 2009 - 21:36
#10
Uha, debug er fejlsøgning. Det kunne f.eks. være: case 'sletbesked': echo 'Jeg er lige under SLETBESKED'; Så ved du ihf. den er kaldt. Og så fortsætte og f.eks. også udskrive variabler.
10. januar 2009 - 22:13
#11
aha :), når men må hellere komme i gang så :)
12. januar 2009 - 15:23
#12
har prøvet hele dagen og kan bare ikke finde en løsning
12. januar 2009 - 15:24
#13
Bliver sletbesked koden kaldt korrekt ?
12. januar 2009 - 15:25
#14
hov hvor skal man henvendesig når man har kommet til at tilføje nogle private oplysninger?
12. januar 2009 - 15:31
#15
Du skal nok bare skynde dig at rette kodeord på din server. Alternativt kontakt din udbyder og forklar den "problemet".
12. januar 2009 - 15:33
#16
Som sagt tror jeg lidt at det er oppe omkring javascript linket hvor det er galt men aner ikke noget om javascript
12. januar 2009 - 19:21
#17
Prøv at ret dit this.sletbesked.submit til: document.sletform.submit();
12. januar 2009 - 20:38
#18
hmm, den kom da en tan vidre... nu har den kunne finde ud af at lave Warning... Warning: Invalid argument supplied for foreach() in E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\index.php on line 258 Warning: Cannot modify header information - headers already sent by (output started at E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\index.php:258) in E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\index.php on line 428 linie 258 ser sådan ud: function sletbesked() { $slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { foreach ($slet as $val) { <-- linie 258 mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!"); } } else { mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked!"); } return true; } og linie 428 ser sådan ud: case "sletbesked": if ($_SESSION["log"]) { if ($community -> sletbesked()) { header("location: ?mode=indbakke"); <-- linie 428 exit("</body></html>"); } } else { header("location: ?mode=index"); exit; } break;
12. januar 2009 - 20:49
#19
Prøv så at smid min kode på igen: echo '<pre>'; print_r($_POST); echo '</pre>'; Hvad giver den af output ?
12. januar 2009 - 20:56
#20
Array ( [slet] => 10 )
12. januar 2009 - 21:16
#21
Og du tjekke kun 1 besked af ikke ?
12. januar 2009 - 21:19
#22
12. januar 2009 - 21:23
#23
ops glemte lige atdu ikke kan da du ikke har en bruger :)
evnt så brug følgene:
brugernavn: admin
kodeord: 5216
login :
http://piimpmyartoo.tii.dk/login/ og derefter indbakke
12. januar 2009 - 21:25
#24
... sorry, jov jeg tjekkede kun en besked af :)
13. januar 2009 - 08:22
#25
Du har ikke lavet dine checkboxe til et array. Se f.eks.: <input name="slet" value="12" type="checkbox"> Den skal være: <input name="slet[]" value="12" type="checkbox">
13. januar 2009 - 18:46
#26
huraaaa... den kan finde ud af slette nu :) men hva er der galt med headeren på line 431? Warning: Cannot modify header information - headers already sent by (output started at E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\index.php:427) in E:\hjemmesider\wwwtii\piimpmyartoo.tii.dk\login\index.php on line 431 line 431 --> case "sletbesked": if ($_SESSION["log"]) { echo '<pre>'; print_r($_POST); echo '</pre>'; if ($community -> sletbesked()) { header("location: ?mode=indbakke"); <-- line 431 exit("</body></html>"); } } else { header("location: ?mode=index"); exit; } break; case "logout": header("location: ?mode=all-logout"); exit; break;
13. januar 2009 - 19:06
#27
har fået der lavet :)
i øvrigt at det et super godt hjælpemiddel du har på:
http://www.codebreaker.dk/exp/ giv bare et svar vis du vil ha' point :)
13. januar 2009 - 21:14
#28
Fejlen på linje 431, skyldes nok du sender data afsted før. Måske min echo '<pre>'; ting... Og glad for du synes codebreaker.dk/exp/ er brugbar. :o) Og du får også et svar.
13. januar 2009 - 22:02
#29
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling