Kjapp og trygg hosting for Wordpress

Hvorfor funker ikke denne POST-formen?

Mr Vest

Sjefen over alle sjefer!
Hei. Her har jeg en liten kode.

Kode:
<form action="profile.php?do=oppdatering" method="post">
<select name="select" id="select">
<option value="-1">Velg et valg</option>
<option value="1">Valg 1</option>
<option value="2">Valg 2</option>
<option value="3">Valg 3</option>
</select>
<input type="submit" class="button" id="oppdateringsknapp" value="Oppdater">
</form>

profile.php?do=oppdatering finner vi her:

Kode:
$select=$_POST['select'];
if ($select=="-1")
{
$select="Feltet er tomt... Derfor henter jeg her ut gammel informasjon...";
}
else
{
$select="Ser bra ut. Nå endrer vi gammel informasjon til ny informasjon.";
}
OG HER KJØRER JEG INFORMASJONEN OPP I DATABASEN.

Denne funker ikke slik den skal. Dvs, dersom verdien ifra FORMen er -1, da registrerer ikke denne dette, og dermed ender det opp med at det ikke kommer noe som helst opp i databasen. Det er mulig jeg roter litt her nå, er litt sliten, men om dere ser noe galt med denne kodesnutten ville det vært kjempegreit med en bekjed. :)

Update:
Jeg forstår ingenting her altså. Altså, alt skal etter rett funke fint fant jeg nettopp ut, men så er det bare et eller annet rart som skjer. Nå forsøkte jeg å printe ut informasjonen i nettleseren også her, og det ser ut til at verdien den henter blir riktig. Det snodige er bare at den ikke legger riktig informasjon om i databasen. Denne tråden ble bare rot nå altså, beklager det.
 
Sist redigert av en moderator:

Mr Vest

Sjefen over alle sjefer!
Det ligger nok i måten jeg legger det opp i databasen på ja. Eneste er bare at jeg ikke der heller klarer å finne noen feil. Dette er kodene som står på de tre forkjellige stedene:

$select=$_POST['select'];
if ($select=="-1")
{
$informasjon=$henter_gammel_info_fra_databasen;
}
else
{
$informasjon=$select;
}
mysql_query("update users set humor='$informasjon' where username='$brukernavn'",$c);

Feltet i databasen er varchar(255). Det er helt sikkert bare meg som har oversett noe greier nå, og jeg finner nok helt sikkert ut hva det er i løpet av kvelden. Kan dere se noe feil med queryen?
 

Mr Vest

Sjefen over alle sjefer!
Hehe, jeg føler meg litt teit nå ja. Neida, du har rett. Det skal ikke skje noe dersom $_POST['select'] er -1, så hvorfor jeg har laget den til slik som jeg har gjort kan jeg skylde på at jeg er i en periode hvor jeg lærer meg dette - Og da blir det fort litt "Hvorfor gjøre det lettvint når man kan gjøre det tungvint?-resultat."

Det skal altså ikke skje noe i databasen dersom $_POST['select'] er -1, så istedenfor at jeg henter ut gammel informasjon fra databasen og oppdaterer feltet enda en gang med den samme gamle informasjonen er jo litt teit. Jeg skal forandre på dette her, så funker det nok sikkert veldig bra etterpå. - Selv om jeg må innrømme at jeg faktisk ikke helt forstår hvorfor ikke den funker slik den er nå. Det er jo noe som skulle gitt samme resultat bare på en teit måte.

Ellers kan jeg jo si takk for at du fikk meg til å våkne litt opp her nå. :)
 
Hvordan vet du at den ikke funker? Du har tatt verdi x og byttet den ut med verdi x. Når du sjekker ser du at verdien er x. Dersom den kronglete funksjonen virker, blir resultatet x. Dersom den ikke virker, blir resultatet x. Ettersom x=x, hvordan klarer du å se forskjell på om den virker eller ikke virker?
 

tyr897

Medlem
bedre å bruke <option>Velg et valg</option> på det første valget. trenger ikke ha med value. Heller sjekk om feltet er satt eller ikke.

Om value ikke er satt spesifikt, blir value "Velg et valg". Med andre ord like greit å bruke -1, særdeles dersom man har flere språk.
 

Sjefskoder

Sjefskoder
Mor'n!


Det første du må lære deg er å forstå kode..

"om det er gjort, så gjør dette om ikke det er gjort så gjør noe annet" :p

Det er slik vi skal lese hva du vil ha gjort..

også kjører vi på...

Først skjemaet.:
ett skjema er et skjema, så det regner jeg med at du kan :p

HTML:
<form action="profile.php?do=oppdatering" method="post">
<select name="select" id="select">
<option value="-1">Velg et valg</option>
<option value="1">Valg 1</option>
<option value="2">Valg 2</option>
<option value="3">Valg 3</option>
</select>
<input type="submit" class="button" id="oppdateringsknapp" value="Oppdater">
</form>

Og ja, value er greit å ha her i selecten;)

Også selve php koden i "profile.php?do=oppdatering" ;)

PHP:
//Først gjøre om navnet på selecten
$select = $_POST['select']

//så sjekker vi om value'n = -1 ::
if ($select=="-1"){
//Her kjører du på med en handling dersom den er det

//som å slenge til med en liten beskjed til brukeren, kanskje:

echo 'ALT er IKKE okidoki, mister!';
}

//Om ikke den er det så ::
else {
//så kjører du på med en handling

//som å slenge til med en liten beskjed til brukeren, kanskje:

echo 'ALT er heeeeelt okidoki, mister!';

//også stenger vi denne else'n
}

see??

Og hva har vi da lært?
At man må tenke som et barn når man skal programmere for å forstå hva man egentlig vil ;)
 

Mr Vest

Sjefen over alle sjefer!
olafmoriarty skrev:
Hvordan vet du at den ikke funker? Du har tatt verdi x og byttet den ut med verdi x. Når du sjekker ser du at verdien er x. Dersom den kronglete funksjonen virker, blir resultatet x. Dersom den ikke virker, blir resultatet x. Ettersom x=x, hvordan klarer du å se forskjell på om den virker eller ikke virker?

Jeg tok ikke verdi x og byttet ut med verdi x. Jeg sjekket OM verdi X var en ny verdi, og dersom verdi x ikke var ny hentet jeg ut den gamle verdien og la den opp i databasen på nytt. Det som er greia er at feltet i databasen blir tomt selv om $informasjon faktisk inneholder riktig tekst. Jeg vet at $informasjon inneholder riktig tekst fordi jeg forsøkte å printe den ut på skjermen samtidig som den etter rett skulle lagt den opp i databasen.

Hehe Sjefskoder, det var slik jeg forstod at jeg burde legge den opp straks etter olafmoriarty fikk meg til å forstå at det var en teit måte jeg hadde satt det sammen på tidligere i dag. Men Sjefskoder? Kan du se noe i min kode som skulle sørge for at jeg ikke skulle ende opp med et tilsvarende resultat?
 

Sjefskoder

Sjefskoder
Mr Vest skrev:
Men Sjefskoder? Kan du se noe i min kode som skulle sørge for at jeg ikke skulle ende opp med et tilsvarende resultat?

Hvordan ser koden din ut nå da, så langt?

Smell den ut i tråden her ;)
 

Mr Vest

Sjefen over alle sjefer!
Koden min er den jeg har lagt ut i deler litt lenger oppe. Her er den sammenslått:

Formen som sendes inn skrev:
<form action="profile.php?do=oppdatering" method="post">
<select name="select" id="select">
<option value="-1">Velg et valg</option>
<option value="1">Valg 1</option>
<option value="2">Valg 2</option>
<option value="3">Valg 3</option>
</select>
<input type="submit" class="button" id="oppdateringsknapp" value="Oppdater">
</form>

Tar imot data fra formen skrev:
$select=$_POST['select'];
if ($select=="-1")
{
$informasjon=$henter_gammel_info_fra_databasen;
}
else
{
$informasjon=$select;
}
mysql_query("update users set humor='$informasjon' where username='$brukernavn'",$c);

Din kode lar være og gjøre noe som helst med feltet i databasen dersom verdien er det samme som den allerede er i databasen. Min kode skal etter rett hente en verdi og legge opp samme verdi på nytt i databasen dersom verdien er den samme som allerede finnes i databasen.

Jeg vet at min kode er håpløs i dette tilfellet, og jeg skal ikke bruke den. Det er koden du kommer med jeg skal bruke sånn at det er sagt. Jeg bare spør fordi min kode sørger for at databasefeltet blir tomt selv om $informasjon som jeg sier at skal kjøres opp i databasen inneholder en verdi som f.eks "Dette er teksten som skal opp i databasen." Hva er det som gjør at min kode ender opp med å gi meg et tomt felt i databasen selv om $select faktisk har en verdi?

Dvs, dersom jeg legger til f.eks:

PHP:
print"Du har akkurat lagt opp $informasjon til databasen og alt er bra.";
på slutten av koden over, da viser den faktisk riktig verdi fra $informasjon. Databasefeltet blir allikevel tomt.
 
Sist redigert:

Sjefskoder

Sjefskoder
Tok alt under et og sjekket om det fungerer og det gjør der..
HTML:
<form action="#" method="post">
<select name="select" id="select">
<option value="-1">Velg et valg</option>
<option value="1">Valg 1</option>
<option value="2">Valg 2</option>
<option value="3">Valg 3</option>
</select>
<input type="submit" class="button" id="oppdateringsknapp" value="Oppdater" name="knapp">
</form>
PHP:
<?
if (isset($_POST['knapp'])) {
	
$select=$_POST['select'];
if ($select=="-1")
{
$informasjon='henter_gammel_info_fra_databasen';
}
else
{
$informasjon=$select;
}
echo $informasjon;
}

Men, det jeg stusser litt på er hvorfor du har action="profile.php?do=oppdatering"
finnes denne siden (profile.php?do=oppdatering) eller er det profile.php som finnes?

Om kun profile.php finnes så setter du heller action til "?do=oppdatering" ;)

Sjekk om det hjelper ellers så får vi gå enda dypere inn i dette ;)
 

Mr Vest

Sjefen over alle sjefer!
Jeg må nok bruke profile.php?do=oppdatering fordi formen finnes i en annen fil som heter sidebar.php, mens profile.php inneholder ganske mye mer enn bare ?do=oppdatering.

Hehe, det er ikke sånn kjempeviktig å finne denne feilen for meg altså. Det er bare meg som undret meg litt på hva som faktisk kunne være galt. Alt sammen løser seg og blir bra straks jeg heller legger opp samme kode som du kom med her.

Bare sånn for nysjerrighetens skyld:

"if (isset($_POST['knapp'])) {" Hva gjør denne?
 

Sjefskoder

Sjefskoder
Mr Vest skrev:
Bare sånn for nysjerrighetens skyld:

"if (isset($_POST['knapp'])) {" Hva gjør denne?

If = dersom
isset = SATT ikke NULL, Med andre ord aktivert..
$_POST['knapp'] = submit-knappen

Med barnespråk: " Dersom knappen er trykket på " ;)
 
Topp