webForumDet fria alternativet

fel i formulär

PHP

6 svar · 300 visningar · startad av tanten

Medlem sedan nov. 20051 596 inlägg
Frågan#1

Försöker lära mig olika sorters formulär och vill gärna att denna ska fungera.
Den ska hämta raden besk i tabellen hest så man kan ändra i den.
Eftersom travhästnamn är unika tänkte jag man skulle hämta besk direkt på namnet i stället för ett id. Men det fungerar inte. Dessutom får jag två Undefined index: som jag markerat i koden med rad 15 och 37.
Någon som har lust att hjälpa mig? Får en känsla av att jag tänkt lite fel eller mycket... exemplet är taget ut php5 and mysql bible

if ($_POST['submit'] == 'Submit') {  <---rad 15
//formatera data

$namn =$_POST['namn'];
$as_namn = addslshes($namn);
$besk = $_POST['besk'];
$as_besk = addslashes($_POST['besk']);

//uppdatera beskrivningen
$query = "UPDATE besk
          SET namn = '$as_namn',
			 besk = '$as_besk
			 WHERE namn = $namn";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$success_msg = '<p> Beskrivningen har blivit uppdaterad!</p>';
}else{
 error_log(mysql_error());
 $success_msg = '<p>Något blev fel</p>';
 }
}else{
// Hämta namn och besk
$namn = $_GET['namn'];  <---rad37
$query ="SELECT besk
FROM  `hest` 
WHERE  `namn`  = '$namn'";
$result = mysql_query($query);
$besk_arr = mysql_fetch_array($result);
$namn = stripslashes($besk_arr[0]);
$besk = stripslashes ($besk_arr[1]);
}

$thispage = $_SERVER['PHP_SELF'];

$form_page = <<< EOFORMPAGE
<style type="text/css">
<!--
body, p { color:#000; font-family: verdana;  font-size: 11px;   }
h1{ font-size: 13px; }
-->
</style>
<body>
<table>
<tr>
<td></td><td><h1> Ändra Hästfundering</h1>
<form method="post" action="$thispage">
<input type="text" name="namn" value="$namn" /><br /><br />
<textarea name="besk">$besk</textarea>
<br /><br />
<input type="submit" name="submit" value="Submit" /></form>
</td></tr></table></body>

</body>
</html>
EOFORMPAGE;
echo $form_page;
?> {
Medlem sedan juni 200032 967 inlägg
#2
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
  1. Apostrofer runt strängdata i SQL.
$query = "UPDATE besk 
          SET namn = '$as_namn', 
             besk = '$as_besk 
             WHERE namn = '$namn'";
Medlem sedan nov. 20051 596 inlägg
#3

Nu försvann index-felet på rad 15, men 37:an är kvar.
Jag blir lite konfunderad på hur det ska hämta besk, när då? Inte förrän efter man fyllt i namnet väl.
Är det meningen man ska submitta två gånger?
Det framgår inte i bokexemplet...

Medlem sedan juni 200032 967 inlägg
#4

Nu försvann index-felet på rad 15, men 37:an är kvar.

Du får göra en isset()-kontroll där också.

if (isset(....))
      $namn = .....

Jag blir lite konfunderad på hur det ska hämta besk, när då? Inte förrän efter man fyllt i namnet väl.

Det spelar väl ingen roll i vilken ordning den hämtar fälten från det postade formuläret?

Är det meningen man ska submitta två gånger?

Nej, det kan jag inte tänka mig.

- - - - -

Det vore också najsigt om du indenterade koden ordentligt, så man ser hur koden hänger ihop. Lättare att felsöka, lättare att koda vidare.

- - - - -

Du borde också få ett felmeddelande här:

$namn = stripslashes($besk_arr[0]);

... eftersom du i SQL-frågan endast hämtar beskrivningsfältet. Lägg till namn först i SELECT-delen i SQL-frågan så du kan få ut det i resultatsetet. Hämta alla fält du behöver för uppdateringen på samma gång, och uppdatera allt en gång.

Medlem sedan nov. 20051 596 inlägg
#5

@nders skrev:

Det spelar väl ingen roll i vilken ordning den hämtar fälten från det postade formuläret?

Är det meningen man ska submitta två gånger?

Nej, det kan jag inte tänka mig.

Jag gissar att jag missat något väsentligt innan man kommer fram till formuläret eftersom det ser ut så här nu http://gotlandssidor.se/comment_edit.php

- - - - -

@nders skrev:

Det vore också najsigt om du indenterade koden ordentligt, så man ser hur koden hänger ihop. Lättare att felsöka, lättare att koda vidare.

:r Är något jag också försöker lära mig, men glömde det när jag skrev som det såg ut i boken...
- - - - -

@nders skrev:

Du borde också få ett felmeddelande här:

$namn = stripslashes($besk_arr[0]);

... eftersom du i SQL-frågan endast hämtar beskrivningsfältet. Lägg till namn först i SELECT-delen i SQL-frågan så du kan få ut det i resultatsetet. Hämta alla fält du behöver för uppdateringen på samma gång, och uppdatera allt en gång.

Har jag gjort nu men eftersom jag inte kommit dit att formuläret visar någonting alls så... vet jag inte om felet försvunnit.

if (isset(....))
      $namn = .....

Har försökt skriva ut det, men fixar det inte tydligen, för indexfelet blir kvar. Kan du visa hur det ska se ut?

Medlem sedan juni 200032 967 inlägg
#6

Jag gissar att jag missat något väsentligt ...

En sak kan väl vara att du ska skicka ett giltigt hästnamn till sidan med querystring?

Kan du visa hur det ska se ut?

Nej, jag kan egentligen inte PHP. Jag är programmerare, och kan programmering, men språket php kan jag inte. Så, visa koden som den ser ut nu (gärna indenterad), så kanske jag eller någon annan kan peka med hela handen om det är något uppenbart . :)

mvh

Medlem sedan nov. 20051 596 inlägg
#7

OK... har bara plötsligt fått ett annat problem mitt i alltihop. Har fått en glappkontakt i datorn, som gör att den plötsligt dör, så det blir ständiga omstarter. Typiskt en lördag... Får se hur mycket jag lyckas göra... så kommer jag inte tillbaka så har den dött på riktigt...

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)