webForumDet fria alternativet

hjälp med basic php

2 svar · 448 visningar · startad av egxezex

egxezexMedlem sedan jan. 200786 inlägg
#1

Känner mig jätte dum då jag inte klarar att skapa det simpla script jag vill. Har väl suttit för länge med det för att kunna tänka så nu undrar jag om nån kan föreslå hur jag ska göra.

$query = ("SELECT * FROM antispam ORDER BY RAND() limit 1");	//slumpar fram en rad ifrån databasen.
$result = mysql_query($query) or die('Query failed:Select * from antispam ' . mysql_error()); 
 
 
	while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

//skriver ut ordet och en ruta att svara i.
echo "
		<form method=\"post\" action=\"\">
		<p>Skriv '$line[ord]' baklänges i rutan<p>	
"
?>
<td><input type="text" name="svar" value=""></td>
<?
 
echo"		<input type=\"submit\" name=\"change\" value=\"Skicka\">
       		</form>";

$svar2 = "$line[svar]"; //sparar rätt svar ifrån databasen
}
$svar = $_POST['svar'];

if (isset($_POST['change'])){

if ($svar == $svar2){

 header("Location: ../index.php");
 }
}

Det jag försöker göra är att slumpa fram ett ord från en databas, sen ska man skriva ordet baklänges i textrutan. Sen ska den kontollera att man skrivit rätt genom att jämföra med fältet svar i databasen. Det jag har problem med är hur jag ska jämföra ordet ifrån inmatningsfältet med svaret i databasen som ligger på samma rad som ordet i databasen. Hoppas ni förstår :)

databasen ser typ ut så här:

______________
'ord' | 'svar'|
--------------------
kaffe | effak |
---------------------
gitarr | rratig |
--------------------

The_HulkMedlem sedan juni 20031 837 inlägg
#2

Det du lägger i $svar2 sparas inte mellan de olika sidvisningarna.
lägg det hellre i $_SESSION['svar2'] = "";

$_SESSION sparas mellan de olika sidvisningarna för just den sessionen.
Tänk på att du måste starta sessionen med session_start() innan du skrivet
ut någon HTML-kod.

Jag har ändrat lite i din kod men inte testat den. Jag har markerat de ändrade raderna med tjock stil.

[B]session_start();[/B]

 $query = ("SELECT * FROM antispam ORDER BY RAND() limit 1");    //slumpar fram en rad ifrån databasen.
$result = mysql_query($query) or die('Query failed:Select * from antispam ' . mysql_error());

    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

//skriver ut ordet och en ruta att svara i.
echo "
        <form method=\"post\" action=\"\">
        <p>Skriv '$line[ord]' baklänges i rutan<p>    
"
?>
<td><input type="text" name="svar" value=""></td>
<?

echo"        <input type=\"submit\" name=\"change\" value=\"Skicka\">
               </form>";

[B]$_SESSION['svar2'] = "$line[svar]"; //sparar rätt svar ifrån databasen[/B]
}
$svar = $_POST['svar'];

if (isset($_POST['change'])){

[B]if ($svar == $_SESSION['svar2']){[/B]

header("Location: ../index.php");
}
}
egxezexMedlem sedan jan. 200786 inlägg
#3

Ok jag trodde jag hade fått igång det och har nu lagt in det i ett annat registreringsscript.
Kör jag med session_start(); som du skrev får jag följande felmeddelande:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/local/www/apache22/data/skriptbanken/pages/registrera.php:9) in /usr/local/www/apache22/data/skriptbanken/pages/registrera.php on line 14

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/local/www/apache22/data/skriptbanken/pages/registrera.php:9) in /usr/local/www/apache22/data/skriptbanken/pages/registrera.php on line 14

Kör jag utan session_start(); så blir $_SESSION['svar2'] tom.

Nån som ser vad jag gör fel?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel=StyleSheet href="../setts/style.css" TYPE="text/css">
<title>Bli medlem</title>
</head>
<body class="main">
<strong>Bli medlem</strong>
<?php
ob_start();
include "../setts/conn.php"; // Databasanslutningen

//session_start();                --tillhör antispam men funkar ej

if (isset($_POST['submit'])){

  $_POST = db_escape($_POST);
  
  $pass = $_POST['passwd1'];
  $fornamn = $_POST['fornamn'];
  $efternamn = $_POST['efternamn'];
  $stad = $_POST['stad'];
  $epost = $_POST['epost'];
  $msn = $_POST['msn'];
  $skype = $_POST['skype'];
  $hemsida = $_POST['hemsida'];
  $nyhetsbrev = $_POST['nyhetsbrev'];
  $pass2 = md5($pass);

  echo $fornamn;
  // Tag bort eventuella blanksteg i början eller slutet
  foreach($_POST as $key => $val){
    $_POST[$key] = trim($val);
  }

  //Kolla efter tomma fält
  if (empty($_POST['user2']) || empty($_POST['passwd1'])  || empty($epost) || empty($svar)|| empty($nyhetsbrev)) {
    $reg_error[] = 0;
  }

  // Kolla om användarnamnet är upptaget
  $sql = "SELECT COUNT(*) FROM $mem_table WHERE user='{$_POST['user2']}'";
  $result = mysql_query($sql);
  if (mysql_result($result, 0) > 0) {
    $reg_error[] = 1;
  }

  //Kolla så att lösenorden är längre än 5 tecken
  if (strlen($_POST['passwd1'])<5){
    $reg_error[] = 2;
  }
  // Kolla så att lösenorden stämmer överrens
  if ($_POST['passwd1'] != $_POST['passwd2']) {
    $reg_error[] = 3;
  }

  // Kolla så att man skrivit in rätt i antispam fältet
  if ($_POST['svar'] != $_SESSION['svar2']){
    $reg_error[] = 4;
  }

//----------------------------------------------------------------

  // Inga fel? Spara
  if (!isset($reg_error)) {

    $sql = "INSERT INTO $mem_table(user, pass, fornamn, efternamn, stad, epost, msn, hemsida, nyhetsbrev, skype, skapad)
            VALUES('{$_POST['user2']}', '$pass2', '$fornamn', '$efternamn', '$stad', '$epost', '$msn', '$hemsida', '$nyhetsbrev', '$skype', '$date')";
    $send = mysql_query($sql) or die(mysql_error());

   echo "<br /><br />Välkommen: <strong>{$_POST['user2']}</strong><br />
   		Du är nu välkommen att delta i medlemsktiviteterna!";

  }
ob_end_flush();
}
else {

  // Sätt variabler för tomt formulär
  for ($i=0; $i<4; $i++) {
    $back[$i] = "";
  }

}
//Meddelanden----------
$error_list[0] = "Alla fält är inte infyllda";
$error_list[1] = "Användarnamnet är upptaget";
$error_list[2] = "Lösenordet måste vara längre än 5 tecken";
$error_list[3] = "Lösenorden stämmer inte överrens";
$error_list[4] = "antispam error inskrivet:$_POST[svar]  databas:$_SESSION[svar2]";
//$godkant = "Godkännt!";
?>

<?php
if (isset($reg_error)){

  echo "Något blev fel:<br>\n";
  echo "<ul>\n";
  for ($i=0; $i<sizeof($reg_error); $i++) {
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
  }
  echo "</ul>\n";

  $back[0] = stripslashes($_POST['user2']);
  $back[2] = stripslashes($_POST['name']);
// $back[3] = stripslashes($_POST['email']);

}

//--------------------------antispam-----------------

//slumpar fram en rad ifrån databasen.
$query = ("SELECT * FROM antispam ORDER BY RAND() limit 1");	
$result = mysql_query($query) or die('Query failed:Select * from antispam ' . mysql_error()); 

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
$ord =$line['ord'];
$data=$line['svar'];
$_SESSION['svar2'] = $data;
}

?>

<form action="registrera.php" method="post">
Användarnamn:<br />
<input type="text" name="user2" class="field" value="" />*<br />
Lösenord:<br />
<input type="password" name="passwd1" class="field" value="" />*<br />
Repetera lösenord:<br />
<input type="password" name="passwd2" class="field" value="" />*<br />
Förnamn:<br />
<input type="text" name="fornamn" class="field" value="" /><br />
Efternamn:<br />
<input type="text" name="efternamn" class="field" value="" /><br />
Stad:<br />
<input type="text" name="stad" class="field" value="" /><br />
E-post:<br />
<input type="text" name="epost" class="field" value="" />*<br />
MSN:<br />
<input type="text" name="msn" class="field" value="" /><br />
Skype:<br />
<input type="text" name="skype" class="field" value="" /><br />
Hemsida:<br />
<input type="text" name="hemsida" class="field" value="" /><br />
Nyhetsbrev:<br />
<input name="nyhetsbrev" type="radio" value="ja" />Ja
<input name="nyhetsbrev" type="radio" value="nej" />Nej
<br /><br />
<?
echo "skriv $ord baklänges<br \>";
?>

<input type="text" name="svar" value="" />
<br /><br />
<input name="submit" type="submit" class="field" value="Skicka" />

</form>

</body>
</html>

Edit/ OOPS såg precis att jag plaserat det fel i koden :r

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)