Diskuze: Mysql_fetch_array problém

PHP PHP Mysql_fetch_array problém American English version English version

Avatar
jakub
Redaktor
Avatar
jakub:

Ahoj,mam problém u fora,nebufuje mi $rows=mysql_fet­ch_array($resul­t); ,zde j e celý kod souboru kde je $rows=mysql_fet­ch_array($resul­t); :

<?php

$host="localhost"; // Host name
$username="parbamine"; // Mysql username
$password="*****"; // Mysql password
$db_name="test1"; // Database name
$tbl_name="forum_question"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Get value of id that sent from hidden field
$id=$_POST['id'];

// Find highest answer number.
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
if ($rows) {
$Max_id = $rows['Maxa_id']+1;
}
else {
$Max_id = 1;
}

// get values that sent from form
$a_name=$_POST['a_name'];
$a_email=$_POST['a_email'];
$a_answer=$_POST['a_answer'];

$datetime=date("d/m/y H:i:s"); // create date and time

// Insert answer
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2);

if($result2){
echo "Successful<BR>";
echo "<a href='view_topic.php?id=".$id."'>View your answer</a>";

// If added new answer, add value +1 in reply column
$tbl_name2="forum_question";
$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
$result3=mysql_query($sql3);
}
else {
echo "ERROR";
}

// Close connection
mysql_close();
?>

Dik za odpověd

Editováno 9.9.2012 13:40
Odpovědět 9.9.2012 13:35
Uvnitř jsou všichni stejní...
Avatar
Odpovídá na jakub
David Jančík [sczdavos]:

Musíš oddělovat proměnné od stringu: "' . $id . '" Jinak je tam spousta injekcí. Je lepší použít nějaký fw třeba dibi nebo použít mysqli.

Nahoru Odpovědět 9.9.2012 13:42
Čím více času dostaneš, tím méně ho máš.
Avatar
jakub
Redaktor
Avatar
jakub:

Asi jo,ale prořád sem nevyřešil,prečo mi to nejde

Nahoru Odpovědět 9.9.2012 13:45
Uvnitř jsou všichni stejní...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

Nemusí, proměnné fungují takhle v dvojitých uvozovkách. Je tam hodně chyb, kdyby to byl jeho kód, tak bych mu je opravil, ale přijde mi zbytečné opravovat něco zkopírovaného.

Editováno 9.9.2012 13:47
Nahoru Odpovědět 9.9.2012 13:46
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na jakub
Kit:

Ani se mi to nechtělo číst celé. Nejprve si oprav SQL injection, máš jich tam hromadu. Čísla se nedávají do apostrofů a máš tam race condition, neboli souběh. SELECT je zbytečný.

Zkus ho vyhodit možná se to tím vyřeší.

Co znamená "nebufuje"?

Nahoru Odpovědět 9.9.2012 13:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
jakub
Redaktor
Avatar
Nahoru Odpovědět 9.9.2012 14:08
Uvnitř jsou všichni stejní...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jakub
David Čápka:

Nějak takhle vypadaly zdrojové kódy původního Islandsoftu :D Tohle je opravdu začátečnické, plné chyb a ještě zkopírované.

Koukni do sekce PHP, je tam seriál pro začátečníky, je tam vysvětleno vše co potřebuješ. Tohle by bylo opravdu na dlouho takhle ve fóru.

Nahoru Odpovědět 9.9.2012 14:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na jakub
Kit:

Pokud dokážeš reagovat jen na poslední (prakticky zbytečnou) větu, tak je to skutečně vážné a obávám se, že to spravit nepůjde.

Nahoru Odpovědět 9.9.2012 14:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

Aha, nevšiml jsem si uvozovek. Tenhle vejmysl s apostrofy a uvozovky je fakt strašnej :D

Nahoru Odpovědět 9.9.2012 20:06
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

To jsi ještě neviděl Ruby, to je teprve peklo :D

PHPčko je hodně magický, ale já si na to zvykl jak píšu ty manuály a ten jazyk se mi fakt líbí. Když člověk ví co jak funguje, tak se v tom dělá hezky.

Nahoru Odpovědět 9.9.2012 20:20
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

Já mám spíš problém se čtením. Čtu mezi řádky a hodně přeskakuju. Jak jsem viděl tu proměnnou v textu tak mě to zmátlo. Jak teď dělám v tom C#, není tam sprintf ani spojování stringu . tak je to hrozný nezvyk. Osobně si myslím, že psát to takhle není dobrý, dost se to pak dá přehlídnout. Buďto použít již zmíněný formátovaný text nebo spojovníky. Jaký na to máš názor ty?

Nahoru Odpovědět 9.9.2012 20:24
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

V C# je String.Format, dělá to to samé, jako sprintf. V C# to používám pořád. V PHP by se ty proměnné měly balit do {}, je to lépe vidět a highlighter to zvýrazňuje. sprintf jsem v PHP moc používat neviděl, proto to nedělám, naopak v C# se formátuje v MSDN stále.

Editováno 9.9.2012 20:28
Nahoru Odpovědět 9.9.2012 20:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Nahoru Odpovědět 9.9.2012 20:30
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 9.9.2012 20:31
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

"Jak teď dělám v tom C#, není tam sprintf ani spojování stringu ."

Je tam String.Format i konkatenace. Názor mám takový, že by to měl dát do složenic, tedy "text {$promenna} text" nebo "text ${promenna} text". Nevím, která verze se používá více.

Nahoru Odpovědět 9.9.2012 20:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

Myslel jsem to tak, že jak teď poslední dobou dělám hlavně v C# tak v tom PHP kódu není sprintf ani spojování "." ale je ta proměnná přímo v textu, tak že mě to zmátlo. Protože v C# se buďto použije String.Format nebo spojování "+". Žádné proměnné v textu. Preferuji, že by se mělo používat právě těchto dvou metod i v PHP. A proto jsem se ptal, jaký máš názor na používání proměnných natvrdo v textu.

Nahoru Odpovědět 9.9.2012 20:36
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
Kit:

V PHP se dělají různá zvěrstva, dobře se dělá i s Heredoc. Má oblíbená konstrukce:

$objekt=new Data(parametry_pro_vytažení_dat_z_databáze);
echo <<<EOT
Přímý výstup HTML,
do kterého vložím naformátovaná data z
$objekt
a pak pokračuji další omáčkou.
EOT;

Používám to prakticky vždy, když nepoužívám výstupní šablonu v XSLT. Tedy hlavně v jednodušších aplikacích. Vyhnu se tak potřebě cyklů v šabloně.

Nahoru Odpovědět 10.9.2012 12:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.