wat aangevinkt is in database omzetten

Status
Niet open voor verdere reacties.

rth1972

Gebruiker
Lid geworden
28 jan 2003
Berichten
34
hoi allemaal,

effe een vraagje als het kan.

ik heb een lyrics site, bezoekers kunnen zelf ook lyrics toevoegen. mocht een bezoeker dit doen dan kan ik het beoordelen en dan daadwerkelijk toevoegen aan database.

als een bezoeker een lyric instuurt krijgt deze bijvoorbeeld check_submit=0, als ik de lyric goedgekeurd heb krijgt check_submit=i.

ik heb een pagina die alle lyrics met check_submit=0 laat zien, maar als er iemand 10 lyrics heeft toegevoegt moet ik alle 10 lyrics langs gaan en goed keuren, te veel werk (toch?)

is er een mogelijkheid om voor elk lyric een checkboxje te maken en wanneer ik een checkboxje aanklik + op een knop druk dat dan automatisch check_submit=0 check_submit=1 wordt?

hieronder vindt je de code die ik gebruik

PHP:
$text = "<div style='text-align:center'>
  <table style='width:100%'>";
  
  // ===== begin display of records that need approval =====
  $show = $db->sql_query("SELECT * FROM ".$prefix."_lyrics WHERE check_submit = 1 ORDER BY date");
    if ($db->sql_numrows($show)) {
    	while($row = $db->sql_fetchrow($show)) {
	extract($row);
	$text .="<tr><td>[$date] $artist - "._ALBUM.": $album - "._SONG.": $song</td><td style='text-align:center'><a href='modules.php?name=$module_name&amp;file=sl_preview&amp;c_id=$id'>"._PREVIEW."</a></td></tr>";
	}
    } else {
    	$text .="<tr><td colspan='2' style='text-align:center'><b>"._NONEWLYRICS."</b></td></tr>";
    }

  $text .= "</table></div>";

  echo $text;
een checkboxje ervoor zetten lukt me nog met
PHP:
$text .="<input type=\"checkbox\" name\"box1\">;
'

maar hoe doe ik het verder.

hopelijk kan iemand mij helpen.
Alvast bedankt
rth1972
 
Laatst bewerkt:
Geplaatst door rth1972
is er een mogelijkheid om voor elk lyric een checkboxje te maken en wanneer ik een checkboxje aanklik + op een knop druk dat dan automatisch check_submit=0 check_submit=1 wordt?
Dat is zeker mogelijk. Wil je een makkelijke, ietwat ranzigere oplossing of wil je een mooie, nette, ietwat meer moeite oplossing ?
 
bedankt voor je reactie.

kan het ook een tussenbeide in oplossing zijn? lol begrijpt ik deze niet dan eventueel een makkelijke, begrijpt ik deze wel, misschien kan ik het zelf uitbreiden etc. is wel de bedoeling dat ik iets ervan leer,lol

alvast bedankt.

Rth1972:D :D
 
Makkelijk, ranzigere oplossing:
PHP:
<?
  if(isset($_POST['checkboxes']) AND is_array($_POST['checkboxes']))
  {
    foreach($_POST['checkboxes'] AS $value)
    {
    echo '- ' . $value . '<br />';
    }
  }

echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
echo '<input type="checkbox" name="checkboxes[]" value="Waarde 1" /> Waarde 1<br />';
echo '<input type="checkbox" name="checkboxes[]" value="Waarde 2" /> Waarde 2<br />';
echo '<input type="checkbox" name="checkboxes[]" value="Waarde 3" /> Waarde 3<br />';
echo '<input type="checkbox" name="checkboxes[]" value="Waarde 4" /> Waarde 4<br />';
echo '<input type="submit" value="Submittuh !" />';
echo '</form>';
?>
Moeilijkere, nettere oplossing:
PHP:
<?
$aantal_checkboxes = 4; // Ik ga ervanuit dat dit variabel is en dat je dit baseert op 't aantal rijen in je database oid...

  for($i = 1; $i <= $aantal_checkboxes; $i++)
  {
    if(isset($_POST[('checkboxes_' . $i)]))
    {
    echo '- ' . $_POST[('checkboxes_' . $i)] . '<br />';
    }
  }

echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';

  for($i = 1; $i <= $aantal_checkboxes; $i++)
  {
  echo '<input type="checkbox" name="checkboxes_' . $i . '" value="Waarde ' . $i . '" /> Waarde ' . $i . '<br />';
  }

echo '<input type="submit" value="Submittuh !" />';
echo '</form>';
?>
Waarom deze minder ranzig is: in HTML veldnamen horen geen blokhaken ([ en ]) voor te komen ;)

Succes :thumb:
 
Laatst bewerkt:
bedankt voor je reactie.

om heel eerlijk te zijn, snap niet wat je geantwoord heb,:o .

hieronder zie je de php code wat ik gebruik maar wat niet werkt.

PHP:
$show = $db->sql_query("SELECT * FROM ".$prefix."_lyrics WHERE check_submit = 1 ORDER BY date");
    if ($db->sql_numrows($show)) {
    	while($row = $db->sql_fetchrow($show)) {
	extract($row);
	$text .="<form method=\"post\" action=\"modules.php?name=Lyrics&file=submitted_lyrics\">";
	
	$text .="<tr><td><input type='checkbox' name='css' value='checkbox'>[$date] $artist - "._ALBUM.": $album - "._SONG.": $song [$check_submit]</td><td style='text-align:center'><a href='modules.php?name=$module_name&amp;file=sl_preview&amp;c_id=$id'>"._PREVIEW."</a></td></tr>";
	}
	if ($css == "1")
  {
	$db->sql_query("UPDATE ".$prefix."_lyrics SET check_submit='0'") or die(mysql_error());
    
	}
	$text .="<input type=\"submit\" value=\"Approve Checked Lyrics\">";
	
		$text .="</form>";
	    } else {
    	$text .="<tr><td colspan='2' style='text-align:center'><b>"._NONEWLYRICS."</b></td></tr>";
    }

  $text .= "</table></div>";

voor elke regel komt een checkbox te staan, maar wanneer ik deze aanvink en dan op "Approve Checked Lyrics klik voor deze niet geupdated in mijn database.

deze code laat zien alle lyrics met check_submit=1.
ik wil graag dat wanneer ik een lyric aanvink en op knop "Approve Checked Lyrics" druk dat check_submit=1 verandert in check_submit=0 zodat deze niet meer in de lijst voorkomt.

sorry voor eventuele ongemak.

groetjes
Robin
 
Laatst bewerkt:
voor mijn website heb ik het probleem al opgelost.

heb een button gemaakt. zodra je erop klikt alle check_submit = 1 in de database omzet naar check_submit = 0.

toch ben ik benut of het mogelijk is om bij iedere lyric dit apart appart te veranderen via een checkbox.

bedankt voor je tijd en moeitje

groetjes
rth1972
 
Geplaatst door rth1972
bedankt voor je reactie.

om heel eerlijk te zijn, snap niet wat je geantwoord heb,:o .
Hm, handig :p
Scripts wel getest ? Wat ze deden leek me vrij duidelijk.

Maar goed, wat de scripts doen: ze zetten een paar checkboxes op je scherm, deze kun je aanvinken om vervolgens op de knop onderin te klikken. Vervolgens wordt weergegeven welke checkboxes je hebt aangevinkt.

Ik ben geen fan van gratis kant-en-klare code afleveren, ik heb liever dat men er wat van leert, met dit voorbeeld probeer ik je dan ook aan te tonen hoe je kunt zien welke checkboxes er zijn aangevinkt ;)
Vervolgens kun je dan zelf een query op gaan stellen waarmee je de waarde in de database veranderd.
heb een button gemaakt. zodra je erop klikt alle check_submit = 1 in de database omzet naar check_submit = 0.
Daar kiezen de meesten voor als ze er niet uitkomen ;)
toch ben ik benut of het mogelijk is om bij iedere lyric dit apart appart te veranderen via een checkbox.
Dat kan zeker, speel wat met mijn eerder gegeven code ;)
 
Laatst bewerkt:
bedankt,

nu ik het "probleem" voorals nog heb opgelost betekent nog niet dat ik het opgeef.

maar moch ik er toch uitkomen geef ik de oplossing in deze forum door, als dat mag natuurlijk.

PHP:
if(isset($_POST['checkboxes']) AND is_array($_POST['checkboxes']))
  {
    foreach($_POST['checkboxes'] AS $value)
    {
    $db->sql_query("UPDATE ".$prefix."_lyrics SET check_submit=0 where id=$value") or die(mysql_error());
}}
$text .= '<form action="modules.php?name=Lyrics&file=submitted_lyrics" method="post">';
	$text .="<tr><td><input type=\"hidden\" name=\"id\" value=\"$id\"><input type=\"checkbox\" name=\"checkboxes[]\" value=\"$id\" />[$date] $artist - "._ALBUM.": $album - "._SONG.": $song</td><td style='text-align:center'><a href='modules.php?name=$module_name&amp;file=sl_preview&amp;c_id=$id'>"._PREVIEW."</a></td></tr>";
		}

	$text .="<input type=\"hidden\" name=\"op\" value=\"approveallsubmittedlyrics\">";
	$text .="<input type=\"submit\" value=\"Approve All Submitted Lyrics\">";

zo werkt het wel, maar als ik op de knop druk wordt het in de database wel verandert maar op de pagina dat dan verschijnt staat het ernog steeds op, als ik op pagina verversen klik, dan is de lyric ook weg.

heb je misschien nog een hint/aanwezing om te voorkomen dat ik steeds op pagina verversen moet klikken? always bedankt.
groetjes,

robin
 
Laatst bewerkt:
Geplaatst door rth1972
zo werkt het wel, maar als ik op de knop druk wordt het in de database wel verandert maar op de pagina dat dan verschijnt staat het ernog steeds op, als ik op pagina verversen klik, dan is de lyric ook weg.

heb je misschien nog een hint/aanwezing om te voorkomen dat ik steeds op pagina verversen moet klikken? always bedankt.
Persoonlijk vind ik dit ook een geweldig probleem, waar in mijn mening simpelweg geen 100% goeie oplossing voor is :p

Echter, ik heb ook aardig wat gePHPed en ben dit probleem ook tegengekomen. Ik maakte de volgende beredenering:
______________________________________________

Wanneer iemand iets uit een lijst verwijderd, ik neem een ledenlijst als voorbeeld, dan is het gebruiksvriendelijk om die melding ('Het lid is succesvol verwijderd !') op dezelfde pagina te tonen als de lijst zelf.
Nou is het probleem dus dat, wanneer de gebruiker een lid uit de lijst verwijderd, dat lid ook uit de lijst moet zijn, anders raakt de gebruiker in de war. Om dit voor elkaar te krijgen kun je je pagina op de volgende manieren opzetten:

Opzet 1:
  • Kijk of er een actie opgegeven is.
  • Zo ja, kijk of actie gelijk is aan ‘verwijder_lid’ en of er een lidid gespecificeerd is.
  • Zo ja, verwijder van tabel leden waar kolom lidid gelijk is aan de waarde van het gespecificeerde lidid, niet meer dan één rij.
  • Genereer een melding dat het lid succesvol verwijderd is.
  • Haal alle leden op.
  • Toon ledenlijst aan gebruiker.
Opzet 2:
  • Haal alle leden op, stop waarden in een array of iets dergelijks.
  • Kijk of er een actie opgegeven is.
  • Zo ja, kijk of actie gelijk is aan ‘verwijder_lid’ en of er een lidid gespecificeerd is en of lidid voorkomt in de array van leden (in_array($_GET[‘lidid’],$leden['lidid']).
  • Zo ja, verwijder van tabel leden waar kolom lidid gelijk is aan de waarde van het gespecificeerde lidid, niet meer dan één rij.
  • Genereer een melding dat het lid succesvol verwijderd is.
  • Toon ledenlijst aan gebruiker.
Zoals je waarschijnlijk kunt zien, bij opzet 2 zou je het probleem niet hebben, bij opzet 1 wel. Waarschijnlijk heb je je PHP pagina dan ook volgens die opzet opgezet.

Nu kun je denken: waarom voer je bij die tweede opzet de query om de ledenlijst op te halen niet gewoon nogmaals uit ? Antwoord: redundante code. Niet erg netjes.
Ook kun je denken: waarom pas je niet unset() toe om het lid uit de array van de eerder opgehaalde leden te verwijderen ? Antwoord: omslachtig en de sleutelopvolging binnenin de array klopt dan niet meer.
En ook kun je je afvragen: wat is er mis met die tweede methode ? Niet heel veel, behalve één ding. Als je na het verwijderen checked met mysql_affected_rows() hoeveel rijen er zijn verwijderd, en dit geeft 0 terug, dan moet je jezelf afvragen: gaf de gebruiker een ongeldig, niet-bestaand ID op of ging er iets fout in de database ? En moet je dan een melding geven, zo ja, wat voor melding ? Dat hij niet uit de database verwijderd kon worden, dat hij succesvol verwijderd is (doen alsof) of dat er een ongeldig ID is opgegeven ?
Persoonlijk check ik daarom ook liever of het ID bestaat, dan weet je ’t namelijk zeker. En dat is dan ook de reden waarom ik een trouwe fan ben van manier 2 en de oplossing die ik bedacht heb om zowel de succesmelding te geven als de array met leden mooi op te schonen is simpelweg de pagina herladen. Ik maak een sessie aan waarin ik de melding die aan de gebruiker getoond moet worden opsla, vervolgens pas ik een header('Location: ledenlijst.php'); toe, zodat het complete script wordt herladen en het verwijderde lid dus niet meer in de ledenlijst staat.

Maar ik had het net over dat er geen 100% goeie oplossing was, dus als je een beetje slim bent heb je al door dat dit ook geen gouden manier is :)

Er zit dan ook één nadeel aan: om de pagina te herladen moet je header(‘Location: ledenlijst.php’); gebruiken. Maar de browser is niet verplicht om deze header na te leven, browsers als Lynx (text-based browser) prompten de gebruiker met een vraag of ze geredirect willen worden. Oftewel: enkele browsers (niet IE, Opera, Firefox of Mozilla) zullen dan waarschijnlijk niet geredirect worden. Persoonlijk pas ik vrijwel na iedere header() een die() toe, aangezien het script nog steeds wordt uitgevoerd na een header(), wat inhoud dat wanneer de gebruiker de redirect niet accepteert, hij een kale pagina krijgt te zien.
Mijn conclusie: ik ga er simpelweg vanuit dat alle browsers die header() accepteren en zullen uitvoeren en ik zet na de header dan ook een die().

Hopelijk ist zo een beetje duidelijk ;)

p.s. De 'gebruiker' waar ik het steeds over heb is de cliënt, de bezoeker, de persoon die jouw webpagina opvraagt.
 
Laatst bewerkt:
Bedankt voor je goede uitleg, begreep het helemaal.

ik ben een newbie op het gebied van php.

waardeer het zeer dat je de tijd en geduld hebt genomen om het mij uitleggen. BEDANKT :thumb:

HET IS GELUKT,LOL

groetjes,

rth1972
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan