Avatar billede timealert Nybegynder
04. februar 2003 - 21:07 Der er 27 kommentarer og
1 løsning

Hjælp til php-newbie

Jeg vil gerne lave en meget lille database omhandlende navn, adresse, telefon og e-mailadr.

Jeg havde tænkt at der skulle være en box hvor man skrev fornavnet og krydsede af hvilke informationer man vil have.

Jeg har allerede alle informationerne og det hele. Jeg har dog IKKE adgang til MySQL eller anden form for database :-(

Jeg vil gerne vide hvordan dette gøres nemmeste og helst have en eksempel med nogle få navne da jeg kun lige er startet på php, men ikke skal bruge det senere. (Det er til en klasse-side)

Jeg håber jeg gjorde mig forstålig, eller så bare spørg lås!
/timealert
Avatar billede jakoba Nybegynder
04. februar 2003 - 21:40 #1
skriv dine data for hver person i en streng med fx et | tegn imellem hvert felt:

fornavn  efternavn  adresse  postnr by  telefon  email
Anders|And|Andersvænge 13|1234|Andeby|12345678|aand@teleusa.com|

næste person skrives på en ny linie osv osv til der kommer en lang tekstfil ud af det.

den fil kan du så indlæse med
$adressebog = file("filnavn.txt"); 

// $adressebog er nu et array med een linie (person) i hver celle

for ( $i=0; $i<count($adressebog); $i++ ) {
    $aressebog[$i] = explode( $adressebog[i], "|" );
}

// nu er strengene i hver celle også delt op. du kan fx få efternavnet på
// persom nummer 4 med

$p4s_efternavn = $adressebog[4][1];

mvh JakobA
Avatar billede jakoba Nybegynder
04. februar 2003 - 21:42 #2
Ups, jag skrev forkerte parametre til explode() funktionen. skilletegnet skal stå først:
    $aressebog[$i] = explode( "|", $adressebog[i] );
Avatar billede timealert Nybegynder
04. februar 2003 - 21:50 #3
mange tak... det vil jeg prøve. Har dog ikke tid nu, men du skal nok få dine point når jeg får det til at virke.
Tak for hjælpen
Avatar billede timealert Nybegynder
04. februar 2003 - 23:02 #4
Jeg har prøvet at lave en side hvor man skal taste fornavn ind og så afkrydse hvilke oplysninger man vil have, men det virker ikke som det skal. hvad har jeg glemt?

indtast.htm
<html>
<head>
</head>
<body>
<form action="http://centric.dk/script/test.php"
method="post">
<p>Afkryds hvilke oplysninger du vil have:</p>
<input type="text" name="tekst" value="Indtast fornavn" size="20" />
<input type="checkbox" name="valg2" value="1" />Efternavn
<input type="checkbox" name="valg3" value="2" />Telefon nummer
<input type="checkbox" name="valg4" value="3" />Adresse
<input type="checkbox" name="valg5" value="4" />E-mail <br />

<input type="submit" name="submitknap" value="indsend" />
<input type="reset" name="resetknap" value="reset" />
</form>
</body>
</html>

Jeg har også prøvet at se om mit php-script virker. Men det kommer med en fejlmeldning:
http://www.centric.dk//test.php

filen ser sådan ud: test.php
<?
$adressebog = file("liste.txt"); 
// $adressebog er nu et array med een linie (person) i hver celle
for ( $i=0; $i<count($adressebog); $i++ ) {
    $adressebog[$i] = explode( "|", $adressebog[i] );
}
echo "Mit efternavn er: $adressebog[2][1];"
?>

filen "liste.txt" er kun udfyldt med 2 navne endnu...

Hvad skal jeg så gøre nu??
ps. Du skal nok få flere point, da jeg er lidt nybegynder med stort N :-)
Avatar billede jakoba Nybegynder
04. februar 2003 - 23:15 #5
ikke flere points tak.

alle arrays starte ved 0. hvis du har indsat 2 personer i bogen hedder de $adressebog[0] og $adressebog[1]

du skal søge efter navnet. fx med:

<?
$adressebog = file("liste.txt");
// $adressebog er nu et array med een linie (person) i hver celle
for ( $i=0; $i<count($adressebog); $i++ ) {
    $adressebog[$i] = explode( "|", $adressebog[i] );
}

    // hvis der blev indtastet et fornavn
if ( isset( $fornavn ) || isset( $_POST['fornavn'] ) ) {
    if ( ! isset( $fornavn ) ) $fornavn = $_POST['fornavn'] );

    for ($i=0; $i<count($adressebog); $i++) {
        if ( $adressebog[$i][0] == $fornavn ) break; // stop når navnet findes
    }
    if ( $i < count($adressebog) ) {
        // vi fandt en med det fornavn
        var_dump( $adressbog[$i] );
    } else {
        echo "Beklager. Jeg kunne ikke finde " .$fornavn;
    }
}
?>

mvh JakobA
Avatar billede timealert Nybegynder
04. februar 2003 - 23:24 #6
lukker nu og prøver igen i morgen. Tak for den forløbige hjælp!
Avatar billede timealert Nybegynder
05. februar 2003 - 08:53 #7
Godmorgen!
Så prøver jeg igen.
Jeg har lagt dit svar ind som filen test.php
Jeg tror jeg har fundet en fejl i linien:

if ( ! isset( $fornavn ) ) $fornavn = $_POST['fornavn'] );

Der mangler det et "(" ellers er der et ")" for meget, og jeg kan ikke finde ud af hvor det skal stå. Tror jeg har prøvet alle muligheder?

Den kommer stadig med følgende fejlmeddelse:
Parse error: parse error, unexpected T_ECHO, expecting ',' or ';' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 23

Prøv at følge www.centric.dk/indtast.htm og indtast et tilfældigt fornavn.
Avatar billede jakoba Nybegynder
05. februar 2003 - 09:15 #8
du har ret. den bagerste ) skal væk så der står:
    if ( ! isset( $fornavn ) ) $fornavn = $_POST['fornavn'];
Avatar billede jakoba Nybegynder
05. februar 2003 - 09:17 #9
og det passer også pænt med fejlmeldingen. php forventer et ';' tegn men finder det extra ')' tegn istedet.
Avatar billede timealert Nybegynder
05. februar 2003 - 12:00 #10
Den kommer stadig med fejlmedelsen:

Parse error: parse error, unexpected ';' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 10

Siden indeholder:
<?
$adressebog = file("liste.txt");
// $adressebog er nu et array med een linie (person) i hver celle
for ( $i=0; $i<count($adressebog); $i++ ) {
    $adressebog[$i] = explode( "|", $adressebog[i] );
}

    // hvis der blev indtastet et fornavn
if ( isset( $fornavn ) || isset( $_POST['fornavn'] ) ) {
    if ( ! isset( $fornavn ) )( $fornavn = $_POST['fornavn'];

    for ($i=0; $i<count($adressebog); $i++) {
        if ( $adressebog[$i][0] == $fornavn ) break; // stop når navnet findes
    }
    if ( $i < count($adressebog) ) {
        // vi fandt en med det fornavn
        var_dump( $adressbog[$i] );
    } else {
        echo "Beklager. Jeg kunne ikke finde " .$fornavn;
    }
}
?>
Avatar billede jakoba Nybegynder
05. februar 2003 - 12:36 #11
det er svært at svare på, hvis den linie sidste fejl var i var linie 23, så er linie 10 et sted foran  <?  linien

men hov du har jo tilføjet en ( i den samme linie hvor vi lige fjernede en

linien:
    if ( ! isset( $fornavn ) )( $fornavn = $_POST['fornavn'];
skal være:
    if ( ! isset( $fornavn ) ) $fornavn = $_POST['fornavn'];

mvh JakobA
Avatar billede jakoba Nybegynder
05. februar 2003 - 12:40 #12
strukturen i en if sætning er:

if ( logisk_betingelse ) sætning_der_skal_udføres_hvis_betingelsen_er_sand ;

dvs nøgleordet 'if' efterfulgt at et sæt parenteser omkring en betingelse efterfulgt af noget kode.

mvh JakobA
Avatar billede timealert Nybegynder
05. februar 2003 - 16:07 #13
Ny fejlmedelse :-( Jeg kan ikke selv finde fejlen:

Notice: Use of undefined constant i - assumed 'i' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 5

Notice: Undefined index: i in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 5

Notice: Use of undefined constant i - assumed 'i' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 5

Notice: Undefined index: i in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 5
Beklager. Jeg kunne ikke finde Anders

De øverste linier ser sådan ud:
<?
$adressebog = file("liste.txt");
// $adressebog er nu et array med een linie (person) i hver celle
for ( $i=0; $i<count($adressebog); $i++ ) {
    $adressebog[$i] = explode( "|", $adressebog[i] );
    }

    // hvis der blev indtastet et fornavn
if ( isset( $fornavn ) || isset( $_POST['fornavn'] ) ) {
    if ( ! isset( $fornavn ) ) $fornavn = $_POST['fornavn'];

Hvordan registrerer den, at den skal vise fx navn, adr og email, men ikke tlfnummer?
Avatar billede jakoba Nybegynder
05. februar 2003 - 16:12 #14
der skal stå $ foran i begge steder i linien.
    $adressebog[$i] = explode( "|", $adressebog[$i] );

mvh JakobA
Avatar billede timealert Nybegynder
05. februar 2003 - 16:22 #15
Nu virker det! Næsten.

Den skiller ikke oplysningerne ad.

Prøv fx at indtaste Anders i www.centric.dk/indtast.php
Avatar billede timealert Nybegynder
05. februar 2003 - 16:29 #16
sorry forkert link....
www.centric.dk/indtast.htm
Avatar billede jakoba Nybegynder
05. februar 2003 - 16:29 #17
desværre, jeg får en severfejl (ingen headers):
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

samme fejl i IE4
Avatar billede timealert Nybegynder
05. februar 2003 - 16:33 #18
Her virker det da fint??

Når jeg skriver Anders og trykker på knappen kommer dette:

array(8) { [0]=> string(6) "Anders" [1]=> string(3) "And" [2]=> string(14) "Andersvænge 13" [3]=> string(4) "1234" [4]=> string(6) "Andeby" [5]=> string(8) "12345678" [6]=> string(16) "aand@teleusa.com" [7]=> string(2) " " }
Avatar billede jakoba Nybegynder
05. februar 2003 - 16:44 #19
ok på nut link :-))

Jo den skiller skam oplysningerne ad:
array(8) {
  [0]=>  string(6) "Anders"
  [1]=>  string(3) "And"
  [2]=>  string(14) "Andersvænge 13"
  [3]=>  string(4) "1234"
  [4]=>  string(6) "Andeby"
  [5]=>  string(8) "12345678"
  [6]=>  string(16) "aand@teleusa.com"
  [7]=>  string(2) " "
}

men du vil nok ønske at skrive det på en kønnere måde :)
istedet for:
    if ( $i < count($adressebog) ) {
        // vi fandt en med det fornavn
        var_dump( $adressbog[$i] );
    } else {
        echo "Beklager. Jeg kunne ikke finde " .$fornavn;
    }
kan du skrive det som du har lyst til:
    if ( $i < count($adressebog) ) {
        // vi fandt en med det fornavn
        echo "Fornavn: " .$adressebog[$i][0] ."<br>";
        echo "Efternavn: " .$adressebog[$i][1] ."<br>";
        if ( isset( $valg4 ) || isset( $_POST[valg4] ) {
            echo "adresse1: " .$adressebog[$i][2] ."<br>";
            echo "adresse2: " .$adressebog[$i][3] ."<br>";
            echo "adresse3: " .$adressebog[$i][4] ."<br>";
        }
        echo "telefon:" .$adressebog[$i][5] ."<br>";
        echo "e-mail:" .$adressebog[$i][6] ."<br>";
    } else {
        echo "Beklager. Jeg kunne ikke finde " .$fornavn;
    }


Jeg har gjort adressen afhængig af at der er sat mærke i checkboksen 'check4'. De andre styres på samme måde.

mvh JakobA
Avatar billede timealert Nybegynder
05. februar 2003 - 16:44 #20
Hvad gør jeg når jeg mangler headers?
Og hvad er det?

Det virker fint hos mig. -Har lige prøvet et par gange...
Avatar billede jakoba Nybegynder
05. februar 2003 - 16:47 #21
den der fejl med headers var fordi jeg prøvede den adresse du gav først.
Avatar billede timealert Nybegynder
05. februar 2003 - 17:05 #22
den kan ikke li' "tuborg'en" i linien:
if ( isset( $valg4 ) || isset( $_POST[valg4] ) {
Parse error: parse error, unexpected '{' in ..../test.php on line 20
Avatar billede jakoba Nybegynder
05. februar 2003 - 17:11 #23
det er parenteser igen. der manglede en ) foran den afsluttende {

    if ( isset( $valg4 ) || isset( $_POST['valg4'] ) ) {

mvh JakobA
Avatar billede timealert Nybegynder
05. februar 2003 - 17:21 #24
Så virker det næsten.
Jeg fandt lige ud af at jeg manglede et } til sidst.

Jeg har tatset Anders ind:

Fornavn: Anders
Efternavn: And

Notice: Use of undefined constant valg4 - assumed 'valg4' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 19
Adresse: Andersvænge 13
adresse2: 1234
adresse3: Andeby

Notice: Use of undefined constant valg3 - assumed 'valg3' in D:\websider\resadmin\centric.dk\centric.dk\www\test.php on line 24
telefon:12345678
e-mail:aand@teleusa.com

Hvad betyder de to Notice'er??
linie 19:        if ( isset( $valg4 ) || isset( $_POST[valg4] )) {
linie 24:        if ( isset( $valg3 ) || isset( $_POST[valg3] )) {
Avatar billede jakoba Nybegynder
05. februar 2003 - 17:25 #25
de betyder der bør være ' tegn omkring valg4 og valg3 der hvor de bruges til at indexere $_POST arrayet
        if ( isset( $valg4 ) || isset( $_POST['valg4'] ) ) {
        if ( isset( $valg3 ) || isset( $_POST['valg3'] ) ) {
Avatar billede timealert Nybegynder
05. februar 2003 - 17:32 #26
Ok...
Så kører det sq.
Tusind tak for hjælpen!!!

Jeg havde ikke regnet med at det så svært så hvis du vil have lidt flere point så bare sig til!

Jeg tror det går lidt før jeg begynder på næste php-script, men øvelse gør mester som man siger :-)

Jeg tror jeg vil lave et slags "blåbog"-script.
-Skal bare lige finde ud af hvordan man laver det sådan at man inkludere en side som det kun er muligt at redigere hvis man har et pass... (så alle kan se det, men kun moi kan redigere i det)
Avatar billede jakoba Nybegynder
05. februar 2003 - 17:39 #27
Takker.
Avatar billede timealert Nybegynder
26. februar 2003 - 22:16 #28
Hej JakobA!

Der er sket et eller andet med scriptet? Det vises ikke mere?

Jeg har lagt det ud som spørgsmål her: http://www.eksperten.dk/spm/322245
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester