Fel vid $variabel = $_POST[variabel];

Permalänk
Medlem

Fel vid $variabel = $_POST[variabel];

Jag håller på att snickra ihop ett registreringsscript, och jag får fel i mysql nu. Det fungerar dock på min andra dator med ett äldre wamp än det jag har på den här.

Här är koden jag har som är fel enligt mysql-errors:

<?php echo "<h1>Registrering</h1>"; $submit = $_POST['submit']; //data från registreringsformen $fullname = $_POST[fullname]; $username = $_POST[username]; $password = $_POST[password]; $repeatpassword = $_POST[repeatpassword]; if ($submit) { echo "$username/$password/$repeatpassword/$fullname"; } ?>

Jag får följande fel: "Notice: Undefined index: submit in C:\wamp\www\login\login1\register.php on line 5", fast på alla variabler. Vad har jag gjort för fel?

Permalänk
Hedersmedlem

Du får visa vilka form-variabler du sätter, speciellt koden för din <input type="submit" ...>-knapp.

Du saknar uppenbarligen lite fnuttar på dina index på rad 8-11.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Du får visa vilka form-variabler du sätter, speciellt koden för din <input type="submit" ...>-knapp.

Vad menar du? Jag förstår inte...

Permalänk
Hedersmedlem
Skrivet av erre2:

Vad menar du? Jag förstår inte...

För att `$_POST[]` ska vara satt så måste du ha kommit till sidan via en sida med ett formulär där fälten är namngivna som de index du försöker anropa dem med i denna PHP-fil. Hur ser koden ut där? Sätts `$_POST['submit']`? Du får posta din formulärkod här för att man ska kunna se vad som felar. Om det inte bara är saknade fnuttar som jag nämnde.

Om du alltså anropar denna PHP-fil direkt så är det inte konstigt att `$_POST`-variabeln är tom.

EDIT: Ah, jag tolkar om din fråga lite. Kodexempel:

<?php if (isset($_POST['submit'])) { // Data från registreringsformuläret: $fullname = $_POST['fullname']; $username = $_POST['username']; $password = $_POST['password']; $repeatpassword = $_POST['repeatpassword']; echo "$username/$password/$repeatpassword/$fullname"; } ?>

Det kanske är detta du menar (men det är svårt att veta utan att se ett större sammanhang): nu så kontrolleras bara `$_POST`-variabeln om `$_POST['submit']` är satt och anmärkningarna bör tystna.

Att du märker det på den ena datorn men inte den andra är kanske för att den ena är konfigurerad till att bara nämna PHP-fel, medan den andra även berättar om PHP-anmärkningar.

EDIT IGEN: PHP anmärker på att du kallar på variabeln t ex `$_POST['submit']` trots att den inte är satt. Då säger den "hallå där, var det där meningen?" (om den är konfigurerad att säga till om anmärkningar, som sagt). I mitt kodexempel så används `isset()` som är en fråga som kontrollerar om en viss variabel är satt. Om den är det så trillar man in i `if`-satsen, och är indexet 'submit' satt så är troligen 'fullname'/etc. det också. Det är inte rigoröst gjort; man bör ha klart ordentligare kontroller än så här (speciellt om du ska lägga in saker i databas senare), men jag hoppas det svarar på just vad som PHP klagade på i detta fall.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Inaktiv

Gör som phz skriver och lägg till '' i dina index.
Du har skrivit $fullname = $_POST[fullname]; och det ska vara $fullname = $_POST'[fullname'];

Permalänk
Medlem
Skrivet av phz:

För att `$_POST[]` ska vara satt så måste du ha kommit till sidan via en sida med ett formulär där fälten är namngivna som de index du försöker anropa dem med i denna PHP-fil. Hur ser koden ut där? Sätts `$_POST['submit']`? Du får posta din formulärkod här för att man ska kunna se vad som felar. Om det inte bara är saknade fnuttar som jag nämnde.

Om du alltså anropar denna PHP-fil direkt så är det inte konstigt att `$_POST`-variabeln är tom.

EDIT: Ah, jag tolkar om din fråga lite. Kodexempel:

<?php if (isset($_POST['submit'])) { // Data från registreringsformuläret: $fullname = $_POST['fullname']; $username = $_POST['username']; $password = $_POST['password']; $repeatpassword = $_POST['repeatpassword']; echo "$username/$password/$repeatpassword/$fullname"; } ?>

Det kanske är detta du menar (men det är svårt att veta utan att se ett större sammanhang): nu så kontrolleras bara `$_POST`-variabeln om `$_POST['submit']` är satt och anmärkningarna bör tystna.

Att du märker det på den ena datorn men inte den andra är kanske för att den ena är konfigurerad till att bara nämna PHP-fel, medan den andra även berättar om PHP-anmärkningar.

EDIT IGEN: PHP anmärker på att du kallar på variabeln t ex `$_POST['submit']` trots att den inte är satt. Då säger den "hallå där, var det där meningen?" (om den är konfigurerad att säga till om anmärkningar, som sagt). I mitt kodexempel så används `isset()` som är en fråga som kontrollerar om en viss variabel är satt. Om den är det så trillar man in i `if`-satsen, och är indexet 'submit' satt så är troligen 'fullname'/etc. det också. Det är inte rigoröst gjort; man bör ha klart ordentligare kontroller än så här (speciellt om du ska lägga in saker i databas senare), men jag hoppas det svarar på just vad som PHP klagade på i detta fall.

Nu funkar det tack!

Permalänk
Medlem

Har nu lite problem.

Jag har gjort ett par "checkar" för att kolla att all data som krävs är av en viss länge. Lösenordet måste t.ex. vara mellan 6-25 bokstäver och användarnamnet och namnet får inte vara större än 25 bokstäver.

Dock knasar sig det. För tillfället har jag helt kopplat bort databasen. När det funkar ska det skrivas ut "Det funkar", vilket det inte gör.

Som det ser ut nu skrivs "Lösenordet måste vara mellan 25-6 bokstäver långt" även om jag skriver ett lösenord med 7 st bokstäver.

Vad är fel?

KOD:

<?php echo "<h1>Registrering</h1>"; //data från registreringsformen $fullname = strip_tags($_POST['fullname']); $username = strip_tags($_POST['username']); $password = strip_tags($_POST['password']); $repeatpassword = strip_tags($_POST['repeatpassword']); $date = date("Y-m-d"); if( isset( $_POST['submit'] ) ) { //kollar om datan finns if ($fullname&&$username&&$password&&$repeatpassword) { $password = md5($password); $repeatpassword = md5($repeatpassword); if ($password==$repeatpassword) { //kollar längde på username och fullname if (strlen($username)>25||($fullname)>25) { echo "Max antal bokstäver för användarnamnet och ditt namn är 25."; } else { //kollar lösenordets längd if (strlen($password)>25||strlen($password)<6) { echo "Lösenordet måste vara mellan 25-6 bokstäver långt"; } else { //registrering echo "Det funkar!"; } } } else echo "Dina lösenord matchar inte varandra"; } else echo "Var vänlig och fylll i <b>alla</b> fällt!"; } ?>

Permalänk
Medlem

problemet är $password = md5($password);
du får lagra hashen i en annan variabel om du vill kolla längden på $password.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

problemet är $password = md5($password);
du får lagra hashen i en annan variabel om du vill kolla längden på $password.

Tack! Funkar nu när jag flyttade på delen som krypterar lösenordet.

Dock har jag stött på ett nytt problem.

Tidigare har jag problem med att jag fick "Undefined index", vilket jag får nu. Jag antar att det beror på att lag har lagt till strip_tags.

Här är min kod:

//data från registreringsformen $fullname = strip_tags($_POST['fullname']); $username = strip_tags($_POST['username']); $password = strip_tags($_POST['password']); $repeatpassword = strip_tags($_POST['repeatpassword']); $date = date("Y-m-d"); if( isset( $_POST['submit'] ) )

Varför får jag: :

Undefined index: fullname in C:\wamp\www\login\login1\register.php on line 6

Vad gick fel den här gången?

Permalänk
Medlem

$_POST['fullname'] finns inte. Du har kanske ändrat namnet på input fältet?

Permalänk
Medlem
Skrivet av No0Vad:

$_POST['fullname'] finns inte. Du har kanske ändrat namnet på input fältet?

Alltså, det fungerar att registrera sig. Får felmeddelanden ändå. Här är min kod: http://pastie.org/1829523

Jag har väl ändå definierat mina index i den koden?

Permalänk
Medlem

När du först laddar sidan så finns inga värden i $_POST. Enklaste lösningen är att sätta ett @ framför $_POST för att dölja felmeddelandet.

T.ex.

$fullname = strip_tags(@$_POST['fullname']); ...osv för resten

Alternativ lägga till följande längst upp i din php kod

error_reporting (E_ALL ^ E_NOTICE);

Permalänk
Medlem
Skrivet av No0Vad:

När du först laddar sidan så finns inga värden i $_POST. Enklaste lösningen är att sätta ett @ framför $_POST för att dölja felmeddelandet.

T.ex.

$fullname = strip_tags(@$_POST['fullname']); ...osv för resten

Alternativ lägga till följande längst upp i din php kod

error_reporting (E_ALL ^ E_NOTICE);

Tack så hemskt mycket!

Nästa steg är en email-verifiering där jag får mejlet där jag kan välja om användaren ska få registreras eller inte. Återkommer ifall jag stöter på problem!

Permalänk
Medlem

Kom att tänka på en sak, hur gör jag om jag vill ha en sida, t.ex. hej.php som enbart visas för inloggade medlemmar? Just nu startar jag en session som innehåller användarens namn, kan man utnyttja det? T.ex. kolla i hej.php om användarnamn-sessionen är aktiv? Förstår ni?

Permalänk
Medlem
Skrivet av erre2:

Kom att tänka på en sak, hur gör jag om jag vill ha en sida, t.ex. hej.php som enbart visas för inloggade medlemmar? Just nu startar jag en session som innehåller användarens namn, kan man utnyttja det? T.ex. kolla i hej.php om användarnamn-sessionen är aktiv? Förstår ni?

Du kör något liknande

<?php if(isset($_SESSION['username'])){ echo 'Du är inloggad'; } ?>

Permalänk
Medlem

Väldigt enkelt

Vid lyckad inloggning använder du:

$_SESSION['minSession'] = 1;

Sen på hej.php kan du använda:

if(isset($_SESSION['minSession'])) { echo 'Inloggad!'; } else { echo 'Inte inloggad'; }

Permalänk
Medlem
Skrivet av Normano:

Du kör något liknande

<?php if(isset($_SESSION['username'])){ echo 'Du är inloggad'; } ?>

Skrivet av No0Vad:

Väldigt enkelt

Vid lyckad inloggning använder du:

$_SESSION['minSession'] = 1;

Sen på hej.php kan du använda:

if(isset($_SESSION['minSession'])) { echo 'Inloggad!'; } else { echo 'Inte inloggad'; }

Tack båda två! Grymt smidigt och lätt.

Men om jag vill att användaren ska få ta del av lite html kod då? Fungerar då följande:

if(isset($_SESSION['minSession'])) { <html> massa html kod </html> } else { echo 'Inte inloggad'; }

[/QUOTE]

??

Permalänk
Medlem

Du kan öppna och stänga dina PHP taggar för det.

<?PHP if(isset($_SESSION['minSession'])) { ?> <html> massa html kod </html> <?PHP } else { echo 'Inte inloggad'; } ?>

Permalänk
Medlem
Skrivet av No0Vad:

Du kan öppna och stänga dina PHP taggar för det.

<?PHP if(isset($_SESSION['minSession'])) { ?> <html> massa html kod </html> <?PHP } else { echo 'Inte inloggad'; } ?>

Återigen, tack! :). Ska testas nu!

Permalänk
Medlem

Har nu login.php och med.php. Med.php ska endast få visas för medlemmar som är inloggade. Jag gjort som du sa, men det fungerar tyvärr inte

KOD: http://pastie.org/1829646

Permalänk
Medlem
Skrivet av erre2:

Har nu login.php och med.php. Med.php ska endast få visas för medlemmar som är inloggade. Jag gjort som du sa, men det fungerar tyvärr inte

KOD: http://pastie.org/1829646

EDIT: Kan tilläggas för att komma till med.php skriver jag det bara i adressfältet i Firefox

Permalänk
Medlem

Du saknar session_start(); längst upp i med.php

Permalänk
Medlem
Skrivet av No0Vad:

Du saknar session_start(); längst upp i med.php

Tack. Nu får jag "Parse error: syntax error, unexpected T_IF in C:\wamp\www\login\login1\med.php on line 5". Vad betyder det?

Permalänk
Medlem

Ren gissning, det saknas kanske ett ; efter session_start()?

Permalänk
Medlem
Skrivet av No0Vad:

Ren gissning, det saknas kanske ett ; efter session_start()?

Haha, jo det var det. Märks att jag är trött. Jag må vara en färsking, men lite PHP kan jag allt