Setti saman smá PHP kóða sem gæti verið lausnin á þessu hjá þér
Við byrjum á því að gera töflu í mysql sem heitir althingi_votes og er búin til svona (t.d. í phpmyadmin):
Kóði: Velja allt
CREATE TABLE `althingi_votes` (
`name` char(40) NOT NULL,
`vote` char(20) NOT NULL,
`case_id` int(11) NOT NULL,
`vote_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`vote_id`)
)
Fyrst er svo hér update.php, ALLS EKKI sniðugt að keyra það í browser, best að fara í command prompt og gera php -f update.php
Kóði: Velja allt
<?
session_start();
@include('dbconnect.php');
ignore_user_abort(true);
set_time_limit(0);
$n = "\n";
function quote_smart($value, $quote = true) {
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value) || $quote) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
$qry = array();
$qry[] = 's_lt=0';
$qry[] = 'lthing=';
$qry[] = 'dags=';
$qry[] = 'mfl=0';
$qry[] = 'malnr=';
$qry[] = 'skjalnr=';
$qry[] = 'umr=';
$qry[] = 'embaett=';
$qry[] = 'nefnd=';
$qry[] = 'sam_fel=';
$qry[] = 'skrad=';
$qry[] = 'nja=';
$qry[] = 'nnei=';
$qry[] = 'satuhj=';
$qry[] = 'fjarv=';
$qry[] = 'thmsk=';
$qry[] = 'atkv=';
$url = 'http://www.althingi.is/dba-bin/f-nafnak.pl?' . implode('&', (array) $qry);
$page = file_get_contents($url);
if (preg_match_all('|(/dba-bin/atkvgr.pl\?nnafnak=[0-9]+)|i', $page, $matches)) {
$data = array();
foreach ($matches[1] as $url_match) {
$data['case_id'] = substr(strrchr($url_match, '='), 1);
$page_match = file_get_contents('http://www.althingi.is' . $url_match);
if (preg_match_all('|<nobr>([^<]+):</nobr> ([^,<]+)|i', $page_match, $matches_match)) {
$voters = array();
foreach ($matches_match[1] as $key => $val) {
$data['name'] = $val;
$data['vote'] = $matches_match[2][$key];
$votes_query = @mysql_query('insert into althingi_votes (' . implode(', ', array_keys($data)) . ') values (' . implode(',', array_map('quote_smart', $data)) . ')');
if (!$votes_query || !@mysql_affected_rows()) die('Failed inserting data from ' . $url_match . $n . 'mysql_error: ' . mysql_error());
}
}
sleep(1);
}
}
else die('error getting url list');
?>
Athugið að þar sem ég set slóðina saman sem sýnir leitarniðurstöðurnar ($qry og svo $url) þar er líka hægt að sleppa bara $qry og fara frekar á
leitarsíðuna fyrir atkvæðagreiðslur, velja þar það sem maður vill fá að sjá, smella á Leita takkann og afrita síðan slóðina á síðunni sem sýnir niðurstöðu leitarinnar í breytuna $url.
Svo er hér index.php, skjalið sem sýnir upplýsingar um atkvæðasögu alþingismanna
Kóði: Velja allt
<?
session_start();
@include('dbconnect.php');
$n = "\n";
function quote_smart($value, $quote = true) {
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value) || $quote) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
if ($_POST) {
$name = $_POST['name'];
$voter = array();
$voter['name'] = $name;
$votes_query = @mysql_query('select * from althingi_votes where name = ' . quote_smart($name));
if (mysql_errno()) die('mysql_error: ' . mysql_error());
while ($row = @mysql_fetch_assoc($votes_query)) {
$voter['votes'][$row['vote']]++;
}
$_SESSION['voter'] = $voter;
header('location: index.php');
die;
}
$voter = (array) $_SESSION['voter'];
?>
<html>
<head>
<title>Skoða atkvæði þingmanna</title>
</head>
<body>
<?
$namelist = (array) $_SESSION['namelist'];
if (!count($namelist)) {
$votes_query = @mysql_query('select name from althingi_votes group by name');
if (mysql_errno()) echo 'mysql_error: ' . mysql_error() . $n;
else {
while ($row = @mysql_fetch_assoc($votes_query)) {
$namelist[] = $row['name'];
}
$_SESSION['namelist'] = $namelist;
}
}
if (count($namelist)) {
?>
<form method="post">
Veldu þingmann: <select name="name">
<?
foreach ($namelist as $name) {
echo ' <option value="' . $name . '"' . ($voter['name'] == $name ? ' selected' : '') . '>' . $name . $n;
}
?>
</select>
<input type="submit" value="Skoða">
</form>
<?
}
echo '<br>' . $n;
if (count($voter)) {
echo '<b>' . $voter['name'] . '</b><br><br>' . $n;
if (count($voter['votes'])) {
foreach ($voter['votes'] as $key => $val) {
echo $key . ': ' . $val . '<br>' . $n;
}
}
}
?>
</body>
</html>
Ég vil annars benda á að skráin sem ég geri include á þarna, dbconnect.php, inniheldur bara ósköp venjulegan kóða sem tengist mysql gagnagrunninum. Ef þið vitið ekki hvernig sú skrá á að vera þá get ég alveg sett það inn líka, annars ætti það ekki að vera mikið vandamál
Vil samt vara við því að eins og ég er með það hér þá skrifar update.php skjalið víst alls 25291
færslur í gagnagrunninn svo það væri kannski sniðugt að breyta leitarskilyrðunum í $url breytunni í update.php. Svo er að vísu líka hægt að gera gagnagrunnstöfluna bara þannig að hún visti nafn hvers og eins einu sinni en uppfæri svo ákveðna reiti í töflunni hversu oft ákveðin atkvæði voru greidd. Eins og þetta er þá vistar þetta hvernig hver og einn greiddi atkvæði í hverju máli fyrir sig þannig að það er líka hægt að fletta upp hvernig atkvæði féllu í ákveðnum málum eftir auðkenni þess.
Vonandi var þetta lausnin sem þú varst að leita að