Vinnaren i pepparkakshustävlingen!
2010-11-13, 15:02
  #1
Medlem
Mindstormers avatar
Citat:
Ursprungligen postat av Inquizarus
Ja precis!

Låt oss säga att jag har ett fält där jag skriver nyheten.. under finns det checkboxar
för varje medlem.. de som jag bockar för skall kunna se nyheten.
Skulle själv skapa en sträng av användarID som kan visa nyheten då, strängen skulle kunna se ut på följande sätt:

Kod:
1~3~4~7~9

Skapas på följande sätt:
Kod:
$idArray = array(13479);

$idArray implode("~"$idArray); 

För att sedan få ut ett specifikt ID ur en nyhet så kan du göra så här:
Kod:
$idArray "1~3~4~7~9";

$idArray explode("~"$idArray);

//$idArray ser nu ut så här: array(1, 3, 4, 7, 9) 
Citera
2010-11-14, 23:24
  #2
Medlem
Tack för all hjälp!

Har nu fixat detta, vet inte om jag gjorde det snyggt men det funkar i alla fall.

Har nu 3 tabeller

spelare, news samt reglering

spelare har user_id, namn, losenord
news har news_id, news_title, news_text
reglering har news_id_regl, user_id

Koden ser ut som följande..

Kod:
function nyheter()
{
include("db.php"); // Inkluderar databaskoppling
$id = $_SESSION['ticket']; // sessionen sätts vid inloggningen, vet inte om det är rätt sätt att ha //koll på vilka som är online dock

$sql = "SELECT * FROM reglering WHERE user_id = '$id'"; //Fixa info om vem som får se vad
$query = mysql_query($sql); 


while ($result = mysql_fetch_assoc($query)) //För varje rad som fanns för inloggad  individ...
{
$nyhets_id = $result['news_id_regl']; //För att undvika problem spara om variabel från array..
$sql2 = "SELECT * FROM news WHERE news_id = '$nyhets_id' "; //Välj nyheter utifrån vilka som //var tillåtna


$query2 = mysql_query($sql2);
$row = mysql_fetch_assoc($query2);

echo '<h1>' . $row['news_title'] . '</h1>' . $row['news_text'] . '<br />'; //Släng ut nyheter
}
}


Blandar lite engelskt och svenskt i variabelnamn osv, men gör inte så mycket då det är jag själv som skall hantera det så sett. Vissa saker låter bättre på engelska vissa på svenska.

Om någon har tips på förbättring säg till!

Nästa steg är att göra funktionen för att posta nyheter, det är inte speciellt svårt men skall ju även generera checkboxar för varje spelare med som skall tas med i beaktning osv..
Citera
2010-11-15, 11:30
  #3
Medlem
Jag har nu gjort om det till att använda join funktion..
Läste i kursboken att man inte måste använda sig utav just orden INNER JOIN utan att man kunde göra som jag gjort här!

Tar fortfarande emot råd osv.

Kod:
function nyheter2() //test
{
include("db.php");
$id = $_SESSION['ticket'];
$sql = "SELECT * FROM news, reglering WHERE news_id = news_id_regl AND reglering.user_id = '$id'";
$query = mysql_query($sql);

while ($row = mysql_fetch_assoc($query))
{
echo '<h1>' . $row['news_title'] . '</h1>' . $row['news_text'] . '<br />';
}

}

Blev lite kortare kod i alla fall, känns renare.
Citera
2010-11-17, 00:02
  #4
Medlem
Så.. nu har jag kommit en bra bit på sidans funktioner..
Men har tyvärr stött på patrull.

När jag skall skriva en nyhet nu så skriver jag ut ett formulär med funktionen nedanför.

Kod:
function news_post()
{
echo'
<form action="index.php" method="POST" name="ny_nyhet">
<label>Nyhetens övertext</label><br />
<input type="textbox" name="nyhet_titel" /><br />
<label>Nyhetens innehåll</label><br />
<textarea cols="80" rows="15" name="nyhet_text"></textarea><br />
<br />

';

require_once("db.php");
$sql = "SELECT * FROM spelare";
$query = mysql_query($sql);

while ($result = mysql_fetch_assoc($query))
{
echo '<input type="checkbox" namn="'. $result['user_id'] .'" value="'. $result['user_id'] .'" />' . $result['namn'] . '<br />';
}
echo '<input style="float:right;" class="knapp" type="submit" name="skicka" value="Skicka">';
echo '</form>';
}


Allt väl än så länge, det skrivs ut checkboxar för varje medlem i databasen.

Men lite värre med att skicka allt..
Nyheten skrivs till databasen som den skall, men har svårt för att kolla igenom checkboxarna..

jag skulle vilja loopa igenom alla boxar som skapas och för varje som är "checked" spara det user_id (som symboliseras av checkboxens value) som boxen har i databasen tillsammans med det news_id den senaste nyheten har.

Usch vad förvirrande haha.

Någon som har ett förslag? Eller ett tips på en kontroll som gör det lättare att hantera än checkboxar?
Citera
2010-11-17, 01:21
  #5
Medlem
FiskOdlarns avatar
Citat:
Ursprungligen postat av Inquizarus
Någon som har ett förslag?
Kod:
namn="'. $result['user_id'] 

Du vill nog att det ska stå "name" istället för namn
Citera
2010-11-17, 11:57
  #6
Medlem
Tack för att du påpekade det ^^ ett uppenbart fel.. doh..

Dock så kvarstår problemet om hur jag skall loopa igenom checkboxarna..

HTML-kod:
<form action="index.php?sida=admin" method="POST" name="news_post">
<input type="checkbox" name="1" value="1" />
<input type="checkbox" name="2" value="2" />
<input type="submit" name="skicka" value="Skicka!" />
</form>

När detta skickas, hur skall man loopa igenom med PHP så att den först kollar om checkbox med namn 1 är satt, om den är det lägg in dess värde i databasen.
Sen går den vidare till box 2 och gör samma sak.. osv osv..

Är det möjligt?
Citera
2010-11-17, 12:06
  #7
Medlem
gadzooxs avatar
För det första är det riktigt fult att döpa checkboxar till "1", "2" osv, jag syftar på attributet "name". Jag funderar på om html-standarden ens tillåter namn som enbart består av siffror.

För det andra så blir det som du erfarit svårt för PHP-scriptet att veta vilka fält som postades när de inte har några givna namn. Visst kan man iterera igenom $_POST-arrayen för att försöka leta reda på rätt fält, men spontant känns det väldigt fult.

Då är det bättre att ge dina checkboxar exakt samma namn, nämligen name="user[]", notera klamrarna. När formuläret postats är PHP smart nog att tack vare klamrarna inse att det är en array det handlar om och skapar då en array i $_POST["user"] som du kan iterera igenom.

Alltså HTML:
HTML-kod:
<form action="index.php?sida=admin" method="POST" name="news_post">
<input type="checkbox" name="user[]" value="1" />
<input type="checkbox" name="user[]" value="2" />
<input type="submit" name="skicka" value="Skicka!" />
</form>

och PHP:
Kod:
foreach ($_POST["user"] as $userid)
{
    
// $userid får värdet 1, 2 osv för varje varv i loopen.

Givetvis bör du även validera/escapea input samt lägga till felhantering, typ kolla att $_POST["user"] är definierad och verkligen är en array innan du försöker iterera igenom den.
Citera
2010-11-17, 13:28
  #8
Medlem
Skall kolla igenom det du sagt men vill bara påpeka att jag inte använder mig utav name="1" på boxarna osv utan jag använder ett utloopat namn ifrån databasen med och sätter value="" med användar idt.

Så som jag skrev det så var det bara ett exempel
Citera
2010-11-17, 14:10
  #9
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Inquizarus
Skall kolla igenom det du sagt men vill bara påpeka att jag inte använder mig utav name="1" på boxarna osv utan jag använder ett utloopat namn ifrån databasen med och sätter value="" med användar idt.
Det förstår jag väl att du loopar ut en bunt checkboxar. PHP-koden du postade tidigare gör precis detta, vilket resulterar i just den html du visade.
Citat:
Kod:
while ($result mysql_fetch_assoc($query))
{
     echo 
'<input type="checkbox" namn="'$result['user_id'] .'" value="'$result['user_id'] .'" />' $result['namn'] . '<br />'

Problemet jag påpekade är att name="1" inte är ett snyggt namn på ett <input>-fält. Däremot är name="user[]" value="1" helt ok. Du måste skilja på ett fälts namn och dess värde.
Citera
2010-11-17, 14:57
  #10
Medlem
Ok, har gjort om koden litet nu då och jag har fått det till att i alla fall känna av
de boxar som är ifyllda. Detta lyckades jag med tack vare att du tipsade om att man kan göra
ett boxnamn till en array..

Allt väl dock så undrar jag hur jag får fatt på värdet hos den box som var ifylld?

name="spelare[]" använder jag i boxloopen nu..

Kod:
foreach ($_POST['spelare'] as $id)
 {
    if (isset($_POST['spelare']))
      {
         $user_id = $_POST[spelare];
         echo $user_id;

      }
    $id++;
 }

Har jag då fyllt i 2 spelares boxar så resulterar det i att skriptet ekar ut arrayarray
vilket jag innebär är för att arrayen är tom?

Känner mig hyffsat dum här nu.. men just arrayer har jag haft svårt att greppa i hur man hanterar
dem..
Citera
2010-11-18, 21:27
  #11
Medlem
Citat:
Ursprungligen postat av Inquizarus
Ok, har gjort om koden litet nu då och jag har fått det till att i alla fall känna av
de boxar som är ifyllda. Detta lyckades jag med tack vare att du tipsade om att man kan göra
ett boxnamn till en array..

Allt väl dock så undrar jag hur jag får fatt på värdet hos den box som var ifylld?

name="spelare[]" använder jag i boxloopen nu..

Kod:
foreach ($_POST['spelare'] as $id)
 {
    if (isset(
$_POST['spelare']))
      {
         
$user_id $_POST[spelare];
         echo 
$user_id;

      }
    
$id++;
 } 

Har jag då fyllt i 2 spelares boxar så resulterar det i att skriptet ekar ut arrayarray
vilket jag innebär är för att arrayen är tom?

Känner mig hyffsat dum här nu.. men just arrayer har jag haft svårt att greppa i hur man hanterar
dem..


Din kod är galen. Du behöver läsa på om arrayer. Jag orkar inte skriva det som redan finns skrivet någonstans men kolla på din kod.

Kod:
$user_id $_POST[spelare];  // $user_id bestämmer du ju in foreach loopen => $id
$id++; //Vet inte om du vill räkna varje foreach eller vad? 

Borde vara:

Kod:
$_POST = array("spelare" => array(1,2,3,4,5,6,7,8,9));

foreach (
$_POST['spelare'] as $id)
 {
      echo 
$id;
 } 
Citera
2010-11-19, 15:04
  #12
Medlem
Tack för att du påpekar det jag redan påpekat, suger på arrayer för har inte förstått mig på dem men jag jobbar på det... men även tack för ditt svar som jag skall kika på mer efter att jag donat klart aktuellt skolarbete.

Tack igen.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback