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

<?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);
}

?>

De gegevens weer uit de db halen en weergeven...
Voorbeeld zichtbaar op: http://www.v7productions.nl/citoparty/admin_tweets.php
<?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>";

?>

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
Waarom zetten we de id in de value van de checkbox, kan je mooi het volgende doen:
<?php
$ids = implode(',',$_POST['approvedtweet']);
$sql= "UPDATE tweets SET checkbox='yes' WHERE id IN (" . $ids . ')'
?>
Inderdaad. Merk wel op dat de meeste van mijn opmerkingen blijven gelden.
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:

<?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();

?>

Ik kreeg geen output, maar zag ook geen waardes veranderen in mijn db.

Tenslotte heb ik dit nog geprobeerd:

<?php
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?
1. Je voert je sql niet uit!
2. Je moet zorgen dat je de input als volgt in je formulier komt:
<?php
echo '<input type="checkbox" name="approvedtweet[]" value="' . $row['id'] . '" />";
?>

3. Je maakt deze:
<?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
?>


Dit is getest.
Dit werkt.

<?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>
';
?>
@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.
Kicken!!

De geselecteerde rijen worden geupdate :)

Dit lijkt alleen nog niet te werken:
<?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();
?>

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?

Reageren