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

[PHP]vars schrijven naar MySQL

Japaveh
7 antwoorden
  • Ik ben wat aant experimenteren met Mysql. Ik wil met een script iemand laten kiezen tussen een frikadel en een kroket, de naam laten invullen, en dat samen met het ip en de tijd naar een database laten schrijven. mijn volledige code is nu als volgt:[code:1:639beb290f]
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <?php
    $_CONFIG["Username"] = 'consumptie'; // Gebruikersnaam
    $_CONFIG["Password"] = 'wiljewelwetenhe'; // Wachtwoord
    $_CONFIG["Host"] = 'localhost'; // Host
    $_CONFIG["Database"] = 'consumptie'; // Database

    $Verbinding = MySql_connect($_CONFIG["Host"], $_CONFIG["Username"], $_CONFIG["Password"]);
    $DbSelect = mysql_select_db($_CONFIG["Database"], $Verbinding);

    //**********************************************************************************
    if($Verbinding == false) // Verbinding is mislukt!
    { trigger_error("Kan geen verbinding maken met de database"); }

    if ($DbSelect == false)
    { trigger_error("Kan de database niet selecteren"); }

    //**********************************************************************************
    function postinfo() {
    $naam = $_GET['naam'];
    $ip = $_SERVER["REMOTE_ADDR"];
    $keuze = $_GET['keuze'];
    $tijd = date('Y-m-d H:i:s');

    $add_all = "INSERT INTO snack_11_uur ('','$naam','$ip','$keuze','$tijd',''";
    mysql_query($add_all, $Verbinding);
    }

    MySql_close($Verbinding);?>
    <body>


    <form method='get' action='consumptie.php<? //echo($PHP_SELF); ?>'>
    <table>
    <TR>
    <TD>Naam:</TD>
    <TD><input type="text" name="naam"></TD>
    </TR>
    <TR>
    <TD>Keuze:</TD>
    <TD>
    <select name="keuze">
    <option value="kroket">kroket</option>
    <option value="frikadel">frikadel</option>
    </select>
    </TD>
    </TR>
    <TR>
    <TD><input type="submit" onClick="postinfo()"></TD>
    </TR>
    <TR>
    </table>
    </form>
    </body>
    </html>
    [/code:1:639beb290f]De indeling in de DB is opt moment als volgt:[code:1:639beb290f]Veld Type Null Standaardwaarde
    id int(11) Nee
    naam varchar(50) Nee
    ip varchar(15) Nee
    keuze varchar(50) Nee
    tijd datetime Nee 0000-00-00 00:00:00


    Indexen:
    Sleutel naam Type Kardinaliteit Veld
    PRIMARY PRIMARY 0 id[/code:1:639beb290f]Mijn probleem is, dat er helemaal niets in de DB komt te staan. Wie helpt mij?
  • Dit script rammelt een beetje.

    Ten eerste is je inserquery niet volledig
    [code:1:df8a26470f]
    $add_all = "INSERT INTO snack_11_uur ('','$naam','$ip','$keuze','$tijd',''";
    [/code:1:df8a26470f]
    Wordt niet afgesloten met een ) en VALUES ontbreekt..

    Maar je gebruikt een functie om de query in de DB te stoppen die je met een javascript aanroept. Persoonlijk zou ik het als volgt doen:
    [code:1:df8a26470f]
    if (isset($_POST['naam']) && $_POST['naam'] != '' && isset($_POST['keuze'])) {
    $naam = mysql_escape_string($_POST['naam']);
    $ip = mysql_escape_string($_SERVER["REMOTE_ADDR"]);
    $keuze = mysql_escape_string($_POST['keuze']);

    $add_all = "INSERT INTO snack_11_uur VALUES ('','$naam','$ip','$keuze',NOW())";
    mysql_query($add_all, $Verbinding) or die (mysql_error());
    mysql_close($Verbinding);
    }
    ?>
    <body>


    <form method='post' action='consumptie.php'>
    <table>
    <TR>
    <TD>Naam:</TD>
    <TD><input type="text" name="naam"></TD>
    </TR>
    <TR>
    <TD>Keuze:</TD>
    <TD>
    <select name="keuze">
    <option value="kroket">kroket</option>
    <option value="frikadel">frikadel</option>
    </select>
    </TD>
    </TR>
    <TR>
    <TD><input type="submit" value="verzenden"></TD>
    </TR>
    <TR>
    </table>
    </form>
    </body>
    </html>
    [/code:1:df8a26470f]
    [list:df8a26470f]
    [*:df8a26470f]De query wordt nu pas in de DB gezet als de variabelen naam en keuze echt geset zijn en bestaan. Bovendien mag de naam niet leeg zijn
    [*:df8a26470f]Je gebruikt de PHP functie date om de datum te bepalen. Aangezien je in de DB gebruik maakt van datetime moet je NOW() gebruiken die de huidige datum neemt
    [*:df8a26470f]Toeveogen van or die (mysql_error()); Zo kun je zien je query wordt uitgevoerd en wat er mis gaat.
    [*:df8a26470f]Gebruik mysql_escape_string om SQL injection te beperken.
    [*:df8a26470f] Geen Javascript meer nodig.
    [*:df8a26470f] Gebruik POST ivm GET variabelen aangezien je anders de variabelen in de URL krijgt en dat in dit geval niet wenselijk is
    [*:df8a26470f] Gebruik alleen kleine letters voor functies.
    [/list:u:df8a26470f]
    Een belangrijke debugtip is het echoen van de $add_all query en de uitput daarvan te pasten in PHPmyadmin. Zo kun je zien of je ook fouten gemaakt hebt in je query (zoals een vergeten haakje)

    Disclaimer: Het kan zijn dat de code niet direct werkt aangezienik nu zo niet kan checken op parse errors.
  • ik was er zelf ok al uitgekomen, maar nu werkt het nog beter. dank voor de hulp.

    Hoe kan ik laten tellen hoeveel kroketten en frikadellen er zijn besteld? zowel samen, als los van elkaar? phpMyAdmin gaf me wel de query[code:1:a742956415]SELECT `keuze`
    FROM `$tabel`
    WHERE `keuze` LIKE CONVERT( _utf8 'kroket'
    USING latin1 )
    COLLATE latin1_swedish_ci
    LIMIT 0 , 30[/code:1:a742956415], maar hoe tel ik ze vervolgens?

    en hoe kan ik snel checken op er al eens op dezelfde naam en/of ip is besteld?
  • [quote:7b8677b516="ANNErd"]ik was er zelf ok al uitgekomen, maar nu werkt het nog beter. dank voor de hulp.

    Hoe kan ik laten tellen hoeveel kroketten en frikadellen er zijn besteld? zowel samen, als los van elkaar? phpMyAdmin gaf me wel de query[/quote:7b8677b516]
    [code:1:7b8677b516]
    SELECT keuze, COUNT(keuze) FROM tabel GROUP BY keuze
    [/code:1:7b8677b516]

    Wat je doet is dat je keuze en de count(keuze), dus de totale hoeveelheid van die keuze afdrukt middels een GROUP BY.

    [quote:7b8677b516]
    en hoe kan ik snel checken op er al eens op dezelfde naam en/of ip is besteld?[/quote:7b8677b516]
    [code:1:7b8677b516]
    SELECT COUNT(*) as tablesize FROM tabel WHERE naam = 'geescapetenaam'
    [/code:1:7b8677b516]
    En als die count(*) groter is dan 0, dan komt ie vaker voor. Hetzelfde kun je doen voor het IPadres
  • sorry. ik check ze in phpMyAdmin en het werkt prima, maar ik krijg ze er allebei niet uit in een php document…
  • Dat kun je zo doen:

    [code:1:2bbec3afda]
    $querystring = "SELECT a, b, c, …";
    $query = mysql_query($querystring) or die (mysql_error());

    while ($result = mysql_fetch_array($query)) {
    print $result['a'] . $result['b'] . $result['c'];
    }

    [/code:1:2bbec3afda]

    Waarbij je voor en in de whileloop allerlei dingen kunt toevoegen, zoals table en td, tr, th elementen. Op die maneir kun je de output van je query op je eigen manier weergeven.
  • ik doe dus wat jij zegt, namelijk:[code:1:9d1c6024ac]$som = 'SELECT keuze, COUNT(keuze) FROM snack_11_uur GROUP BY keuze LIMIT 0, 30';
    $query = mysql_query($som) or die (mysql_error());
    $result = mysql_fetch_array($query);
    while ($result = mysql_fetch_array($query)) {
    print $result['keuze'] . " " . $result['COUNT(keuze)'];
    } [/code:1:9d1c6024ac] maar hoe gooit er maar 1 uit :evil: . Wat doe ik nu fout, ik zie het echt niet meer…

Beantwoord deze vraag

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