Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[mysql] Controleren of row bestaat, zoja updaten

Anoniem
Annie
17 antwoorden
  • Ik ben een script aan het maken wat een gebruiker zijn instellingen laat opslaan in een MySQL tabel. Iedere gebruiker heeft zijn eigen tabel, en in die tabel staan zijn instellingen.

    Nu probeer in te stellen, dat als de gebruiker nog nooit eerder instellingen heeft opgeslagen de nieuwe waardes worden geinsert, maar als de gebruiker al eens de instellingen heeft opgeslagen dat de waardes worden geupdate, zodat er maar een row blijft.

    Wat het script moet doen is controleren of er al waardes in een tabel zitten; zoja de waardes updaten (dat updatescript heb ik al geschreven) en zoniet inserten (dat script heb ik ook al geschreven).

    Hoe moet ik die controle uitvoeren in MySQL?

    Alvast bedankt!
  • Op de wijze waarop je het nu hebt opgelost, moet je eerst een select uitvoeren op de database en controleren hoeveel rows je terug krijgt (dat kan met mysql_num_rows).

    MySQL heeft echter ook een mogelijkheid om het in 1 statement te doen (mits je een PK of Unique index hebt): on duplicate key update.
    Een andere mogelijkheid die je kan gebruiken (extensie op de ansi standaard), is: replace into.
  • Is er niet een manier waarbij ik met de eerste MySQL query meteen ook standaardwaardes kan invoegen bij het aanmaken van de table, waardoor ik op de pagina die de waardes moet aanpassen alleen een UPDATE-query kan gebruiken en niet de INSERT INTO. ?

    Alvast bedankt!
  • [quote:e956717afc="carlobernardini"]Iedere gebruiker heeft zijn eigen tabel[/quote:e956717afc] :o Dus 1000 gebruikers betekent 1000 tabellen?
  • In principe is dat wel het idee ja, aangezien het niet echt anders kan (toch?)… Maakt dat de site langzaam ofzo, of heeft het nog andere nadelen?
  • je kan gewoon elke user in eenzelfde tabel plaatsen.
    elke user krijgt dan een eigen 'row'.

    dus eenmalig doe je iets van
    CREATE TABLE users (
    user_id INTEGER AUTO_INCREMENT,
    user_name VARCHAR(32),
    PRIMARY KEY('user_id')
    );

    en voor elke gebruiker die je aanmaakt hoef je alleen maar te doen
    INSERT INTO users (user_name) VALUES ('$gebruikersnaam');

    de user_id is om verschillende gebruikers gemakkelijk te onderscheiden maar niet per se nodig.
  • Ik heb het script weer wat aangepast. Ik ben nu halverwege, en nu zou het script dus waardes moeten toevoegen aan de tabel: ik heb het script inmiddels ongeveer 20 keer herschreven, maar steeds krijg ik weer een witte pagina te zien; niet eens een mysql_error().
    Blijkbaar werkt iets echt niet goed en heb ik dus een logische fout gemaakt die ik niet kan vinden…
    [code:1:5511bcf1b3]
    $dbhost = 'localhost';
    $dbuser = 'xxxxxxxxxx';
    $dbpass = 'xxxxxxxxxx';

    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());

    $dbname = 'settings';
    mysql_select_db($dbname);

    $query = "INSERT INTO settings (usr, weg, sitekleur, artikelkleur, print, pdf, email, ads, rss, font, size) VALUES ('$userdata['username']', 'aan', '#666666', '#EEEEEE', 'aan', 'aan', 'aan', 'aan', 'aan', 'arial', '12')";

    mysql_query($query) or die(mysql_error());

    mysql_close();
    [/code:1:5511bcf1b3]
    Dit is nu de code, maar dit werkt dus niet. Hier volgt een screenshot van mijn phpmyadmin instellingen voor de tabel "settings", dan zal alles wat makkelijker gaan voor jullie:

    [img:5511bcf1b3]http://www.gamexellence.com/phpmyadmin.JPG[/img:5511bcf1b3]

    Wat doe ik fout?? Ik snap het deze keer echt even niet
    :(
  • dit script toont ook niets op het scherm. behalve als er iets mis gaat. Conclusie: je doet t goed.
    Of is dit slechts een gedeelte van je script?
    Zet anders s echo 'DONE' ofzo onderaan je pagina.
  • Nee, er hoort echt een hele lay-out omheen te worden weergegeven… Ik heb alleen de code laten zien, maar er zit een complete site omheen… Conclusie: er gaat iets goed mis! :(

    Ik weet ook heel zeker dat het in die query mis gaat, want als ik die weg doe, dan komt de site helemaal correct op beeld.

    Dit is tot nu toe trouwens het hele script. Daarna moet ik er wat aan toevoegen maar dit is het hoofddoel van het script.
  • probeer s:

    $query = "INSERT INTO settings (usr, weg, sitekleur, artikelkleur, print, pdf, email, ads, rss, font, size) VALUES ('" . $userdata['username'] . "', 'aan', '#666666', '#EEEEEE', 'aan', 'aan', 'aan', 'aan', 'aan', 'arial', '12')";

    overigens vraag ik me af of je niet beter 0 en 1 ipv 'aan' en 'uit' in je database kan stoppen. Maar dat is van later zorg.
  • Hartstikke bedankt marientje, het werkt nu perfect!
  • Nog een laatst vraagje: nu moet ik uit de tabel "settings" bij de row van de gebruiker "$userdata['username']" (een variabele gebruiker dus, het hangt af van wie ingelogd is welke row MySQL zal selecteren), één bepaald veld selecteren.

    Wat ik wil bereiken is namelijk, dat dus iedere gebruiker bijvoorbeeld de achtergrondskleur van de site voor hemzelf kan bepalen, en dus moet er de variabele $bgcolor aangemaakt worden, door deze uit de row van de desbetreffende gebruiker te halen.

    Tot nu toe heb ik dit:
    [code:1:29aeac6f4a]
    $query="SELECT * FROM settings WHERE usr='".$userdata['username']."' ";
    $bgcolor=mysql_query($query);
    [/code:1:29aeac6f4a]
    Het probleem hiervan is dat hij dan gelijk de [b:29aeac6f4a]hele[/b:29aeac6f4a] row pakt, en niet één specifiek veld uit die rij.

    Hoe kan ik dit wel doen?

    Bedankt!
  • [quote:3f8f4264e4="carlobernardini"]Hoe kan ik dit wel doen?[/quote:3f8f4264e4]Googlen naar 'tutorial SQL' en/of 'tutorial PHP MySQL' of gewoon de handleiding lezen.
  • [quote:c1734f9448="Remytje"][quote:c1734f9448="carlobernardini"]Hoe kan ik dit wel doen?[/quote:c1734f9448]Googlen naar 'tutorial SQL' en/of 'tutorial PHP MySQL' […][/quote:c1734f9448]
    Dat zit ik nu al 2 weken lang te doen :roll:
  • [quote:7fcc92c340="carlobernardini"]Dat zit ik nu al 2 weken lang te doen :roll:[/quote:7fcc92c340]

    Dan mogen wij ons serieus afvragen wat jij leest denk ik. :wink:

    Kijk bv hier eens naar. Staat de basis zowiezo wel in die je nu nodig hebt.
    http://phpfreakz.nl/artikelen.php?aid=19&print=1
  • In iedere tutorial die ik gelezen heb - ook dat artikel wat jij me net hebt gegeven - staat dat je dmv bijvoorbeeld SELECT * FROM settings WHERE usr='carlo' een bepaalde row kunt selecteren. Wat je dan krijgt is dus dit

    carlo | voorkeur1 | voorkeur2 | voorkeur3

    Maar ik wil juist één van die vier velden kunnen selecteren, niet die hele row. En dat kan ik dus helaas niet vinden, terwijl het volgens mij toch echt niet zo moeilijk kan zijn, toch??

    Kan iemand misschien een voorbeeldje geven a.j.b.?

    //EDIT:

    Laat maar, het is inmiddels al gelukt…
  • SELECT watikwilselectere FROM blabla……

    het * betekend dat je elke kolom wil selecteren.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.