Gostovanje na Windows strežnikih, ponudba webhosting, ASP.NET, PHP, MySQL


Windows technical support
Podporni forum za uporabnike storitev spletnega gostovanja
Reply to topic
Anketa...
WarMaker


Joined: 16 Mar 2004
Posts: 26
Reply with quote
Imam probleme z anketo... Imam sledeče skripte:


povezi_se.php

<?php
$_host = "localhost";
$_database = "anketa";
$_username = "anketa";
$_password = "**********";

@mysql_connect( $_host, $_username, $_password) or die( "ERROR: ". mysql_error() );
@mysql_select_db( $_database ) or die( "ERROR: ". mysql_error() );
?>

dodaj_anketo.php

<?php
include_once("povezi_se.php");

if ( $_POST ) {
$vprasanje = trim( $_POST["vprasanje"] );
$odgovori = trim( $_POST["odgovori"] );

if ( $vprasanje && $odgovori ) {
mysql_query( "UPDATE poll_q SET active=0" ) or die( mysql_error() );
mysql_query( "INSERT INTO poll_q (q,a,active) VALUES ('$vprasanje','$odgovori',1)" ) or die( mysql_error() );
mysql_close();
header( "location: ankete.php" );
exit;
}
}
?>
<form action="<?=$_SERVER["PHP_SELF"];?>" method="post">
Vprašanje:<br />
&nbsp;&nbsp;&nbsp;<input name="vprasanje" type="text" style="width: 300px;" /><br /><br />
Odgovori:<br />
&nbsp;&nbsp;&nbsp;<textarea name="odgovori" cols="" rows="8" style="width: 300px;"></textarea><br /><br />
&nbsp;&nbsp;&nbsp;<input type="submit" value="Dodaj" />
</form>

anketa.php

<?php
include_once("povezi_se.php");

$sql = mysql_query( "SELECT * FROM poll_q ORDER BY active DESC" ) or die( mysql_error() );
$num = mysql_num_rows( $sql );
$votes = array_unique( explode(",", $_COOKIE["odgovori"]) );

for ($i=0; $i < $num; $i++) {
$assoc = mysql_fetch_assoc( $sql );
$answers = explode("n",$assoc["a"]);
$sql2 = mysql_query( "SELECT COUNT(*) FROM poll_a WHERE poll_id=$assoc[id]" ) or die( mysql_error() );
$votes_num = mysql_result($sql2, 0);

echo"<p style="width: 100%; font-size: 10pt; font-family: verdana;">n";
if ( in_array($assoc["id"],$votes) ) {
echo $assoc["active"]? "Trenutna anketa >>><br />n": null;
echo "$assoc[q]: $votes_num glasov<br />n";

foreach ($answers as $a_id => $answer) {
$current_num = mysql_result( mysql_query( "SELECT COUNT(*) FROM poll_a WHERE (a=$a_id && poll_id=$assoc[id])" ), 0 );
@$procent = round( $current_num * 100 / $votes_num ,1);

echo"$answer: $current_num glasov ($procent%)<br />";

echo"<table cellspacing="0" style="width: 500px;">n";
echo"<tr>";
echo"<td style="width: ". $procent ."%; background-color: #808080; border: 1px solid #808080;">&nbsp;</td>";
echo"<td style="width: ". (100 - $procent) ."%; background-color: #EAECF5; border: 1px solid #808080;">&nbsp;</td>";
echo"</tr>";
echo"</table>n";
}

echo"<br />";
} else {
echo"<form action="dodaj_glas.php" method="post" style="">n";
echo"<input type="hidden" name="poll_id" value="$assoc[id]" />n";

echo $assoc["active"]? "Trenutna anketa<br /><br />n": null;
echo "$assoc[q]:<br />n";

foreach ($answers as $a_id => $answer)
echo"<input type="radio" name="answer" value="$a_id" /> $answer<br />n";

echo"<input type="submit" value="Glasuj" />n";
echo"</form>n<br />";
}
echo"</p>n";
}
?>

in dodaj_glas.php

<?php
include_once("povezi_se.php");

if ( $_POST ) {
$poll_id = (int)$_POST["poll_id"];
$answer = (int)$_POST["answer"];
$sql = mysql_query( "SELECT * FROM poll_q WHERE id=$poll_id LIMIT 1" ) or die( mysql_error() );
$assoc = mysql_fetch_assoc( $sql );
$votes = explode("n", $_COOKIE["odgovori"]);

if ( $assoc && isset($_POST["answer"]) && !in_array($poll_id,$votes) ) {
mysql_query( "INSERT INTO poll_a (poll_id,a) VALUES($poll_id,$answer)" ) or die( mysql_error() );
array_push($votes,$poll_id);
setcookie("odgovori");
setcookie("odgovori",implode(",",$votes),time()+3600*24*300);
}
}

mysql_close();
header("location: ankete.php");
exit;
?>

Vse skupaj je na www.slo-games.net/anketa/

Problem pa je v tem, da mi noče naredit nove ankete... v bazi sem naredil točno tako, kot piše:

Tabela poll_q:
1
CREATE TABLE poll_q (
id int(10) unsigned NOT NULL auto_increment,
q varchar(255) NOT NULL default '',
a text NOT NULL,
active tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;

Tabela poll_a:
1
CREATE TABLE poll_a (
id int(10) unsigned NOT NULL auto_increment,
poll_id int(10) unsigned NOT NULL default '0',
a int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;

Sej si lahko greste ogledat -> up ime in geslo je tako in tako zgoraj napisano Smile

hvala, lp

_________________
I know what you did last summer!
View user's profileSend private message
Pico
Site Admin

Joined: 18 Jan 2004
Posts: 250
Location: HostMachine.net
Reply with quote
kot prvo: Izbrisal sem geslo iz tvojega posta, če je slučajno res pravilno! Ne priporočam javno razkazovanje gesel in dostopnih podatkov Confused

Kot drugo:
Za rešitev problema priporočam, da po vsakem SQL QUERY-ju dodaš izpis samegy QUERY-ja, pa potem ročno vnašaš v MySQL - tako boš mogoče našel napako.
Torej - debugging! Cool

_________________
Site admin alias Labsy
Vsi nasveti in tehnične rešitve so podani v dobri veri in za ljudi z razčiščenimi pojmi o veljavni zakonodaji.
Odgovornost prevzemam izključno in samo za tiste posege, ki jih opravim lastnoročno.
View user's profileSend private messageVisit poster's websiteMSN Messenger
WarMaker


Joined: 16 Mar 2004
Posts: 26
Reply with quote
OK... hvala za spremembo gesla Smile

Heh... s temi query-mi si me zelo zmedel... ki se ne raumem toliko v to... Kaj problem je v MySql bazi.. al PHP skripti?

_________________
I know what you did last summer!
View user's profileSend private message
Pico
Site Admin

Joined: 18 Jan 2004
Posts: 250
Location: HostMachine.net
Reply with quote
Ja tkole nared, recimo:

takoj za SQL stavkom naredi ECHO tega stavka, pa ga ročno vnašej, pa glej, kaj se dogaja, npr., namesto:

$sql = mysql_query( "SELECT * FROM poll_q ORDER BY active DESC" ) or die( mysql_error() );

narediš nekaj podobnega, s tem da sproti vidiš vse SQL QUERY-je:

$sqls = "SELECT * FROM poll_q ORDER BY active DESC";
$sql = mysql_query($sqls) or die( mysql_error() );
echo "<br> " . $sqls;


Potem lahko ročno vnašaš vsak SQL stavek v bazo in vidiš, kje zadeva zašteka.

_________________
Site admin alias Labsy
Vsi nasveti in tehnične rešitve so podani v dobri veri in za ljudi z razčiščenimi pojmi o veljavni zakonodaji.
Odgovornost prevzemam izključno in samo za tiste posege, ki jih opravim lastnoročno.
View user's profileSend private messageVisit poster's websiteMSN Messenger
WarMaker


Joined: 16 Mar 2004
Posts: 26
Reply with quote
hmmm... nisem še tak PHPjevc... samo sem šel na www.3delavnica.com in sem najdel eno skripto, ki tudi ne dela! zdej.. sprašujem se zakaj mi nobena skripta ne dela.. Kaj morajo imet datoteke kej posebnega (kar Win server ne ponuja) al je samo - ker sem tako butast, da ne znam naštimat.. ?

link do ankete, ki jo imam na serverju : http://www.slo-games.net/index.php
link do ankete, ki se nahaja na 3delavnica: http://3delavnica.com/index.php?main=ucilnica_clanek&oddelek=6&clanek=96

PS: Če sledim navodilom... nekje na sredini strani piše tole:

<?
}
?>

WTF ? Mah, saj ni tako hudo. Na začetku dobi vsebino tabele 'anketa' v array. Če gre vse po maslu izipše najprej 'vprašanje' ankete.


if($result[1]){
?>
<input type="Radio" name="glasov" value="1">
<?
echo("$result[1]");
}

Kaj bi pa naj pomenilo tole ?! Recimo da boste imeli v vaši anketi samo 3 možne odgovre, potem pustite field 'odgovor4' in 'odgovor5' prazen. Skripta pa potem preveri pač če ni nič zapisano ne bo ponudil tega odgovora. Simple.
Izgledalo bi naj nekako takole:


Ne razumem, KAM MORAM VSTAVIT TO:
if($result[1]){
?>
<input type="Radio" name="glasov" value="1">
<?
echo("$result[1]");
}



Pa še nekaj... ne piše, kako dodajat vprašanja in odgovore.. in sem vprašal kolega, pa mi je rekel, da se to postavlja v bazi... kako?


Hvala, lp

_________________
I know what you did last summer!
View user's profileSend private message
Pico
Site Admin

Joined: 18 Jan 2004
Posts: 250
Location: HostMachine.net
Reply with quote
Tale koda:
if($result[1]){
?>
<input type="Radio" name="glasov" value="1">
<?

echo("$result[1]");
}
ne more delati!
Prav je takole:
if($result[1]){
echo '<input type="Radio" name="glasov" value="1"> ';
echo("$result[1]");
}


Drugače pa PHP deluje odlično na vseh naših Win serverjih, je pa res, da se v določenih podrobnostih razlikuje od PHP-ja na Linux platformi. Predvsem je razlika v avtentikaciji uporabnikov, ki se tukaj rešuje drugače, pa tudi kjer je PHP skripta narejena tako, da uporablja, recimo, sendmail za pošiljanje pošte (kar nekateri programerji kar vzamejo za privzeto), je potrebno skripto v tem delu predelati, ker sendmaila ni instaliranega.
To so glavne razlike. Je še par manjših razlik, na splošno pa vse dela identično in brez problemov.

_________________
Site admin alias Labsy
Vsi nasveti in tehnične rešitve so podani v dobri veri in za ljudi z razčiščenimi pojmi o veljavni zakonodaji.
Odgovornost prevzemam izključno in samo za tiste posege, ki jih opravim lastnoročno.
View user's profileSend private messageVisit poster's websiteMSN Messenger
WarMaker


Joined: 16 Mar 2004
Posts: 26
Reply with quote
OK... sem popravil, samo ne znam vstavit v tabele podatke...

Mi lahko poveste, kako?!
lp

_________________
I know what you did last summer!
View user's profileSend private message
Anketa...
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
All times are GMT + 1 Hour  
Page 1 of 1  

  
  
 Reply to topic