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
Ja, logisch....
Stom dat ik dit niet zag..

Dank!!
- SanThe - op 08/02/2012 13:05:46

WHERE id NOT IN (...) moet dat niet WHERE id IN (...) zijn?

Niet als Karim mijn volledige voorbeeld gebruikt, dat zet nl de in het formulier aangevinkte checkboxen in de tabel op yes (als ze dat al niet stonden). En andersom voor de niet aangevinkte checkboxen.

Nu ik dit hele verhaal aan de praat ontdek ik dat er ook een fout zit in mijn search form...

Moet ik hier even een nieuw topic voor aanmaken of kunnen jullie mij hier ook mee helpen?

Hier is bovenstaand verhaal op gebaseerd:
(dit is overigens niet zelf geschreven.
ik kwam dit op het net tegen en ben hier mijn systeem op gaan baseren)

<?php
$q = $_GET["q"]; // query string
$request = "http://search.twitter.com/search.json?q=".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);
}

?>

Het probleem is dat hij dus niets meer in de db zet,
maar ik krijg ook geen error?!
Wat gaat er mis?
Tip nummer 1 bij het uitvoeren van een insert: gebruik altijd de kolomnamen waar de waardes in moeten. Op die manier is het makkelijker voor jezelf om te zien of het klopt, maar het blijft ook goed gaan mocht je later eens een kolom toevoegen. Als je namelijk geen kolommen benoemt moet je alle kolommen (in de juiste volgorde) een waarde geven. Mis je er een dan ben je de klos.
Dus:

INSERT INTO tweets(id, insert_date, ... ,... ,...)
VALUES('".$id."','".$mysqldate."', ... ,... ,...); 

Eventuele autmatische waardes kan je dan ook achterwegen laten (bijvoorbeeld auto_increment ids en timestamps).
(ps kolomnamen in dit voorbeeld heb ik natuurlijk verzonnen)
Ah, ik heb hier niet mijn "checkbox" kolom tussen staan (die ik later heb aangemaakt in de db)....
Dat zal dan de oorzaak zijn dat het nu niet meer werkt...

Ik ga weer even aan de slag...

Reageren