login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Gastenboek

Offline Goemans - 16/03/2009 21:44 (laatste wijziging 16/03/2009 21:45)
Avatar van GoemansNieuw lid http://portfolio.byethost7.com/db.php
Ik heb gebruik gemaakt van de mysql_error() functie zodat jullie de error - die ik niet echt begrijp - kunnen zien. Zoals je ziet kan hij het gastenboek niet tonen, noch updaten. insert.php & db.php:
http://www.stirkbin.com/53083

Misschien ligt het aan phpMyAdmin: wanneer ik op de homepage zit en op de tab databases klik, staat er 'No databases'. Ik had nochtans al een table aangemaakt via die tab. Wanneer ik hem opnieuw wil aanmaken geeft hij een error: 'Database already exists'. Oké, hij is er dus wel, phpMyAdmin toont hem gewoon niet.

Iemand een idee?

10 antwoorden

Gesponsorde links
Offline Koen - 16/03/2009 21:52
Avatar van Koen PHP expert
Citaat:
Could not connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


mysql/mysqld loopt niet.

Als je die server zelf beheert even die services starten, anders je host contacteren.
Offline MiST - 17/03/2009 09:47
Avatar van MiST Lid kijk ook de documentatie van je host na, bij sommige providers draait de database niet op dezelfde host als apache...
Offline Goemans - 17/03/2009 19:33 (laatste wijziging 17/03/2009 21:55)
Avatar van Goemans Nieuw lid Lol, ik gaf een foute host op Maar ik heb wel iets raars - in mijn phpMyAdmin kan ik enkel een table met deze naam aanmaken: b7?3071586?db terwijl mysql als ik als table 'db' geef probeert te verbinden met b7?3071586.db

Als ik dan bij INSERT 'db' ingeef gaat hij dus connecten met die laatste terwijl die niet bestaat dus - ik kan hem ook niet aanmaken (incorrect database name ofzo).


EDIT: nieuwe table etc. aangemaakt en het werkte EEN KEER, maar daarna gaf hij deze error: Could not connect: Duplicate entry '' for key 1

help :/
Offline Koen - 17/03/2009 21:58
Avatar van Koen PHP expert
Citaat:
Duplicate entry '' for key 1


Zegt toch genoeg?
Je hebt in je tabel een veld staan als primary key, maar die waarde moet uniek zijn. Aangezien er al een lege waarde instaat krijg je dus die foutmelding 
Offline Jas_per_post - 17/03/2009 22:11 (laatste wijziging 18/03/2009 00:50)
Avatar van Jas_per_post JS interesse
  1. $sql="INSERT INTO Persons (auteur, email, bericht)
  2. VALUES
  3. ('$_POST[naam]','$_POST[mail]','$_POST[msg]')";


De laatste regel klopt op een heleboel manieren niet.

- $_POST[naam] -> $_POST['naam']

Php is best een rare taal. Ziet het naam staan, dan gaat het kijken of er een constante naam is. Alleen als dat er niet blijkt te zijn, dan neemt het de string "naam". Dit gaat dus in principe goed, maar het kan heel makkelijk kapot gaan als ze in php een constante naam inbouwen of jij een constante naam gaat gebruiken.

- $_POST['naam'] -> {$_POST['naam']}

Vuistregel: als je een array wilt hebben in een string zet er dan accolades omheen (of gebruik "voor" . $array['elem'] . "achter"), dit werkt altijd. Zonder werkt het alleen in sommige gevallen (1-dimensionale arrays met een numerieke index).

- Je script werkt in principe nu wel, maar bedenk eens wat er gebeurd als in de POST variabele de string "naam', 'iets anders" zit... je krijgt de query
"INSERT INTO Persons (auteur, email, bericht)
VALUES ('naam', 'iets anders','mail','msg')"
Hier zal het alleen een error opleveren, maar je zult vast doorhebben dat op de zelfde manier een hoop kan gedaan worden wat niet hoort te kunnen. Controleer of escape (bijv met mysql_real_escape_string) dus altijd de waardes voordat je ze in een query gooit.
edit: wat ik hier zeg is niet helemaal waar. Je variabelen worden als magic_quotes_gpc bij je php settings aan staat al geescaped, maar het is niet goed om hier op te vertrouwen. Je moet dus eigenlijk gewoon eerst kijken of het aan staat, als dat zo is stripslashes er op aanroepen om het in de originele staat terugbrengt, en vervolgens mysql_real_escape_string gebruiken om het (met jouw database instellingen in het achterhoofd) te escapen
Offline Goemans - 18/03/2009 14:13 (laatste wijziging 18/03/2009 14:13)
Avatar van Goemans Nieuw lid Moeten die accolades rond de $_POST['naam'] in insert.php of in db.php? Bedankt voor de tips, maar ik krijg nog steeds de Duplicate key entry error.
Offline ArieMedia - 18/03/2009 14:17
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Heb je het "id" veld wel op autonummering staan?
Offline Jas_per_post - 18/03/2009 22:07
Avatar van Jas_per_post JS interesse Het moet overal waar je het in een string zet, wat jij doet wanneer je je queries opstelt.

Een andere handige truc is om eens "echo $sql" in je script te zetten, zodat je een query hebt waarbij je kunt kijken wat er mis mee is (zelf plak ik die query dan weer graag in phpMyAdmin)
Offline Goemans - 21/03/2009 09:38
Avatar van Goemans Nieuw lid Hoe zet ik 'id' op autonummering?
Offline Koen - 21/03/2009 10:04
Avatar van Koen PHP expert In phpMyAdmin kan je het veld ID aanpassen, bij 'extra' selecteer je dan auto increment.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.218s