Posten in database deels met formulier
Ik heb een script geschreven waarmee ik via een formulier een aandeel in kan voeren, waarna deze op wordt geslagen in de database. Dit werkt, echter wil ik als het aandeel wordt ingevoerd dat niet alleen het aandeel in de database terecht komt, maar ook de achterliggende aandelenkoers.
De link waar de aandelenkoers vandaan komt betreft (voor bijv. apple): http://quote.yahoo.com/d/quotes.csv?s=AAPL&f=l1&e=.csv
Hoe programmeer ik dit in onderstaande codes?
Daarnaast dient "AAPL" in bovenstaande een variable te zijn, welke zich aanpast als ik bijvoorbeeld "GS" in zou typen.
Formulier:
Quote:
<html>
<body>
<form action="portfolio/insert_buy.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>
</body>
</html>
<body>
<form action="portfolio/insert_buy.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>
</body>
</html>
PHP-script
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[symbol]')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
?>
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[symbol]')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
?>
Ik hoop dat iemand mij hiermee kan helpen.
Hiermee kan je het csv bestand naar je server halen.
uitlezen met de file functie
aangezien de csv maar 1 waarde bevat kan je deze meenemen in de SQL query.
Hoop dat je dit goed op weg helpt
Gewijzigd op 16/05/2012 23:17:26 door Fons Seesink
Ik ben echt een beginneling en snap redelijk hoe bestaande scripts zijn opgebouwd, maar om dit zelf te schrijven is voor mij nog een stap te ver :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=AAPL&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
?>
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=AAPL&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
?>
Bovenstaande code komt rechtstreeks van google. Via $$contents[1] krijg je de waarde en via $contents[4] krijg je de stijging/daling in procenten.
Je zal een andere bron moeten vinden om deze data te farmen, anders moet je aan de slag met HTML downloaden en met DOM je waarde halen uit de website. Niet de meest makkelijke manier.
Ik raad je aan andere, meer directe bronnen te gaan zoeken op internet.
Jens erd op 17/05/2012 20:10:35:
Bovenstaande code komt rechtstreeks van google. Via $$contents[1] krijg je de waarde en via $contents[4] krijg je de stijging/daling in procenten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=AAPL&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
?>
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=AAPL&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
?>
Bovenstaande code komt rechtstreeks van google. Via $$contents[1] krijg je de waarde en via $contents[4] krijg je de stijging/daling in procenten.
Dit ziet er goed uit! Alleen hoe krijg ik dit gelinkt met mijn input formulier. Het is de bedoeling dat als iemand aapl in het formulier invult dat het symbol AAPL en de last trading price automatisch in de database worden opgeslagen.
Heb niet de SQL nagezien.
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
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
<?php
if(isset($_POST['symbol'])){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s='.$_POST['symbol'].'&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[\'symbol\']')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
} else {
echo '
<form action="nav.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>';
}
?>
if(isset($_POST['symbol'])){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s='.$_POST['symbol'].'&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[\'symbol\']')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
} else {
echo '
<form action="nav.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>';
}
?>
Dank je Fons, zit alleen nog wel ergens een fout in het script als ik hem upload..
op welke regel krijg je de melding?
Als ik het script upload en naar de pagina ga dan krijg ik error HTTP 500 "website can't be displayed". Dus niet direct op een regel.
even aanpassen naar je eigen bestandnaam
Mijn code: <form action="nav.php" method="post">
jouw code: <form action="portfolio/insert_buy.php" method="post">
Ja, dat had ik al gedaan. Maar nog steeds dezelfde error. Waarschijnlijk zit het in de code van jens?
zet dit eens bovenaan je script
dus net na de
Fons Seesink op 18/05/2012 11:00:02:
Dat denk ik niet, heb de code zonder de SQL toevoeging getest en ik krijg een prima resultaat
zet dit eens bovenaan je script
dus net na de
zet dit eens bovenaan je script
dus net na de
Gewijzigd op 18/05/2012 11:14:42 door Mitch bla
if(!$line) {
return;
}
Fons, heb je wellicht nog een idee waar de fout in kan zitten?
een 500 error is niet per definitie een php error.
heb je een directe link naar je pagina zodat ik mee kan gluren?
www.tradersondemand.com/portfolio/insert_buy.php
De link naar het formulier is: www.tradersondemand.com/sell.php
Script code op dit moment:
De link naar de php pagina is: De link naar het formulier is: www.tradersondemand.com/sell.php
Script code op dit moment:
Quote:
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
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
<?php
ini_set(display_errors,1);
error_reporting(E_ALL|E_STRICT);
if(isset($_POST['symbol'])){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s='.$_POST['symbol'].'&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[\'symbol\']')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
} else {
echo '
<form action="portfolio/insert_buy.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>';
}
?>
ini_set(display_errors,1);
error_reporting(E_ALL|E_STRICT);
if(isset($_POST['symbol'])){
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s='.$_POST['symbol'].'&f=sl1d1t1c1ohgv&e=.csv' );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$contents = explode( ',', str_replace( '"', '', $output ) );
echo "<p>AAPL stock: <b>\$$contents[1]</b> ( $contents[4] )</p>";
$conn = mysql_connect("xxx","xxx","xxx");
$db = mysql_select_db("xxx",$conn);
$sql="INSERT INTO portfolio (symbol)
VALUES
('$_POST[\'symbol\']')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn);
} else {
echo '
<form action="portfolio/insert_buy.php" method="post">
Symbol: <input type="text" name="symbol"><br />
<input type="submit" value=" Submit">
</form>';
}
?>
Mitch bla op 16/05/2012 22:21:40:
Wat is eigenlijk de meerwaarde van die $conn achter je mysql_select_db?
Is dat niet alleen relevant als je 2 verschillende databases gebruikt op je webiste, zodat hij niet per ongeluk een verkeerde connectie pakt?
Ik zet er namelijk nooit $conn (of net wat mijn variabel is) achter en werkt perfect.
sell.php stuurt nu de data naar portfolio/insert_buy.php
dus in portfolio/insert_buy.php moet de data verwerkt worden. en niet in sell.php
als de code hierboven de code is van sell.php werken de controles etc gewoon weg niet.
in sell.php zou alleen een form moeten staan, en in portfolio/insert_buy.php de code zoals hierboven.
Let wel op! de code zoals Jens en ik je geven doen hun werk, maar missen veiligheid als injectie preventie etc
In sell.php staat alleen het formulier (zie code in begin post).
In portfolio/insert_buy.php staat het script (zoals door jou en jens is gemaakt).
Dit is dus nog niet de oplossing helaas.
@Chris; ik heb de code uit een tutorial gehaald, waar geen sprake was van meerdere databases. Kan zijn dat de $conn een overbodige toevoeging is aan het script, maar zolang het werkt vind ik het allemaal prima :)