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 ";
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.
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å:
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.
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?
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.
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 . "");
}
}
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