webForumDet fria alternativet

En enda felaktig rad...

PHP

23 svar · 848 visningar · startad av PollyJuice

Medlem sedan mars 2006124 inlägg
Frågan#1

Håller på med en skoluppgift där jag skapat ett formulär som ger en användare möjlighet att prenumerera på ett nyhetsbrev. Jag använder en databas för att lagra användarens uppgifter, och två php-script, ett för att lagra saker i databasen och ett för att hämta saker ur databasen.

Formuläret och lagra-in-scriptet verkar funka bra, men hämta-ur-scriptet hoppar över if-satsen och går direkt till else. Vad har jag missat? Kan någon ge ett tips på hur jag kan rätta till problemet?
(Har markerat den misstänkta raden med blått.)

uturdatabasen.php:

<?php

if(!empty($_POST["send"])){ //om submitknappen med id=send trycks ned, fortsätt köra scriptet
$connect = odbc_connect( "databas", "", ""); //ansluter till databasen
$query = "SELECT * FROM uppgifter"; //väljer att hämta alla porter från tabellen uppgifter i databasen
$result = odbc_exec($connect, $query); //utför förfrågan

print("<table>");
print("<th>Förnamn</th><th>Efternamn</th><th>E-postadress</th><th>Intresse</th><th>Hur ofta vill du ha ditt nyhetsbrev?</th>");

while(odbc_fetch_row($result)){//hämtar datat från databasen
$Fornamn=odbc_result($result, 'Fornamn');
$Efternamn=odbc_result($result, 'Efternamn');
$Epostadress=odbc_result($result, 'Epostadress');
$Intresse=odbc_result($result, 'Intresse');
$Frequency=odbc_result($result,'Frequency');

  print("\<tr\>\<td\>$Fornamn\</td\>\<td\>$Eftername\</td\>\<td\>$Epostadress\</td\>\<td\>$Intresse\</td\>\<td\>$Frequency\</td\>\</tr\>");

}

odbc_close($connect); //avslutar kopplingen
print("</table>");
}
else {
include ("Lab4.html"); // ta med ursprungsfilen
}
?>

Medlem sedan juni 20006 031 inlägg
#2

Testa att använda isset istället

if(isset($_POST["send"])){

Medlem sedan nov. 20014 054 inlägg
#3

Knappen som du postar med, den heter send , dvs name="send" ? Och du har inställt i formuläret method="post" ?

<?php
if(!empty($_POST["send"])){ //om submitknappen med id=send trycks ned, fortsätt köra scriptet
$connect = odbc_connect( "databas", "", ""); //ansluter till databasen
$query = "SELECT * FROM uppgifter"; //väljer att hämta alla porter från tabellen uppgifter i databasen
$result = odbc_exec($connect, $query); //utför förfrågan

print("<table>");
print("<th>Förnamn</th><th>Efternamn</th><th>E-postadress</th><th>Intresse</th><th>Hur ofta vill du ha ditt nyhetsbrev?</th>");

while(odbc_fetch_row($result)){//hämtar datat från databasen
$Fornamn=odbc_result($result, 'Fornamn'); 
$Efternamn=odbc_result($result, 'Efternamn');
$Epostadress=odbc_result($result, 'Epostadress');
$Intresse=odbc_result($result, 'Intresse');
$Frequency=odbc_result($result,'Frequency');

print("<tr><td>$Fornamn</td><td>$Eftername</td><td>$Epostadress</td><td>$Intresse</td><td>$Frequency</td></tr>");
}

odbc_close($connect); //avslutar kopplingen
print("</table>");
} 
else {
include ("Lab4.html"); // ta med ursprungsfilen
}
?>
Medlem sedan nov. 20014 054 inlägg
#4

Pedda skrev:

Testa att använda isset istället

if(isset($_POST["send"])){

!empty() och isset() är väl i stort sett samma sak. Den ena kollar så att den inte är tom, den andra kollar så att den inte är tom.

:)

Medlem sedan juni 20031 837 inlägg
#5

Fredde Mannen skrev:

!empty() och isset() är väl i stort sett samma sak. Den ena kollar så att den inte är tom, den andra kollar så att den inte är tom.

:)

njae inte ritkigt. empty() räknar 0, "", "0" som tom men det gör inte isset();

finns beskrivet på php.net
http://se2.php.net/manual/sv/function.empty.php
http://se2.php.net/manual/sv/function.isset.php

visa gärna lite kod från själv html-sidan med formuläret.

Medlem sedan nov. 20014 054 inlägg
#6

The_Hulk skrev:

njae inte ritkigt. empty() räknar 0, "", "0" som tom men det gör inte isset();

finns beskrivet på php.net
http://se2.php.net/manual/sv/function.empty.php
http://se2.php.net/manual/sv/function.isset.php

visa gärna lite kod från själv html-sidan med formuläret.

i stort sett skrev jag :P
Men i hans fall så skall det inte spela någon roll, vare han använder isset eller !empty. :)

Medlem sedan mars 2006124 inlägg
#7

Method = post, isset har ersatt !empty, och id för knappen är send... Såhär ser formulärkoden ut:

<!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>
<title>Laboration 4</title>
</head>
<style type="text/css">
<!--
#sida2{
display:none;
}
-->
</style>

<script type="text/javascript">
//<![CDATA[
function fixElement(element, message){
alert(message);
element.focus();
}

function check(){

var passed=false;
var fn = document.getElementById("fornamn");
var en = document.getElementById("efternamn");
var ep = document.getElementById("epost");
if(fn.value =="")
{
fixElement(fn, "Fyll i ditt förnamn");
}
else if(en.value == "")
{
fixElement(en, "Fyll i ditt efternamn");
}
else if(ep.value.indexOf("@") == -1 || ep.value.indexOf(".") == -1)
{
fixElement(ep, "Felaktig e-post adress, skriv in rätt adress")
}
else
{
passed=true;
}
return passed;
}

function kontroll()
{
var fn = document.getElementById("fornamn");
var en = document.getElementById("efternamn");
var ep = document.getElementById("epost");
var res = document.getElementById("resultat");

var a1 = document.getElementById("intresse");
var a2 = document.getElementById("intresse2");
var a3 = document.getElementById("intresse3");
var a4 = document.getElementById("intresse4");
var a5 = document.getElementById("intresse5");
var a6 = document.getElementById("intresse6");
var extra = document.getElementById("valfritt");

var v1 = document.getElementById("dag");
var v2 = document.getElementById("vecka");
var v3 = document.getElementById("manfre");
var v4 = document.getElementById("helg");

res.innerHTML = "<p>Dina Personuppgifter: <br /><\/p>" + "\n";
res.innerHTML += "<p>Förnamn: <br /><\/p>" + fn.value + "\n";
res.innerHTML += "<p>Efternamn: <br /><\/p>" + en.value + "\n";
res.innerHTML += "<p>E-post: <br /><\/p>" + ep.value + "\n";

res.innerHTML += "<p>Dina Prenumerationer: <br /><\/p>" + "\n";
if(a1.checked) res.innerHTML += "<p>Världen<br /><\/p>" + "\n";
if(a2.checked) res.innerHTML += "<p>Politik<br /><\/p>" + "\n";
if(a3.checked) res.innerHTML += "<p>Sport<br /><\/p>" + "\n";
if(a4.checked) res.innerHTML += "<p>Nöje<br /><\/p>" + "\n";
if(a5.checked) res.innerHTML += "<p>Ekonomi<br /><\/p>" + "\n";
if(a6.checked) res.innerHTML += extra.value; + "\n";

res.innerHTML += "<p>Du vill ha ditt brev: <br /><\/p>"
if(v1.checked) res.innerHTML += "<p>Dagligen<br /><\/p>"
if(v2.checked) res.innerHTML += "<p>Veckovis<br /><\/p>"
if(v3.checked) res.innerHTML += "<p>Mån-Fre<br /><\/p>"
if(v4.checked) res.innerHTML += "<p>Helgdagar<br /><\/p>"

sida1.style.display='none';
sida2.style.display='block';
}
//]]>
</script>
<body bgcolor="E8C2EF">
<form id="inmatning" method="post" enctype="" action="inidatabasen.php" name="inmatning">
<div id="sida1">
<h1>Prenumerera på vårt nyhetsbrev!</h1>
<h3>Anmäl ditt intresse här:</h3>
<table bgcolor="#FFFFEF">
<tr>
<td width="90"><label>Förnamn</label></td>
<td><input type="TEXT" id="fornamn" value=
"Skriv ditt förnamn här" size="50" name=
"textruta" /></td>
</tr>
<tr>
<td width="90"><label>Efternamn</label></td>
<td><input type="TEXT" id="efternamn" value=
"Skriv ditt efternamn här" size="50" name="textruta" /></td>
</tr>
<tr>
<td width="90"><label>E-postadress</label></td>
<td><input type="TEXT" id="epost" value=
"Skriv din e-postadress här" size="50" name=
"textruta2" /></td>
</tr>
<tr>
<td colspan="2"><font color="white">.</font></td>
</tr>
<tr>
<td colspan="2"><b>Vad vill du få nyheter om?</b><br />
<input type="checkbox" id="intresse" value="Världen" name=
"varlden" />Världen<br />
<input type="checkbox" id="intresse2" value="Politik" name=
"politik" />Politik<br />
<input type="checkbox" id="intresse3" value="Sport" name=
"sport" />Sport<br />
<input type="checkbox" id="intresse4" value="Ekonomi" name=
"ekonomi" />Ekonomi<br />
<input type="checkbox" id="intresse5" value="Nöje" name=
"noje" />Nöje<br />
<input type="checkbox" id="intresse6" value="Annat" name=
"annat" /><input type="TEXT" id="valfritt" value=
"Skriv vilket ämne du är intresserad av" size="50"
name="textruta3" /><br /></td>
</tr>
<tr>
<td colspan="2"><font color="white">.</font></td>
</tr>
<tr>
<td colspan="2"><b>Hur ofta vill du få ditt nyhetsbrev
utskickat?</b></td>
</tr>
<tr>
<td><input type="radio" id="dag" name="ofta" />Dagligen</td>
<td><input type="radio" id="vecka" name="ofta" />Veckovis</td>
</tr>
<tr>
<td><input type="radio" id="manfre" name=
"ofta" />Mån-fre</td>
<td><input type="radio" id="helg" name="ofta" />Helgdagar</td>
</tr>
<tr>
<td><input type="reset" id="rensa" value=
"Redigera" /><input type="button" id="skicka" value=
"Bekräfta" onclick=
"if(check()== true)kontroll();" /></td>
</tr>
</table>
<p><a href="http://validator.w3.org/check?uri=referer"><img src=
"http://www.w3.org/Icons/valid-html401" alt=
"Valid HTML 4.01 Transitional" height="31" width="88" /></a></p>
</div>

<div id="sida2">
<h3>Kontrollera dina uppgifter:</h3>
<span id="resultat"></span>
<p>

<input type="button" id="redigera" value="Redigera" onclick=
"sida2.style.display='none'; sida1.style.display='block'" />

<input type="submit" size="20" id="send" name="send" value="Skicka" /></p>

<p><a href="http://validator.w3.org/check?uri=referer"><img src=
"http://www.w3.org/Icons/valid-html401" alt=
"Valid HTML 4.01 Transitional" height="31" width="88" /></a></p>
</div>
</form>

</body>
</html>

Och en liten detalj... Polly Juice = kvinna... ;)

Medlem sedan nov. 20014 054 inlägg
#8

Ursäkta.. höhö.. ;) men så funkar det nu då eller? Ger den samma fel?

Medlem sedan mars 2006124 inlägg
#9

Ingen fara... :)

Nej, det funkar fortfarande inte. Den hoppar över if-satsen och går direkt till else.

Medlem sedan nov. 20014 054 inlägg
#10

Och det funkade inte med isset() heller? Ja, undra om det kan ha något med detta att göra i form-taggen. enctype=""
För något i inidatabasen.php, ser jag inget med if-satsen.
Och inte något med submitknappen heller. Så pröva med att ta bort enctype="". :)

Medlem sedan juli 20023 617 inlägg
#11

Ditt formulär tar dig till inidatabasen.php, hur tar du dig till uturdatabasen.php?

Medlem sedan mars 2006124 inlägg
#12

Enctye borttaget, problemet kvarstår.

Medlem sedan mars 2006124 inlägg
#13

fiddler skrev:

Ditt formulär tar dig till inidatabasen.php, hur tar du dig till uturdatabasen.php?

Jo, i inidatabasen.php finns en länk:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Lägg in användaruppgifter i databasen</TITLE
</HEAD>
<BODY STYLE: "background-color=#DC22AF">
<?php
$Fornamn = $_POST["Fornamn"];
$Efternamn = $_POST["Efternamn"];
$Epostadress = $_POST["Epostadress"];
$Intresse="";
if(isset($_POST['Varlden']))
$Intresse .="Världen";
if(isset($_POST['Politik']))
$Intresse .="Politik";
if(isset($_POST['Sport']))
$Intresse .="Sport";
if(isset($_POST['Ekonomi']))
$Intresse .="Ekonomi";
if(isset($_POST['Noje']))
$Intresse .="Nöje";
if(isset($_POST['Annat']))
$Intresse .="Annat";
$Frequency = $_POST["Frequency"];

/* Öppnar databaskoppling */
$dB = odbc_connect("databas","","") or
die("Kan inte öppna databasen.");

$sql=<<<slutSql1
INSERT INTO Table1(Fornamn, Efternamn, Epostadress, Varlden, Politik, Sport, Ekonomi, Noje, Annat, Frequency)VALUES
('$Fornamn', '$Efternamn', '$Epostadress', '$Varlden', '$Politik', '$Sport',
'$Ekonomi', '$Noje', '$Annat', '$Frequency')
slutSql1;

/* Exekverar frågan mot databasen och lagrar resultatet i en variabel som får heta Status */
$Status = odbc_exec($dB,$sql);

// Avslutar databaskopplingen
odbc_close($dB); 

/\* Om det gick bra att skriva in data i databasen, skrivs följande ut på skärmen: \*/
if($Status){
print("Posten har skrivits in i databasen. \<br /\>");
print("För att kolla vad som står i databasen, klicka här:");
}
?\>
**\<a href="uturdatabasen.php"\>Databasinnehåll\</a\>**\<br /\>

<a href="Lab4.html">Tillbaka till formuläret</a>
</BODY>
</HTML>

Medlem sedan juli 20023 617 inlägg
#14

Ok. Du får inte någon $_POST-variabel med dig genom länken så därför hamnar du nere vid else-satsen.

Medlem sedan juni 20031 837 inlägg
#15

lägg gärna all kod i [ html] ... [ /html] eller [ kod] ... [ /kod] taggar (utan mellanrum i taggen)

när du klickar på länken uturdatabasen.php så skickar du inte med något i varken $_POST eller $_GET.
du kan skicka med värden till $_GET genom att lägga till lite i länken

 <a href="uturdatabasen.php?send=send&mer=annat">Databasinnehåll</a><br />

ger

$_GET['send'] = "send";
$_GET['mer'] = "annat";
Medlem sedan mars 2006124 inlägg
#16

Jag kollade i min databas och ser att den 10ggr har registrerat att data ska läggas in - men varje rad är tom. Alltså har den lagt in ingenting alls i databasen, 10 ggr.

Har lagt till <a href="uturdatabasen.php?send=send&mer=annat">Databasinnehåll</a><br />, men den hoppar fortfarande till else-satsen. Var ska jag lägga till get-koden?

Medlem sedan juli 20023 617 inlägg
#17

Byt ut $_POST mot $_GET i övre raden i utur....

Det där med &mer=annat var bara ett exempel från The Hulk. Det kan du ta bort. :)

Medlem sedan mars 2006124 inlägg
#18

Okej, nu verkar uturdatabasen.php funka som den ska - problemet är bara att det inte finns något i databasen att skriva ut, för inidatabasen.php lägger bara in tomma rader i databasen!

Vad är felet NU? Bifogar koden ur inidatabasen.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Lägg in användaruppgifter i databasen</TITLE
</HEAD>
<BODY STYLE: "background-color=#DC22AF">
<?php
$Fornamn = $_POST["Fornamn"];
$Efternamn = $_POST["Efternamn"];
$Epostadress = $_POST["Epostadress"];
$Intresse="";
if(isset($_POST['Varlden']))
$Intresse .="Världen";
if(isset($_POST['Politik']))
$Intresse .="Politik";
if(isset($_POST['Sport']))
$Intresse .="Sport";
if(isset($_POST['Ekonomi']))
$Intresse .="Ekonomi";
if(isset($_POST['Noje']))
$Intresse .="Nöje";
if(isset($_POST['Annat']))
$Intresse .="Annat";
$Frequency = $_POST["Frequency"];

/* Öppnar databaskoppling */
$dB = odbc_connect("databas","","") or
die("Kan inte öppna databasen.");

$sql="INSERT INTO Table1(Fornamn, Efternamn, Epostadress, Intresse, Frequency)VALUES
('$Fornamn', '$Efternamn', '$Epostadress', '$Intresse', '$Frequency')";

/* Exekverar frågan mot databasen och lagrar resultatet i en variabel som får heta Status */
$Status = odbc_exec($dB,$sql);

// Avslutar databaskopplingen
odbc_close($dB); 

/\* Om det gick bra att skriva in data i databasen, skrivs följande ut på skärmen: \*/
if($Status){
print("Posten har skrivits in i databasen. \<br /\>");
print("För att kolla vad som står i databasen, klicka här:");
}
?\>
 \<a href="uturdatabasen.php?send=send"\>Databasinnehåll\</a\>\<br /\>

<a href="Lab4.html">Tillbaka till formuläret</a>
</BODY>
</HTML>

Medlem sedan juli 20023 617 inlägg
#19

Det kan inte vara så att det du kallar "Table1" skulle heta "uppgifter"? Du har olika tabellnamn i "utur..." och "ini...".

Medlem sedan mars 2006124 inlägg
#20

fiddler skrev:

Det kan inte vara så att det du kallar "Table1" skulle heta "uppgifter"? Du har olika tabellnamn i "utur..." och "ini...".

Nej, det var en rest från en gammal uppgift... har uppdaterat bägge så att det står INSERT INTO Table1 resp. SELECT FROM Table1.

271 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
147 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)