emtonMedlem sedan juni 200589 inlägg
Jag håller på att göra ett annonsformulär. Icke godkända annonser får 0 i mysql databasen. Har en sida där admin ska kunna ändra dessa till 1 efter att man kollat på dem. Men jag vet får inte till hur jag ska skriva. Tanken är att man kryssar i en checkbox framför den annons som ska godkännas och när man klickar på godkänd så blir 0 till 1.
$sql = "SELECT * FROM annonser WHERE godkand = 0";
// Ställ frågan till databasen. Om det inte går: avsluta allt och skriv ut felmeddelan
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"admin.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>Välj</th><th>id</th><th>Förnamn</th><th>Efternamn</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"godkanna\" value=\"" . $row['id'] . "\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_godkanna\" value=\"1\" />";
echo "<input type=\"submit\" value=\"Godkänn\" />";
echo "</form>";
$sql = "UPDATE annonser ";
GildebrandMedlem sedan juni 2009918 inlägg
Eftersom det kan vara flera poster som inte är godkända, så måste du ha ett unikt namn på checkboxen för varje rad. På sidan admin.php så loopar du igenom alla "checkboxar", och uppdaterar databasen.
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" id='annons_" . $row['id'] ."' value=\"" . $row['id'] . "\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
foreach ($_GET['annons'] as $checkbox => $annons)
{
echo $annons;
echo $checkbox;
}
GildebrandMedlem sedan juni 2009918 inlägg
Tänkte halvknasigt där :)
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"$row[id']\" value=\"" . $row['id'] . "\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
och admin.php
foreach ($_POST as $checkbox => $text)
{
echo "$checkbox = $text<br/>";
}
Borde vara tillräckligt för att du ska kunna göra något av det :)
rhdfMedlem sedan okt. 2007447 inlägg
hmm om jag inte minns helt fel så går får man väl en "array" av värden om man har flera checkboxar med samma namn men olika value
tex.
<input type="checkbox" name="toUpdate" value="1" />
<input type="checkbox" name="toUpdate" value="2" />
<input type="checkbox" name="toUpdate" value="3" />
<input type="checkbox" name="toUpdate" value="4" />
detta kommer då skickas som 1,2,3,4
vilket gör att man kan peta in det direkt sin SQL
UPDATE tabellen SET field=1 WHERE id IN($_GET['annons'])
nu är min PHP lite risig men.. ja idén är den samma
MickeA.comMedlem sedan feb. 20034 528 inlägg
rhdf skrev:
hmm om jag inte minns helt fel så går får man väl en "array" av värden om man har flera checkboxar med samma namn men olika value
Stämmer bra det! Bara att döpa varje checkbox till samma sak och använda annonsens id i databasen som id på checkboxen. Endast de som är ikryssade kommer med i arrayen så kör en enkel:
foreach($_POST['checkbox'] as $checkbox as $item){
mysql_query(UPDATE tabell SET godkänd = 1 WHERE annons_id = " . $item . " LIMIT 1");
}
Och så glömmer vi inte att skydda oss mot SQL-injektioner, va!?
/R
För att få inputvärden som en array, måste du ha med [] efter namnet, alltså:
<input type="checkbox" name="cbox[]" value="1" />
<input type="checkbox" name="cbox[]" value="2" />
<input type="checkbox" name="cbox[]" value="3" />
<input type="checkbox" name="cbox[]" value="4" />
<input type="checkbox" name="cbox[]" value="5" />
Och sen kör du foreach($_POST['cbox'] as... enligt exemplet ovan...
emtonMedlem sedan juni 200589 inlägg
Tack snälla allihopa för alla svar. Men oj vad rörigt det blev för en gröngöling på området:). Jag vet inte hur jag ska peta in era förslag. Jag vet ju inte hur många rader det kommer att vara, det beror ju på hur många icke godkända annonser det är. Hur jag än vrider på det så funkar det inte. Jag har ju ingen html i koden ovan så hur är tanken här. Allt ligger på samma sida för adminen. Tror jag har lite svårt att förklara, fråga mig gärna så ska jag försöka förklara bättre hur det är tänkt om det behövs. Jag är jättetacksam för hjälp.
GildebrandMedlem sedan juni 2009918 inlägg
Hjälper dig gärna, om du säger med vad jag kan hjälpa dig med.
emtonMedlem sedan juni 200589 inlägg
Gildebrand skrev:
Hjälper dig gärna, om du säger med vad jag kan hjälpa dig med.
Jag får inget av alla bra förslag ovan att funka. Förmodligen sätter jag in det fel. Jag förstår lite av principen med checkboxarna men var i min kod skulle jag sätta in det? Var sätter jag in foreachen?
GildebrandMedlem sedan juni 2009918 inlägg
Var nog för att de just bara var exempel.
Micke hade en lösning som jag inte kände igen där han skrev
foreach($_POST['checkbox'] as $checkbox as $item)
Funkar säkert, men har aldrig sett att man använt sig av as två gånger. Brukar köra med
$_POST['checkbox'] as $checkbox => $item
Mitt exempel funkar, men bara om man postar data för checkboxarna, och inget annat. Tror du får kolla igenom koden lite, för du verkar kunna PHP ganska bra, eller?
Ska prova själv med Mickes exempel, och återkommer sen.
GildebrandMedlem sedan juni 2009918 inlägg
$sql = "SELECT * FROM annonser WHERE godkand = 0";
// Ställ frågan till databasen. Om det inte går: avsluta allt och skriv ut felmeddelan
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"save.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>Välj</th><th>id</th><th>Förnamn</th><th>Efternamn</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"list[]\" value=\"$row['id']\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_godkanna\" value=\"1\" />";
echo "<input type=\"submit\" value=\"Godkänn\" />";
echo "</form>";
$sql = "UPDATE annonser ";
save.php
<?php
foreach ($_POST['list'] as $text)
{
mysql_query("sqlfråga");
}
?>
emtonMedlem sedan juni 200589 inlägg
Gildebrand skrev:
$sql = "SELECT * FROM annonser WHERE godkand = 0";
// Ställ frågan till databasen. Om det inte går: avsluta allt och skriv ut felmeddelan
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"save.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>Välj</th><th>id</th><th>Förnamn</th><th>Efternamn</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"list[]\" value=\"$row['id']\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_godkanna\" value=\"1\" />";
echo "<input type=\"submit\" value=\"Godkänn\" />";
echo "</form>";
$sql = "UPDATE annonser ";
save.php
<?php
foreach ($_POST['list'] as $text)
{
mysql_query("sqlfråga");
}
?>
Tack! Har inte provat ännu men kan man inte få in foreachen på samma sida?
GildebrandMedlem sedan juni 2009918 inlägg
Självklart kan du det.
if(isset($_POST['list']))
{
foreach ($_POST['list'] as $text)
{
mysql_query("sqlfråga");
}
}
resten av koden här
Se bara till att posta till samma sida.
emtonMedlem sedan juni 200589 inlägg
Gildebrand skrev:
Självklart kan du det.
if(isset($_POST['list']))
{
foreach ($_POST['list'] as $text)
{
mysql_query("sqlfråga");
}
}
resten av koden här
Se bara till att posta till samma sida.
Min hjärna har förmodligen stannat av för i kväll, men var stoppar jag in if-satsen? Hur jag än skriver så blir det fel. Sen är jag inte säker på att jag får rätt på sql-satsen heller. Slängde in det längst ner just nu, flytta gärna på det om du vill :). En vacker dag ska även jag klara ut detta, är inte bra på php men kan ju alltid bli. Det går faktiskt framåt om än med myrsteg...
$sql = "SELECT * FROM annonser WHERE godkand = 0";
// Ställ frågan till databasen. Om det inte går: avsluta allt och skriv ut felmeddelan
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"admin.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>Välj</th><th>id</th><th>Förnamn</th><th>Efternamn</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"list[]\" value=\"$row['id']\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_godkanna\" value=\"1\" />";
echo "<input type=\"submit\" value=\"Godkänn\" />";
echo "</form>";
if(isset($_POST['list']))
{
foreach ($_POST['list'] as $text)
{
mysql_query("UPDATE annonser SET godkand = 1 WHERE id = " . $text . "");
}
}
GildebrandMedlem sedan juni 2009918 inlägg
Spelar inte så stor roll vars du lägger den. Lägg koden med if-satsen innan det andra stycket av din kod bara.
EDIT: Vad gäller SQLen, så är det ganska enkelt, if(isset($_POST['list']))
{
foreach ($_POST['list'] as $text)
{
mysql_query("Update annonser set Checked=1 where ID=$text");
}
}
Inte helt hundra på att det ska se ut så i MySql, men google är din vän :)
rhdfMedlem sedan okt. 2007447 inlägg
inte för att röra till det för emton, men behövs verkligen den där for each loopen
gör inte den att man skickar en query / checkbox mot databasen? med IN får man bara EN query
http://fjolnir.ebpatour.eu/fb/chktest.asp
GildebrandMedlem sedan juni 2009918 inlägg
Sedär, det var ju en snygg lösning. Kan skriva ihop ett exempel i PHP åt dig emton.
GildebrandMedlem sedan juni 2009918 inlägg
if (isset($_POST['list'])){
$toupdate = implode(",",$_POST['list']);
if (mysql_query("Update annonser SET checked=1 WHERE id IN($topupdate)")){
echo "Sparat";
}
else{
echo "Ett fel uppstod, försök igen";
}
$sql = "SELECT * FROM annonser WHERE godkand = 0";
// Ställ frågan till databasen. Om det inte går: avsluta allt och skriv ut felmeddelan
$sql_result = mysql_query ($sql) or die ("Query error.");
echo "<form action =\"admin.php\" method=\"post\">";
echo "<table border=\"1\" cellpadding=\"10\">";
echo "<tr><th>Välj</th><th>id</th><th>Förnamn</th><th>Efternamn</th></tr>";
while ($row = mysql_fetch_assoc ($sql_result)) {
echo "<tr>";
echo "<td><input type=\"checkbox\" name=\"list[]\" value=\"$row['id']\" /></td>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type=\"hidden\" name=\"vill_godkanna\" value=\"1\" />";
echo "<input type=\"submit\" value=\"Godkänn\" />";
echo "</form>";
Har inte provat det själv, men borde funka. Om inte, kolla vad du får för felmeddelande.
rhdfMedlem sedan okt. 2007447 inlägg
vad händer om man istället för att ha name=\"list[]\" har name=\"list\"
och bara stoppar in $_POST['list'] direkt i sql-satsen?
GildebrandMedlem sedan juni 2009918 inlägg
Då får man nog bara det sista post-värdet, då de skriver över varandra om de inte är i ett array.
rhdfMedlem sedan okt. 2007447 inlägg
Noterade det
.. php är rubbat ibland;)