Checkbox form in mysql fetch array
Beste PHPers,
Ik ben even een snel pakketje aan het bouwen om tweets in een db op te slaan, dan de gebruiker de tweets te laten keuren en die vervolgens naar een groot scherm te publiceren.
Ik weet dat er misschien het een en ander met beveiliging niet helemaal op orde is, maar het is dan ook gebouwd om op een lokaal netwerk te draaien :)
Ik loop echter vast bij het keuren van de tweets.
Hieronder de code:
Tweets ophalen en in de db stoppen
De gegevens weer uit de db halen en weergeven...
Voorbeeld zichtbaar op: http://www.v7productions.nl/citoparty/admin_tweets.php
Zoals je ziet heb ik al zitten spelen met een <form> en checkboxes...
Wat ik probeer
Ik heb in m'n mysql tabel een rij "checkbox" met een standaard waarde van null.
Bij het klikken op de checkbox, achter de tweets die de gebruiker wil publiceren, moet deze waarde geüpdatet worden naar 1.
Zodat ik in het grote videoscherm gewoon de tweets met de checkbox waarde "1" uit de db kan roepen.
Op inet vind ik veel over checkbox forms, maar dan gaat het over een vast aantal resultaten...
En dat is hier natuurlijk niet het geval...
Iemand die mij een duwtje in de goede richting kan geven?
Hoor het graag!
Karim
Ik ben even een snel pakketje aan het bouwen om tweets in een db op te slaan, dan de gebruiker de tweets te laten keuren en die vervolgens naar een groot scherm te publiceren.
Ik weet dat er misschien het een en ander met beveiliging niet helemaal op orde is, maar het is dan ook gebouwd om op een lokaal netwerk te draaien :)
Ik loop echter vast bij het keuren van de tweets.
Hieronder de code:
Tweets ophalen en in de db stoppen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$q = $_GET["jansmit"];
$request = "http://search.twitter.com/search.json?q=jansmit".urlencode($q);
$response = file_get_contents($request);
$jsonobj = json_decode($response);
if($jsonobj != null){
$con = mysql_connect('', '', '');
if (!$con){
die('Could not connect: ' . mysql_error());
}
foreach($jsonobj->results as $item){
$id = $item->id;
$created_at = $item->created_at;
$created_at = strtotime($created_at);
$mysqldate = date('Y-m-d H:i:s',$created_at);
$from_user = mysql_real_escape_string($item->from_user);
$from_user_id = $item->from_user_id;
$text = mysql_real_escape_string($item->text);
$source = mysql_real_escape_string($item->source);
$geo = $item->geo;
$iso_language_code = $item->iso_language_code;
$profile_image_url = mysql_real_escape_string($item->profile_image_url);
$to_user_id = $item->to_user_id;
if($to_user_id==""){ $to_user_id = 0; }
$query = mysql_real_escape_string($query);
mysql_select_db("md36691db200438", $con);
$query = "INSERT into tweets VALUES ($id,'$mysqldate','$from_user',$from_user_id,'$text','$source','$geo','$iso_language_code','$profile_image_url',$to_user_id,'$q')";
$result = mysql_query($query);
}
mysql_close($con);
}
?>
$q = $_GET["jansmit"];
$request = "http://search.twitter.com/search.json?q=jansmit".urlencode($q);
$response = file_get_contents($request);
$jsonobj = json_decode($response);
if($jsonobj != null){
$con = mysql_connect('', '', '');
if (!$con){
die('Could not connect: ' . mysql_error());
}
foreach($jsonobj->results as $item){
$id = $item->id;
$created_at = $item->created_at;
$created_at = strtotime($created_at);
$mysqldate = date('Y-m-d H:i:s',$created_at);
$from_user = mysql_real_escape_string($item->from_user);
$from_user_id = $item->from_user_id;
$text = mysql_real_escape_string($item->text);
$source = mysql_real_escape_string($item->source);
$geo = $item->geo;
$iso_language_code = $item->iso_language_code;
$profile_image_url = mysql_real_escape_string($item->profile_image_url);
$to_user_id = $item->to_user_id;
if($to_user_id==""){ $to_user_id = 0; }
$query = mysql_real_escape_string($query);
mysql_select_db("md36691db200438", $con);
$query = "INSERT into tweets VALUES ($id,'$mysqldate','$from_user',$from_user_id,'$text','$source','$geo','$iso_language_code','$profile_image_url',$to_user_id,'$q')";
$result = mysql_query($query);
}
mysql_close($con);
}
?>
De gegevens weer uit de db halen en weergeven...
Voorbeeld zichtbaar op: http://www.v7productions.nl/citoparty/admin_tweets.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
mysql_connect('', '', '') or die(mysql_error());
mysql_select_db("md36691db200438") or die(mysql_error());
$result = mysql_query("SELECT * FROM tweets")
or die(mysql_error());
echo "<form method='post' action=''>";
echo "<table border='1'>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row into a table
echo "<tr><td>";
echo "<img src=";
echo $row['profile_image_url'];
echo ">";
echo "</td><td>";
echo $row['from_user'];
echo "</td><td>";
echo $row['iso_language_code'];
echo "</td><td>";
echo $row['text'];
echo "</td><td>";
echo "<input type='checkbox' name='approvedtweet' value='1' />";
echo "</td></tr>";
}
echo "</table>";
echo "<input type='submit' name='formSubmit' value='Submit' /> </form>";
?>
mysql_connect('', '', '') or die(mysql_error());
mysql_select_db("md36691db200438") or die(mysql_error());
$result = mysql_query("SELECT * FROM tweets")
or die(mysql_error());
echo "<form method='post' action=''>";
echo "<table border='1'>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row into a table
echo "<tr><td>";
echo "<img src=";
echo $row['profile_image_url'];
echo ">";
echo "</td><td>";
echo $row['from_user'];
echo "</td><td>";
echo $row['iso_language_code'];
echo "</td><td>";
echo $row['text'];
echo "</td><td>";
echo "<input type='checkbox' name='approvedtweet' value='1' />";
echo "</td></tr>";
}
echo "</table>";
echo "<input type='submit' name='formSubmit' value='Submit' /> </form>";
?>
Zoals je ziet heb ik al zitten spelen met een <form> en checkboxes...
Wat ik probeer
Ik heb in m'n mysql tabel een rij "checkbox" met een standaard waarde van null.
Bij het klikken op de checkbox, achter de tweets die de gebruiker wil publiceren, moet deze waarde geüpdatet worden naar 1.
Zodat ik in het grote videoscherm gewoon de tweets met de checkbox waarde "1" uit de db kan roepen.
Op inet vind ik veel over checkbox forms, maar dan gaat het over een vast aantal resultaten...
En dat is hier natuurlijk niet het geval...
Iemand die mij een duwtje in de goede richting kan geven?
Hoor het graag!
Karim
Gewijzigd op 06/02/2012 13:47:47 door Karim Bizid
Gesponsorde koppelingen:
Er zijn een aantal mogelijkheden, die op 't zelfde neerkomen.
Lijn 25, maak daar eens van:
Afhandelen, gebeurt dan met iets als
Ben je hiermee geholpen?
Lijn 25, maak daar eens van:
Afhandelen, gebeurt dan met iets als
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
...
foreach ($_POST['approvedtweet'] as $id=>$value) {
// $id in nu de id van de checkbox.
// in principe verschijnen enkel de aangevinkte checkboxes in de loop.
// $value zou telkens 'on' moeten geven, maar check vooral zelf wat er gebeurt
...
}
...
?>
...
foreach ($_POST['approvedtweet'] as $id=>$value) {
// $id in nu de id van de checkbox.
// in principe verschijnen enkel de aangevinkte checkboxes in de loop.
// $value zou telkens 'on' moeten geven, maar check vooral zelf wat er gebeurt
...
}
...
?>
Ben je hiermee geholpen?
Ik heb er nu dit van gemaakt:
Wat hij nu doet is alle items veranderen in "yes".
Ik snap dit:
en dit:
nog niet helemaal...
Het gaat daar ook nog mis denk ik.
Gezien hij simpelweg alles in "yes" veranderd.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'")
or die(mysql_error());
?>
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'")
or die(mysql_error());
?>
Wat hij nu doet is alle items veranderen in "yes".
Ik snap dit:
en dit:
nog niet helemaal...
Het gaat daar ook nog mis denk ik.
Gezien hij simpelweg alles in "yes" veranderd.
Dit heeft niet zoveel zin:
Je voert deze query nu gewoon tig keer uit, waarbij je ook tig keer dus hetzelfde doet. Gewoon alle checkboxen op yes zetten die op no stonden. Ik gok dat je hierin nog een extra clausule op wil nemen in je WHERE waarbij je zegt welke checkbox(en) dan op yes gezet moet(en) worden. Dus iets als 'WHERE id='.$id of zo.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'")
}
?>
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'")
}
?>
Je voert deze query nu gewoon tig keer uit, waarbij je ook tig keer dus hetzelfde doet. Gewoon alle checkboxen op yes zetten die op no stonden. Ik gok dat je hierin nog een extra clausule op wil nemen in je WHERE waarbij je zegt welke checkbox(en) dan op yes gezet moet(en) worden. Dus iets als 'WHERE id='.$id of zo.
Gewijzigd op 06/02/2012 17:01:02 door Erwin H
Code (php)
1
2
3
2
3
<?php
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'");
?>
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'");
?>
Gewijzigd op 06/02/2012 17:06:26 door - SanThe -
(slaat enkel op de post van de vragensteller, de rest was er nog niet...)
Om te beginnen, je gaat toch niet X aantal keer die query uitvoeren?
Je kan die string opbouwen en dan in 1 keer laten uitvoeren.
De bedoeling is trouwens dat je de id's van de POST gebruikt in de WHERE-clausule; niet de waarden die al in de database steken.
Dit:
"UPDATE tweets SET checkbox='yes' WHERE checkbox='no'"
gaat over de records die al 'no' hebben in de database. Daar is niets meer van de post te merken.
Uiteindelijk moet je komen tot zoiets:
// eerst alles op no zetten
UPDATE tweets SET checkbox='no'
en dan iets als
UPDATE tweets SET checkbox='yes'
WHERE id=5 OR id=12 OR id=15
... indien enkel 5, 12 en 15 zijn aangevinkt.
Binnenin de foreach lus moet je dus eigenlijk enkel die WHERE clausule opbouwen.
lukt dat?
Om te beginnen, je gaat toch niet X aantal keer die query uitvoeren?
Je kan die string opbouwen en dan in 1 keer laten uitvoeren.
De bedoeling is trouwens dat je de id's van de POST gebruikt in de WHERE-clausule; niet de waarden die al in de database steken.
Dit:
"UPDATE tweets SET checkbox='yes' WHERE checkbox='no'"
gaat over de records die al 'no' hebben in de database. Daar is niets meer van de post te merken.
Uiteindelijk moet je komen tot zoiets:
// eerst alles op no zetten
UPDATE tweets SET checkbox='no'
en dan iets als
UPDATE tweets SET checkbox='yes'
WHERE id=5 OR id=12 OR id=15
... indien enkel 5, 12 en 15 zijn aangevinkt.
Binnenin de foreach lus moet je dus eigenlijk enkel die WHERE clausule opbouwen.
lukt dat?
Gewijzigd op 06/02/2012 17:09:58 door Kris Peeters
Nee, dat is achteraf niet zo slim geweest idd...
Het wil echter nog steeds niet echt lukken...
Hij veranderd nog steeds alles of niets.
Wat zie ik over het hoofd of doe ik verkeerd?
Heeft het er misschien iets mee te maken dat de "post" van het formulier (en dus de afhalendeling) plaatsvind in een ander document?
Het wil echter nog steeds niet echt lukken...
Hij veranderd nog steeds alles of niets.
Wat zie ik over het hoofd of doe ik verkeerd?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'");
}
?>
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'");
}
?>
Heeft het er misschien iets mee te maken dat de "post" van het formulier (en dus de afhalendeling) plaatsvind in een ander document?
Gewijzigd op 06/02/2012 19:55:55 door Karim Bizid
Dit doe je dus nog steeds verkeerd...
Of is dit nog oude code?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'");
}
?>
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no'");
}
?>
Of is dit nog oude code?
Nee, ik begreep uit de vorige posts dat ik de WHERE clausule moest toevoegen aan het geheel, maar nu ik het nog eens teruglees denk ik te snappen dat de hele foreach functie niet op z'n plaats is...
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'");
}
?>
foreach ($_POST['approvedtweet'] as $id=>$value) {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'");
}
?>
Okay, toch even mijn punt maken.
Kijk eens (test dit even apart, los van waar je mee bezig bent) wat er gebeurt
Wat zie je?
- De $value is telkens 'on'. Daar hoef je verder niets mee te doen.
- De checkboxes die niet aangevinkt zijn, worden niet naar de server gestuurd.
Indien je een checkbox afvinkt, wil je dat de goedkeuring op NO wordt gezet (Ja, toch? Je wil toch ook goedkeuringen terug kunnen uitzetten, of niet?).
Maar die worden dus niet naar de server gestuurd, dus je ziet in je foreach-lus nergens die afgevinkte checkboxes staan.
Wat doe je dus?
Eerst ALLE checkboces op no zetten.
UPDATE tweets SET checkbox='no'
Daarna die opgebouwde sql string uitvoeren.
Kijk eens (test dit even apart, los van waar je mee bezig bent) wat er gebeurt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$sql= "";
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
foreach ($_POST['approvedtweet'] as $id=>$value) {
if (empty($sql)){ // de eerste keer beb je geen OR nodig...
$sql .= "UPDATE tweets SET checkbox='yes' WHERE id=" . (int) $id;
}
else { // vanaf de tweede id heb je een OR nodig tussen elke id=...
$sql .= ' OR id=' . (int) $id;
}
}
}
echo $sql .'<br/>';
print_r($_POST);
}
echo '
<form action="" method="post">
<input type="checkbox" name="approvedtweet[5]"/> id = 5 <br/>
<input type="checkbox" name="approvedtweet[12]"/> id = 12 <br/>
<input type="checkbox" name="approvedtweet[16]"/> id = 16 <br/>
<input type="checkbox" name="approvedtweet[18]"/> id = 18 <br/>
<input type="checkbox" name="approvedtweet[21]"/> id = 21 <br/>
<input type="submit"/>
</form>
';
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$sql= "";
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
foreach ($_POST['approvedtweet'] as $id=>$value) {
if (empty($sql)){ // de eerste keer beb je geen OR nodig...
$sql .= "UPDATE tweets SET checkbox='yes' WHERE id=" . (int) $id;
}
else { // vanaf de tweede id heb je een OR nodig tussen elke id=...
$sql .= ' OR id=' . (int) $id;
}
}
}
echo $sql .'<br/>';
print_r($_POST);
}
echo '
<form action="" method="post">
<input type="checkbox" name="approvedtweet[5]"/> id = 5 <br/>
<input type="checkbox" name="approvedtweet[12]"/> id = 12 <br/>
<input type="checkbox" name="approvedtweet[16]"/> id = 16 <br/>
<input type="checkbox" name="approvedtweet[18]"/> id = 18 <br/>
<input type="checkbox" name="approvedtweet[21]"/> id = 21 <br/>
<input type="submit"/>
</form>
';
?>
Wat zie je?
- De $value is telkens 'on'. Daar hoef je verder niets mee te doen.
- De checkboxes die niet aangevinkt zijn, worden niet naar de server gestuurd.
Indien je een checkbox afvinkt, wil je dat de goedkeuring op NO wordt gezet (Ja, toch? Je wil toch ook goedkeuringen terug kunnen uitzetten, of niet?).
Maar die worden dus niet naar de server gestuurd, dus je ziet in je foreach-lus nergens die afgevinkte checkboxes staan.
Wat doe je dus?
Eerst ALLE checkboces op no zetten.
UPDATE tweets SET checkbox='no'
Daarna die opgebouwde sql string uitvoeren.
Gewijzigd op 07/02/2012 10:50:03 door Kris Peeters
Waarom zetten we de id in de value van de checkbox, kan je mooi het volgende doen:
Code (php)
1
2
3
4
2
3
4
<?php
$ids = implode(',',$_POST['approvedtweet']);
$sql= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')'
?>
$ids = implode(',',$_POST['approvedtweet']);
$sql= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')'
?>
kan ook
Sterker nog, het is veel simpeler ;-)
Inderdaad. Merk wel op dat de meeste van mijn opmerkingen blijven gelden.
Gewijzigd op 07/02/2012 11:51:00 door Kris Peeters
Ik ben officieel in de war, haha...
Ik ben geen enorme held in PHP en kom nog niet echt verder..
Het volgende heb ik geprobeerd:
http://www.v7productions.nl/citoparty/test.php
(eerste id is aangepast naar een resultaat in mijn db)
Daarna heb ik er het volgende van gemaakt:
Ik kreeg geen output, maar zag ook geen waardes veranderen in mijn db.
Tenslotte heb ik dit nog geprobeerd:
Het is idd de bedoeling dat ik uiteindelijk de goedkeuringen terug uit kan schakelen, maar zover durfde ik aan het begin van dit project nog niet te denken..
Hebben jullie nog een zet in de juiste richting voor mij?
Ik ben geen enorme held in PHP en kom nog niet echt verder..
Het volgende heb ik geprobeerd:
http://www.v7productions.nl/citoparty/test.php
(eerste id is aangepast naar een resultaat in mijn db)
Daarna heb ik er het volgende van gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$ids = implode(',',$_POST['approvedtweet']);
$sql= mysql_connect() or die(mysql_error());
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
foreach ($_POST['approvedtweet'] as $id=>$value) {
if (empty($sql)){ // de eerste keer beb je geen OR nodig...
$sql .= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')';
}
else { // vanaf de tweede id heb je een OR nodig tussen elke id=...
$sql .= ' OR id=' . (int) $id;
}
}
}
}
mysql_connect() or die(mysql_error());
mysql_select_db("md36691db200438") or die(mysql_error());
$result = mysql_query("SELECT * FROM tweets")
or die(mysql_error());
echo "<form method='post' action=''>";
echo "<table border='1'>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row into a table
echo "<tr><td>";
echo "<img src=";
echo $row['profile_image_url'];
echo ">";
echo "</td><td>";
echo $row['from_user'];
echo "</td><td>";
echo $row['iso_language_code'];
echo "</td><td>";
echo $row['text'];
echo "</td><td>";
echo "<input type='checkbox' name='approvedtweet[" . $row['id'] . "]' />";
echo "</td></tr>";
}
echo "</table>";
echo "<input type='submit' name='formSubmit' value='Submit' /> </form>";
mysql_close();
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$ids = implode(',',$_POST['approvedtweet']);
$sql= mysql_connect() or die(mysql_error());
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
foreach ($_POST['approvedtweet'] as $id=>$value) {
if (empty($sql)){ // de eerste keer beb je geen OR nodig...
$sql .= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')';
}
else { // vanaf de tweede id heb je een OR nodig tussen elke id=...
$sql .= ' OR id=' . (int) $id;
}
}
}
}
mysql_connect() or die(mysql_error());
mysql_select_db("md36691db200438") or die(mysql_error());
$result = mysql_query("SELECT * FROM tweets")
or die(mysql_error());
echo "<form method='post' action=''>";
echo "<table border='1'>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row into a table
echo "<tr><td>";
echo "<img src=";
echo $row['profile_image_url'];
echo ">";
echo "</td><td>";
echo $row['from_user'];
echo "</td><td>";
echo $row['iso_language_code'];
echo "</td><td>";
echo $row['text'];
echo "</td><td>";
echo "<input type='checkbox' name='approvedtweet[" . $row['id'] . "]' />";
echo "</td></tr>";
}
echo "</table>";
echo "<input type='submit' name='formSubmit' value='Submit' /> </form>";
mysql_close();
?>
Ik kreeg geen output, maar zag ook geen waardes veranderen in mijn db.
Tenslotte heb ik dit nog geprobeerd:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'")
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
mysql_query("UPDATE tweets SET checkbox='yes' WHERE checkbox='no' AND id='" . mysql_real_escape_string($value) . "'")
}
?>
Het is idd de bedoeling dat ik uiteindelijk de goedkeuringen terug uit kan schakelen, maar zover durfde ik aan het begin van dit project nog niet te denken..
Hebben jullie nog een zet in de juiste richting voor mij?
Gewijzigd op 07/02/2012 21:36:22 door Karim Bizid
1. Je voert je sql niet uit!
2. Je moet zorgen dat je de input als volgt in je formulier komt:
3. Je maakt deze:
2. Je moet zorgen dat je de input als volgt in je formulier komt:
Code (php)
1
2
3
2
3
<?php
echo '<input type="checkbox" name="approvedtweet[]" value="' . $row['id'] . '" />";
?>
echo '<input type="checkbox" name="approvedtweet[]" value="' . $row['id'] . '" />";
?>
3. Je maakt deze:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//hier moet je zelf nog connecten met de db
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
$ids = implode(',',$_POST['approvedtweet']);
$sql= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')';
$sql .= " AND checkbox = 'no'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
$sql= "UPDATE tweets SET checkbox='no' WHERE id NOT IN (" . $ids . ')';
$sql .= " AND checkbox = 'yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
else { //als niets is aangevinkt bestaat $_POST['approvedtweet'] niet!!!!!!
$sql = "UPDATE tweets SET chechbox='no' WHERE checkbox='yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
}
//de rest van je code
?>
//hier moet je zelf nog connecten met de db
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
$ids = implode(',',$_POST['approvedtweet']);
$sql= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')';
$sql .= " AND checkbox = 'no'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
$sql= "UPDATE tweets SET checkbox='no' WHERE id NOT IN (" . $ids . ')';
$sql .= " AND checkbox = 'yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
else { //als niets is aangevinkt bestaat $_POST['approvedtweet'] niet!!!!!!
$sql = "UPDATE tweets SET chechbox='no' WHERE checkbox='yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
}
//de rest van je code
?>
Gewijzigd op 07/02/2012 22:37:35 door Ger van Steenderen
Dit is getest.
Dit werkt.
Dit werkt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
// @see http://www.phphulp.nl/php/forum/topic/checkbox-form-in-mysql-fetch-array/82493/last/
/*
CREATE TABLE phphulp.tweets (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
tweet TEXT NOT NULL ,
checkbox VARCHAR( 10 ) NOT NULL
) ENGINE = InnoDB;
INSERT INTO tweets ( id , tweet , checkbox ) VALUES
(1, 'tweet 1', 'yes'),
(2, 'tweet 2', 'no'),
(3, 'tweet 3', 'yes'),
(4, 'tweet 4', 'no'),
(5, 'tweet 5', 'yes'),
(6, 'tweet 6', 'no');)
*/
$con = mysql_connect('localhost', 'root', '');
mysql_select_db("phphulp", $con);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// eerst alle goedkeuringen af zetten
mysql_query("UPDATE tweets SET checkbox='no'");
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
$ids = implode(',',$_POST['approvedtweet']);
mysql_query("UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')');
}
}
$res = mysql_query("SELECT id, checkbox, tweet FROM tweets");
$records = "";
while ($row = mysql_fetch_assoc($res)) {
$records .= '<div><input type="checkbox" name="approvedtweet[]" value="' . $row['id'] . '" ' . ($row['checkbox'] == 'yes' ? ' checked="checked"' : '') . '/>' . $row['tweet'] . '</div>' . PHP_EOL;
}
echo '<form action="" method="post">
' . $records . '
<input type="submit" value="OK"/>
</form>
';
?>
// @see http://www.phphulp.nl/php/forum/topic/checkbox-form-in-mysql-fetch-array/82493/last/
/*
CREATE TABLE phphulp.tweets (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
tweet TEXT NOT NULL ,
checkbox VARCHAR( 10 ) NOT NULL
) ENGINE = InnoDB;
INSERT INTO tweets ( id , tweet , checkbox ) VALUES
(1, 'tweet 1', 'yes'),
(2, 'tweet 2', 'no'),
(3, 'tweet 3', 'yes'),
(4, 'tweet 4', 'no'),
(5, 'tweet 5', 'yes'),
(6, 'tweet 6', 'no');)
*/
$con = mysql_connect('localhost', 'root', '');
mysql_select_db("phphulp", $con);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// eerst alle goedkeuringen af zetten
mysql_query("UPDATE tweets SET checkbox='no'");
if (isset($_POST['approvedtweet'])) { // uiteraard eerst checken of de variabele bestaat
$ids = implode(',',$_POST['approvedtweet']);
mysql_query("UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')');
}
}
$res = mysql_query("SELECT id, checkbox, tweet FROM tweets");
$records = "";
while ($row = mysql_fetch_assoc($res)) {
$records .= '<div><input type="checkbox" name="approvedtweet[]" value="' . $row['id'] . '" ' . ($row['checkbox'] == 'yes' ? ' checked="checked"' : '') . '/>' . $row['tweet'] . '</div>' . PHP_EOL;
}
echo '<form action="" method="post">
' . $records . '
<input type="submit" value="OK"/>
</form>
';
?>
Gewijzigd op 08/02/2012 11:06:26 door Kris Peeters
@Kris
Waarom denk je dat jouw beter zou werken?
Ik vind hem zelfs slechter:
Je zet eerst alles op "no", en daarna alles wat aangevinkt is (misschien wel terug) op "ja". Dat is een botte manier van programmeren.
Waarom denk je dat jouw beter zou werken?
Ik vind hem zelfs slechter:
Je zet eerst alles op "no", en daarna alles wat aangevinkt is (misschien wel terug) op "ja". Dat is een botte manier van programmeren.
Kicken!!
De geselecteerde rijen worden geupdate :)
Dit lijkt alleen nog niet te werken:
De waarde in de geselecteerde rijen blijft "yes".
Denk ik een stap te moeilijk om de gevinkte checkboxes te behouden na het veranderen van de waarde in de db?
Zodat je door het wegvinken de waarde weer update naar "no"?
Dank voor alle reacties tot nu toe!
De geselecteerde rijen worden geupdate :)
Dit lijkt alleen nog niet te werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$sql= "UPDATE tweets SET checkbox='no' WHERE id NOT IN (" . $ids . ')';
$sql .= " AND checkbox = 'yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
else { //als niets is aangevinkt bestaat $_POST['approvedtweet'] niet!!!!!!
$sql = "UPDATE tweets SET chechbox='no' WHERE checkbox='yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
?>
$sql= "UPDATE tweets SET checkbox='no' WHERE id NOT IN (" . $ids . ')';
$sql .= " AND checkbox = 'yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
}
else { //als niets is aangevinkt bestaat $_POST['approvedtweet'] niet!!!!!!
$sql = "UPDATE tweets SET chechbox='no' WHERE checkbox='yes'";
$result = mysql_query($sql);
if ($result)
echo 'Er zijn ' . mysql_affected_rows() . " rijen geupdate";
else
echo 'Oeps foutje: ' . mysql_error();
?>
De waarde in de geselecteerde rijen blijft "yes".
Denk ik een stap te moeilijk om de gevinkte checkboxes te behouden na het veranderen van de waarde in de db?
Zodat je door het wegvinken de waarde weer update naar "no"?
Dank voor alle reacties tot nu toe!
WHERE id NOT IN (...) moet dat niet WHERE id IN (...) zijn?



