Avatar billede addicted Nybegynder
08. november 2005 - 01:51 Der er 23 kommentarer og
1 løsning

kan ikke oprette i tabel

Jeg er ved at lave en gæstebog i Php og jeg kan ikke sende til tabel. Jeg kan ikke finde ud af hvori fejlen ligger ? Min connetionstring skulle være iorden, for når jeg opretter et indslag i selve databasen, kan det godt ses på min webside. Den del af koden som jeg håber/tror fejlen ligger i er således

<?
$db=mysql_connect("localhost", "bruger", "kodeord");
mysql_select_db("gaestebog", $db);
if ($skriv){
    $besked = str_replace("\n", "<BR>",$besked);
    $dato_array = getdate();
    $dato = $dato_array["mday"]."/". $dato_array["mon"]."-".$dato_array["year"];
    mysql_query("INSERT INTO bog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
}
?>
            <center>
              <form method=POST action=<?echo $PHP_SELF;?>>
                <table width="300">
                  <tr>
                    <td width="120">Navn :
                      <input type=hidden name=skriv value=1>
                    </td>
                    <td width="180">
                      <div align="center">
                        <input type=text name=navn>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">Email : </td>
                    <td width="180">
                      <div align="center">
                        <input type=text name=email>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">Tekst:</td>
                    <td width="180" rowspan="2">
                      <div align="center">
                        <textarea name=besked cols=30 rows=5></textarea>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">
                      <div align="center"></div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">&nbsp;</td>
                    <td width="180">
                      <div align="center">
                        <input type=submit value="Send Besked" name="submit">
                      </div>
                    </td>
                  </tr>
                </table>
              </form>

Håber jeg har beskrevet mit problem godt nok, og der er nogen der kan hjæle mig :-)

På forhånd tak
Avatar billede hmortensen Nybegynder
08. november 2005 - 09:52 #1
Du kan få evt. fejl meddelelser udskrevet sådan her:
mysql_query("INSERT INTO bog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')") or die(mysql_error());
Avatar billede bromer Nybegynder
08. november 2005 - 09:54 #2
Hmm.. oprettede du ikke det her spørgsmål tidligere igår og lukkede det igen? Er register globals slået til?
Avatar billede addicted Nybegynder
08. november 2005 - 10:00 #3
jo jeg oprettede det også igår, men bad en admin lukke det, da der var fejl i ... og så kan det jo være svært at finde den rigtige fejl :-) ..... jeg prøver lige det du skrev.
Avatar billede addicted Nybegynder
08. november 2005 - 10:05 #4
det har jeg prøvet nu. Men der kommer ikke nogen fejlmeddelelse ? Man kan skrive gæstebogsindslaget og sende det, men det kommer aldrig på siden med gæstebogsindslag.
Avatar billede hmortensen Nybegynder
08. november 2005 - 10:07 #5
Kommer der noget i din tabel, for så kunne det være dit udtræk den var gal med?
Avatar billede addicted Nybegynder
08. november 2005 - 10:15 #6
nej det kommer aldrig til tabellen, hvorimod hvis jeg går ind i tabellen og opretter noget data under de forskellige felter, kommer det fint på min side som et gæstebogsindslag.

kan det være min webhotel udbyder, der ikke har åbnet en port dertil ? ( er noget af en rookie på det herområde, så håber ikke det var et dumt spørgsmål )
Avatar billede hmortensen Nybegynder
08. november 2005 - 10:17 #7
Las os finde ud af om du kommer ind i ifsætningen:
if ($skriv){
  echo "Inde i if";
....
}
Avatar billede bromer Nybegynder
08. november 2005 - 10:21 #8
Hvis du ikke har register globals til så erstat det øverste kode med:

<?
$db=mysql_connect("localhost", "bruger", "kodeord");
mysql_select_db("gaestebog", $db);
if ($_POST['skriv']){
    $besked = nl2br($_POST['besked']);
    $email = $_POST['email'];
    $navn = $_POST['navn'];
    $dato_array = getdate();
    $dato = $dato_array["mday"]."/". $dato_array["mon"]."-".$dato_array["year"];
    mysql_query("INSERT INTO bog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
}
?>
Avatar billede hmortensen Nybegynder
08. november 2005 - 10:23 #9
Og så kan du sætte din connection ind i if sætningen, da der er ingen grund til at forbinde med mindre kriteriet er opfyldt.

Og normalt vil man bruge nl2br() eller str_replace \n til <br> i udtræk, og ikke i indsættelse.
Avatar billede addicted Nybegynder
08. november 2005 - 10:24 #10
hvis jeg fletter de linier ind i koden, kan jeg slet ikke se gæstebogen :-(
Avatar billede hmortensen Nybegynder
08. november 2005 - 10:25 #11
Definer se hele gæstebogen:
Har du udtræk til visning af indlæg på samme side ?
Avatar billede addicted Nybegynder
08. november 2005 - 10:29 #12
der kommer bare en blank side uden noget som helst .....
udtræk til visning af indlæg er på en anden side ....
Avatar billede hmortensen Nybegynder
08. november 2005 - 10:33 #13
Lyder som om der er en fejl, og at fejl ikke er sat til at blive vist, som fx. hos B-one.

Prøv at smide koden som den er nu.
Avatar billede addicted Nybegynder
08. november 2005 - 10:35 #14
hov håber ikke du misforstod .... det var kun ved
if ($skriv){
  echo "Inde i if";
....
}
at der kom en blank side, når jeg flettede det ind. Den anden kode, der var dog ikke nogen ændring i forhold til først.
Avatar billede addicted Nybegynder
08. november 2005 - 10:37 #15
koden er nu, som den du sendte
<?
$db=mysql_connect("localhost", "mit-bruger", "mit-password");
mysql_select_db("gaestebog", $db);
if ($_POST['skriv']){
    $besked = nl2br($_POST['besked']);
    $email = $_POST['email'];
    $navn = $_POST['navn'];
    $dato_array = getdate();
    $dato = $dato_array["mday"]."/". $dato_array["mon"]."-".$dato_array["year"];
    mysql_query("INSERT INTO bog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
}
?>

det er netop B-one jeg bruger .... og de er sgu ikke så skarpe, som sidst jeg brugte dem.
Avatar billede bromer Nybegynder
08. november 2005 - 10:56 #16
Jeg kan ikke umiddelbart se nogen fejl i det du lige har skrevet. Men hvis B-one har slået register globals fra (som jeg mener og håber de har) så kan du ikke længere kode som du tidligere har gjort. Når du laver en form med et element du kalder "skriv", ligger væriden af denne ikke længere i $skriv, men derimod i $_POST['skriv'] og $_REQUEST['skriv'].

$_POST indeholder alle værdier sendt med "post" (som jeg kan se i din form at du også benytter). $_GET indeholder alle get værdier (altså det der ligger på query stringen) og $_REQUEST er $_POST og $_GET sammen.
Avatar billede addicted Nybegynder
08. november 2005 - 11:09 #17
det vil sige at jeg allerførst skal finde ud af om B-one har slået register globals fra eller til ?
Avatar billede bromer Nybegynder
08. november 2005 - 11:20 #18
Hvis jeg var dig ville jeg bare bruge $_POST og $_GET da de også virker selvom scriptet kører med register globals slået til. Der er næsten ingen mennesker der koder med register globals, da det har en tendens til at gøre koden usikker.
Avatar billede addicted Nybegynder
08. november 2005 - 11:41 #19
okay .... men jeg er stadig ikke helt sikker på hvordan koden skal se ud ? hvad skal $_POST og $_GET erstatte i koden ? eller endnu bedre ... hvordan skal koden så se ud ? :-)
Avatar billede bromer Nybegynder
08. november 2005 - 11:50 #20
Det var jo netop det jeg skrev til dig. Jeg har lige checket koden og der er ingen syntax fejl i. Har du undersøgt hvor langt du kommer i koden. Det kan du vel gøre ved at sætte print statements ind i koden som her:

<?
$i = 0;
printf("Vi er ved punkt %d<br/>",$i++);
$db=mysql_connect("localhost", "bruger", "kodeord");
mysql_select_db("gaestebog", $db);
if ($skriv){
printf("Vi er ved punkt %d<br/>",$i++);
    $besked = str_replace("\n", "<BR>",$besked);
    $dato_array = getdate();
    $dato = $dato_array["mday"]."/". $dato_array["mon"]."-".$dato_array["year"];
    mysql_query("INSERT INTO bog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
}
printf("Vi er ved punkt %d<br/>",$i++);
?>
            <center>
              <form method=POST action=<?echo $PHP_SELF;?>>
                <table width="300">
                  <tr>
                    <td width="120">Navn :
                      <input type=hidden name=skriv value=1>
                    </td>
                    <td width="180">
                      <div align="center">
                        <input type=text name=navn>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">Email : </td>
                    <td width="180">
                      <div align="center">
                        <input type=text name=email>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">Tekst:</td>
                    <td width="180" rowspan="2">
                      <div align="center">
                        <textarea name=besked cols=30 rows=5></textarea>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">
                      <div align="center"></div>
                    </td>
                  </tr>
                  <tr>
                    <td width="120">&nbsp;</td>
                    <td width="180">
                      <div align="center">
                        <input type=submit value="Send Besked" name="submit">
                      </div>
                    </td>
                  </tr>
                </table>
              </form>
Avatar billede addicted Nybegynder
08. november 2005 - 12:51 #21
bromer .... jeg har fundet ud af at det var det med register globals, og har derfor også rettet det nu. Kan du kort forklare hvad fordelen/ulempen er ved at ha det on/off ? .... og uanset om du kan eller ej, kan du så ikke lige sende et svar, så du kan få dine velfortjente points ? Du skal ha mange tak for hjælpen :-)
Avatar billede bromer Nybegynder
08. november 2005 - 13:02 #22
Mange tak for points :)

Man bør aldrig kode med register globals slået til, det hører til fortiden. Et praktisk argument er også at man som regl ikke kan finde steder at hoste sine ting, der har slået  det til.

En af grundene til det er ikke er sikkert er at jeg kan smide variabler ind i dit script uden at du er klar over det ved at kalde script.php?var=value. Derefter vil $var jo have væriden value, og hvis du rent faktisk benytter en variabel der hedder det kan det give problemer hvis man ikke har været opmærksom.

Når du koder med register globals fra vil dette ikke ske man mere manuelt skal vide at nu vil man have fat i noget eksternt idet man går gennem $_GET og $_POST.

Du kan læse mere om det på http://dk2.php.net/manual/en/security.globals.php
Avatar billede addicted Nybegynder
08. november 2005 - 13:33 #23
he he .... jeg kan sgu stadig ikke finde ud af hvor det er jeg skal bruge $_POST og $_GET :-( ... fandt ud af det med register globals, ved at jeg ændrede det far off til on ...
Avatar billede hmortensen Nybegynder
08. november 2005 - 14:14 #24
register globals bør være off, ikke on.

Du skal bruge $_GET/$_POST på sendt data (form data, addr. bar).

$_POST skal bruges når det er tale om en form af typen post.
$_GET skal bruges når det er en form af typen get (en form er get hvis andet ikke er defineret), og når værdien kommer fra addr. baren, som fx. ved links (side.php?id=123).

Register globals påvirker også $PHP_SELF, som er en server variabel, og skal hentes med server præfiks: $_SERVER['PHP_SELF']
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
Computerworld tilbyder specialiserede kurser i database-management

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