Avatar billede smolle Nybegynder
19. september 2004 - 09:44 Der er 11 kommentarer og
1 løsning

Problem med forbindelse til database

Jeg har i et stykke tid haft en side liggende på whitehat.dk, men har nu flyttet til et domæne købt hos b-one. På siden har jeg en gæstebog og et nyhedsscript hvor jeg kan tilføje nyheder til siden. Begge dele fungerede upåklageligt hos Whitehat og jeg har bare kopieret siderne over til b-ones server, men her virker det ikke! Jeg har selvfølgelig ændret brugernavn og adgangskode, så det passer med de info jeg har fået fra b-one og det virker også delvist. Der kan nemlig godt læses fra databaserne, forstået på den måde, at indholdet af databasen bliver vist på siden uden problemer, men man kan ikke skrive til databasen via siden, hvilket jo er en ret vigtig del i en gæstebog! Der sker simpelthen ingenting, når man tilføjer en besked i gæstebogen. Jeg har prøvet at tilføje en "or die(mysql_error())" i slutningen, men den kommer heller ikke med nogen fejl! Jeg har også skrevet til b-one for at høre om de havde lukket for at skrive til databasen, men de kom bare med en forklaring om at jeg jo kunne tilføje via phpmyadmin, men det er jo ligesom ikke særlig smart i en gæstebog!
Som sagt virkede begge dele upåklageligt på whitehats server og jeg føler snart jeg har prøvet det meste uden held. Håber virkelig i kan hjælpe!
Avatar billede erikjacobsen Ekspert
19. september 2004 - 09:49 #1
Din kode for at tilføje?

Hvis du fx har

  if($submit) { ... }

skal du måske

  if(isset($_POST['submit'])) { ... }
Avatar billede smolle Nybegynder
19. september 2004 - 10:09 #2
Det er ikke så avancerede scripts. Min kode til nyhedstilføjelses-delen ser således ud:
<?
if($kodeord == "mit kodeord"){
echo "Nyhed tilføjet";
$db = mysql_connect("localhost", "mit brugernavn", "min adgangskode");
mysql_select_db("database-navn", $db);
$nyhed_dato = time();

mysql_query("INSERT INTO nyheder (dato, overskrift, tekst) VALUES ('$nyhed_dato','$nyhed_overskrift','$nyhed_tekst')");

}else{
?>
<FORM METHOD=POST ACTION=<? echo $PHP_SELF; ?>>
Password:<br>
<INPUT TYPE=PASSWORD NAME=kodeord><br>
Overskrift:<br>
<INPUT TYPE=TEXT NAME=nyhed_overskrift><br>
Tekst:<br>
<TEXTAREA NAME=nyhed_tekst>Indtast nyhed</textarea><br>
<INPUT TYPE=SUBMIT VALUE=Tilføj>
</form>
<?
}
?>

Og gæstebogen ser således ud:
<?
        $db = mysql_connect("localhost","mit brugernavn","mit kodeord");
        mysql_select_db("database-navn", $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 gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
        }
        ?>
       
        <table>
        <?
        $foresp = mysql_query("SELECT navn, email, dato, besked FROM gbog ORDER BY nr DESC");
        while($data = mysql_fetch_row($foresp)){
        echo "<tr><td valign=top width=30% style='border-right: 1 solid BLACK'>";
        echo "Skrevet af: <a href=\"mailto:$data[1]\">$data[0]</a>";
        echo "<br>$data[2]";
        echo "</td><td valign=top width=70% style='border-left: 1 solid BLACK'>$data[3]</td></tr>";
        }
        ?>
Avatar billede erikjacobsen Ekspert
19. september 2004 - 10:14 #3
Jo, det er lige så avanceret som det skal være. Prøv:

if(isset($_POST['kodeord']) && $_POST['kodeord'] == "mit kodeord"){
Avatar billede fsconsult.dk Nybegynder
19. september 2004 - 10:16 #4
det er som erikjacobsen antyder, ikke et MySQL men et PHP problem du er løbet ind i, eller rettere en nyere PHP version med nye standards.

form og request variabler bliver ikke længere lavet om til globale variable, men skal hentes via f.eks. $_POST array'et.

dvs. din

mysql_query("INSERT INTO nyheder (dato, overskrift, tekst) VALUES ('$nyhed_dato','$nyhed_overskrift','$nyhed_tekst')");

bliver til

$nyhed_dato = $_POST["nyhed_dato"];
$nyhed_overskrift = $_POST["nyhed_overskrift"];
$nyhed_tekst = $_POST["nyhed_tekst"];
mysql_query("INSERT INTO nyheder (dato, overskrift, tekst) VALUES ('$nyhed_dato','$nyhed_overskrift','$nyhed_tekst')");
Avatar billede smolle Nybegynder
19. september 2004 - 10:23 #5
Forstår jeg det ret hvis jeg så skal skrive f.eks.:

<?
$foresp = $nyhed_dato = $_POST["nyhed_dato"];
$nyhed_overskrift = $_POST["nyhed_overskrift"];
$nyhed_tekst = $_POST["nyhed_tekst"];
mysql_query("INSERT INTO nyheder (dato, overskrift, tekst) VALUES ('$nyhed_dato','$nyhed_overskrift','$nyhed_tekst')");
osv. osv. eller hvad?
Avatar billede fsconsult.dk Nybegynder
19. september 2004 - 11:28 #6
alle parameter du får fra en form, skal du hente vha _$POST, da de af sikkerhedsgrunde ikke bliver lavet til globale variable mere.
Avatar billede smolle Nybegynder
19. september 2004 - 12:03 #7
Jeg vil bare gerne vide hvordan det helt præcist skrives op. Er ikke sikker på jeg har forstået det helt korrekt. Jeg er godt med på det med, at parameter fra en form skal hentes via $_POST, men hvor i koden skal man hente det ud? Er det i mysql-forespørgslen eller først senere?
Avatar billede smolle Nybegynder
19. september 2004 - 12:38 #8
Jeg har nu indsat dette i gæstebogen:

if($skriv){
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST["navn"];
        $email = $_POST["email"];
        $besked = $_POST["besked"];
        mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
        }

Skulle det ikke være korrekt? Der sker dog nøjagtigt det samme som sidst, nemlig intet.
Avatar billede erikjacobsen Ekspert
19. september 2004 - 12:57 #9
Du skal gøre li'som jeg skrev: 19/09-2004 10:14:57
Avatar billede smolle Nybegynder
19. september 2004 - 14:16 #10
Ja, men i gæstebogen skal der jo ikke være kode på. Den skal jo være åben for alle.
Avatar billede erikjacobsen Ekspert
19. september 2004 - 17:59 #11
Ja, ja, men "li'som" i betydningen: brug isset og $_POST
Avatar billede smolle Nybegynder
25. september 2004 - 09:57 #12
Nu fik jeg det endelig til at virke! Jeg takker mange gange. Da det kun er fsconsult.dk, der har oprettet et svar får han pointene.
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