Släng in
var_dump($result); efter att $result deklarerats
släng in
var_dump($row); ovanför din echosats
Ta också bort dina @-tecken tills vidare.
Vad får du ut?
19 svar · 827 visningar · startad av Hampan90
Hej!
Har precis börjat att lära mig mera om databaser och hur man driver en egen databasdriven webplats genom denna bok:
http://www.bokus.com/b/9780975240212.html?pt=search_result
Och jag har nu skapat min databas, och det funkade klockrent när jag kollade i mysql fösntret.
Men nu försöker jag få fram Namn fältet i tabellen resturanger i databasen takeaway som ligger på samma dator.
Här är min kod:
<?php
// Ansluter till databasservern
$dbcheck = @mysql_connect('localhost' 'root' 'XXXXXX');
// Kollar om det gick att asluta till databasservern
if (!$dbcheck) {
exit('<p>Kan inte ansluta till databasservern, var god försök senare!</p>');
}
// Anluter till databasen
@mysql_select_db('takeaway' , $dbcheck);
//Kollar om det gick att asluta till databasen
if (!@mysql_select_db('takeaway')) {
exit('<p>Kan inte ansluta till databasen, var god försök senare!</p>');
}
//Söker i namn kolumnen
$result = @mysql_query('SELECT namn FROM resturanger');
// Kollar om det gick att skicka förfrågan till databasen
if (!$result) {
exit('<p>Kan inte skicka förfrågan, var god försök senare!</p>');
}
// Visar upp resultatet i en loop
while ($row = mysql_fetch_array($result)) {
echo '<p>' . $row['namn'] . '</p>';
}
?>
Problemet är att den varken skriver ut "Namn" fältet eller Några felmedelanden, vilket är mycket konstigt, för jag har ju sagt att den ska skriva det så fort något går snett.
Så varför ser jag absolut INGENTING när jag provar denna kod?
(PHP funkar, det har jag kollat med en enkel echo")
XXXXXX = minn lösen till servern, vill inte lämna ut det.
Släng in
var_dump($result); efter att $result deklarerats
släng in
var_dump($row); ovanför din echosats
Ta också bort dina @-tecken tills vidare.
Vad får du ut?
Ingenting.
Vad gör var_dump?
Fasen va trist det är när man precis har börjat och inte får fram något när man gör efter boken.
EDIT:
Detta funkar:
echo "Hej!";
Men inte detta:
mysql_connect("localhost", "root", "password") or die(mysql_error());
(I detta fall så har jag ej angett något password för att framtvinga ett felmedelande)
Om du ändrar första raden till
$dbcheck = @mysql_connect("localhost","root","lösenordet");
Vad händer då?
tanten, har svårt att se varför din kodrad skulle göra skillnad? Det enda du har ändrat på är att byta ut enkel-fnuttarna mot dubbelfnuttar. I PHP är det fördelaktigt att använda enkelfnuttar förutom när man vill ha interpolering:
$a = 'apple';
$b = 'banana'
print '$a and $b'; // skriver ut "$a and $b"
print "$a and $b"; // skriver ut "apple and banana"
// för samma resultat med enkelfnuttar krävs;
print $a . ' and ' . $b;
Hampan, vad använder du för konfiguration, wamp?
Du skulle även kunna testa att skapa en php-fil och köra följande:
<?php
$con = mysql_connect('localhost','wrong_user','wrong_pwd');
if (!$con)
{
die(mysql_error());
}
mysql_close($con);
?>
Om du inte får något felmeddelande av detta så bör du kolla din php.ini-fil och se om denna rad finns med "error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT" och att den inte är kommenterad (en enkelfnutt innan).
Jag håller med dig Compusa, det var bara det att jag tog hem scriptet och testade och då fick jag felmeddelandet
syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
och eftersom det inte fanns någon ; före så gissade jag att det hade med fnuttarna att göra... och när jag ändrade så som jag föreslog så fungerade det.
Jag har wamp och är ny... och tyckte scriptet såg så märkligt ut och ville testa varför han inte fick ut något... tänker inte använda det själv... :-)
Okej, ville bara klargöra det med fnuttarna då det är väldigt vanligt "fel" att använda enbart använda dubbelfnuttar i PHP. :)
Och om det ser ut så här då? ('localhost','root','XXXXXX'); ?
Verkar som hela localhost buggar för mig. Tänkte installera om Apache och PHP sen, jag gorde allt enligt boken, men uppenbarligen så vart det inte så bra.
Har ni någon anan bra guide som går igenom tydligt vad man skall göra när man installerar?
Jag tycker att webdesignskolans är bra, är den bra?
Alt1: mysql_connect('localhost', 'root', 'XXXXXX');
Alt2: mysql_connect("localhost", "root", "XXXXXX");
Alternativ ett är att föredra. När man använder dubbel-fnuttar säger man till PHP att "parsa" strängen.
Det bästa är ju att ha databas-inställningarna i en config-fil som ligger utanför roten.
<?php
define('DB_URL', 'localhost');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
?>
<?php
require_once('../config.php');
$con = mysql_connect(DB_URL, DB_USER, DB_PASSWORD);
?>
Vet ej om det var detta du tänkte på?
Hampan90 skrev:
Har ni någon anan bra guide som går igenom tydligt vad man skall göra när man installerar?
Hampan med wamp behövs inga guider, allt du behöver installeras med WAMP. Avinstallera först php, apache och mysql. Därefter laddar du ner wamp här:http://www.wampserver.com/en/download.php
Bara att dubbelklicka på filen och installera. Vid installation kan du välja om du vill att wamp ska köras som service och starta automatiskt när startar windows eller att du manuellt köra igång wamp via startmenyn. När du startar wamp så ser du en ikon i "trayen" brevid klockan. Därifrån kan du bland annat starta/stoppa apache och mysql-servern. Sidan når du på vanligt vis via localhost.
Jo, jag har kört många gånger med WAMP, men jag går en IT utbildning och vill lära mig det "riktiga" sättet. För webbhotell kör väl inte med wamp va?
Så, är webdesignskolan bra eller inte?
Har ingen aning om hurvida webdesignskolan är bra eller inte men om du nu ska göra det på det "riktiga" sättet, vilket iofs inte är så svårt då jag skulle jag förlitat mig på den officiella dokumentationen för apache, php och mysql.
Hampan90 skrev:
För webbhotell kör väl inte med wamp va?
För webbhotell är LAMP ganska vanligt.
Fast det är ju sällan man laddar hem en installationsfil som man bara klickar på när man ska köra LAMP
colione skrev:
Fast det är ju sällan man laddar hem en installationsfil som man bara klickar på när man ska köra LAMP
Givetvis, men i vissa distrubitioner är det nästa lika enkelt att installera LAMP som WAMP, några få kommandon i terminalen. Men som sagt vill du (Hampan90) göra det på det "riktiga" sättet så laddar du hem Apache, PHP och MySQL var för sig och installerar/konfigurerar med hjälp av medföljande dokumentation för respektive teknik.
Ok, nu har jag installerat wamp, och försöker komma in för att administrera databaserna via cmd.
Jag sätter ett root password:
C:\wamp\mysql\bin>mysql -u root mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.41-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> UPDATE mysql.user SET Password=PASSWORD("XXXXXX") WHERE User="root";
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
XXXXXX= mitt lösen
Men när jag försöker logga in med mitt nya lösen så får jag detta istället för att jag ska logga in:
C:\wamp\mysql\bin>mysql - loclahost -u root -p
mysql Ver 14.12 Distrib 5.0.41, for Win32 (ia32)
Copyright (C) 2002 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
-?, --help Display this help and exit.
-I, --help Synonym for -?
--auto-rehash Enable automatic rehashing. One doesn't need to use
'rehash' to get table and field completion, but startup
and reconnecting may take a longer time. Disable with
--disable-auto-rehash.
-A, --no-auto-rehash
No automatic rehashing. One has to use 'rehash' to get
table and field completion. This gives a quicker start of
mysql and disables rehashing on reconnect. WARNING:
options deprecated; use --disable-auto-rehash instead.
-B, --batch Don't use history file. Disable interactive behavior.
(Enables --silent)
--character-sets-dir=name
Directory where character sets are.
--default-character-set=name
Set the default character set.
-C, --compress Use compression in server/client protocol.
-#, --debug[=#] This is a non-debug version. Catch this and exit
-D, --database=name Database to use.
--delimiter=name Delimiter to be used.
-e, --execute=name Execute command and quit. (Disables --force and history
file)
-E, --vertical Print the output of a query (rows) vertically.
-f, --force Continue even if we get an sql error.
-G, --named-commands
Enable named commands. Named commands mean this program's
internal commands; see mysql> help . When enabled, the
named commands can be used from any line of the query,
otherwise only from the first line, before an enter.
Disable with --disable-named-commands. This option is
disabled by default.
-g, --no-named-commands
Named commands are disabled. Use \* form only, or use
named commands only in the beginning of a line ending
with a semicolon (;) Since version 10.9 the client now
starts with this option ENABLED by default! Disable with
'-G'. Long format commands still work from the first
line. WARNING: option deprecated; use
--disable-named-commands instead.
-i, --ignore-spaces Ignore space after function names.
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
-b, --no-beep Turn off beep on error.
-h, --host=name Connect to host.
-H, --html Produce HTML output.
-X, --xml Produce XML output
--line-numbers Write line numbers for errors.
-L, --skip-line-numbers
Don't write line number for errors. WARNING: -L is
deprecated, use long version of this option instead.
-n, --unbuffered Flush buffer after each query.
--column-names Write column names in results.
-N, --skip-column-names
Don't write column names in results. WARNING: -N is
deprecated, use long version of this options instead.
-O, --set-variable=name
Change the value of a variable. Please note that this
option is deprecated; you can set variables directly with
--variable-name=value.
--sigint-ignore Ignore SIGINT (CTRL-C)
-o, --one-database Only update the default database. This is useful for
skipping updates to other database in the update log.
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
-W, --pipe Use named pipes to connect to server.
-P, --port=# Port number to use for connection.
--prompt=name Set the mysql prompt to this value.
--protocol=name The protocol of connection (tcp,socket,pipe,memory).
-q, --quick Don't cache result, print it row by row. This may slow
down the server if the output is suspended. Doesn't use
history file.
-r, --raw Write fields without conversion. Used with --batch.
--reconnect Reconnect if the connection is lost. Disable with
--disable-reconnect. This option is enabled by default.
-s, --silent Be more silent. Print results with a tab as separator,
each row on new line.
--shared-memory-base-name=name
Base name of shared memory.
-S, --socket=name Socket file to use for connection.
--ssl Enable SSL for connection (automatically enabled with
other flags). Disable with --skip-ssl.
--ssl-ca=name CA file in PEM format (check OpenSSL docs, implies
--ssl).
--ssl-capath=name CA directory (check OpenSSL docs, implies --ssl).
--ssl-cert=name X509 cert in PEM format (implies --ssl).
--ssl-cipher=name SSL cipher to use (implies --ssl).
--ssl-key=name X509 key in PEM format (implies --ssl).
--ssl-verify-server-cert
Verify server's "Common Name" in its cert against
hostname used when connecting. This option is disabled by
default.
-t, --table Output in table format.
-T, --debug-info Print some debug info at exit.
--tee=name Append everything into outfile. See interactive help (\h)
also. Does not work in batch mode. Disable with
--disable-tee. This option is disabled by default.
--no-tee Disable outfile. See interactive help (\h) also. WARNING:
option deprecated; use --disable-tee instead
-u, --user=name User for login if not current user.
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
-U, --i-am-a-dummy Synonym for option --safe-updates, -U.
-v, --verbose Write more. (-v -v -v gives the table output format).
-V, --version Output version information and exit.
-w, --wait Wait and retry if connection is down.
--connect_timeout=# Number of seconds before connection timeout.
--max_allowed_packet=#
Max packet length to send to, or receive from server
--net_buffer_length=#
Buffer for TCP/IP and socket communication
--select_limit=# Automatic limit for SELECT when using --safe-updates
--max_join_size=# Automatic limit for rows in a join when using
--safe-updates
--secure-auth Refuse client connecting to server if it uses old
(pre-4.1.1) protocol
--show-warnings Show warnings after every statement.
Default options are read from the following files in the given order:
C:\my.ini C:\my.cnf C:\WINDOWS\my.ini C:\WINDOWS\my.cnf C:\wamp\mysql\my.ini C:\
wamp\mysql\my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- -----------------------------
auto-rehash TRUE
character-sets-dir (No default value)
(..... massor av text)
show-warnings FALSE
C:\wamp\mysql\bin>
Varför blir det såhär? har haft problemet förut, var lite därför som jag inte ville köra wamp.
Testa följande när du är i \wamp\mysql\bin:
C:\wamp\mysql\bin>[B]mysql.exe -h loclahost -u användarnamn -p lösenord[/B]
Byt ut användarnamn och lösenerod mot dina uppgifter.
loclahost ska väl vara localhost
Har ditt ursprungliga problem blivit löst? Om inte kan det ju vara bra att ta bort @ på alla ställen du använder det, eftersom det gör att felmeddelanden inte visas.
metalboy skrev:
loclahost ska väl vara localhost
Sant, sedan innehåller mitt kommando fler fel såg jag...
Se först till att du står i "C:\wamp\mysql\bin>" (eller liknande) i kommandprompten.
Skriv sedan följande:
mysql -u root -p
eller
mysql -h localhost -u root -p
När du tryckt på enter så kommer du behöva ange ditt lösenord. Att du inte kommit någon vart beror på att du angett växlarna fel. Först anger du växel följt av värde dvs "-växel värde" exempelvis "-u användarnamn".
Tack för alla tipps, jag löste det genom att jag klickade på wamp ikonen och valde mysql>mysql console Då funkade det.
Nu löste sig även mina felmedelanden och så. Tack för all hjälp! Ett riktigt bra forum detta!