MySQL, import Execl, CSV
Ik heb een excel 2003 bestand in een mysql database geimporteerd met PhpMyAdmin. Vanuit Excel opgeslagen als csv, in php geimporteerd als csv. Et voila. Alle velden staan er netjes in.
Maar mijn php code die eerder met enkele dummy variabelen die ik zelf had ingetypt in PHPMyAdmin, prima wekte, werkt niet op de geimporteerde velden. Gegevens worden niet gevonden e.d..
Als ik echter de gegevens uit zo'n veld zelf in typ in PHPMyadmin wordt het wel gevonden. Wat kan dit zijn?
bvd, Jan
laat even een stukkie code + dbstructuur zien, behalve mijzelf is niemand hier helderziend
Check op al dat soort narigheid.
In PHPMyAdmin staat alle data er netjes in, maar waar onderstaande code wel werkt als ik ik de id in het betreffende database veld intyp, werkt het niet als ik de code door het porgramma laat genereren, maar laat wegschrijven in een rij die eerder uit excel was geimporteerd. Ik snap er niets van.
$id = $_GET['id'];
$sql = "SELECT nummer_id, tmp1, tmp2 FROM deelnemers WHERE tmp3 = '$id'";
$resultaat = mysql_query($sql)
or die("Kan query niet uitvoeren: " . mysql_error());
if(mysql_num_rows($resultaat)>0)
{
$id = mysql_result($resultaat, 0, "nummer_id");
//echo "Nummer_id: ".$id."<br>";
$email = mysql_result($resultaat, 0, "tmp1");
//echo "Nummer_id: ".$email."<br>";
$ww = mysql_result($resultaat, 0, "tmp2");
//echo "Nummer_id: ".$ww."<br>";
}
else
{
echo "Bevestiging niet gelukt.<br><br>";
exit;
}
Jan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
if (isset ($_GET['id'])) {
if (ctype_digit ($_GET['id'])) {
$sql = "
SELECT nummer_id, tmp1, tmp2
FROM deelnemers
WHERE tmp3 = " . $_GET['id'];
if ($resultaat = mysql_query($sql)) {
if (mysql_num_rows ($resultaat) > 0) {
while ($row = mysql_fetch_assoc ($resultaat)) {
echo '<pre>';
print_r ($row);
echo '</pre>';
}
}
else {
echo '<p>Geen resultaten gevonden.</p>';
}
}
else {
trigger_error (mysql_error ());
echo '<pre>';
echo htmlentities (str_replace ("\t", '', $sql));
echo '</pre>';
}
}
}
?>
if (isset ($_GET['id'])) {
if (ctype_digit ($_GET['id'])) {
$sql = "
SELECT nummer_id, tmp1, tmp2
FROM deelnemers
WHERE tmp3 = " . $_GET['id'];
if ($resultaat = mysql_query($sql)) {
if (mysql_num_rows ($resultaat) > 0) {
while ($row = mysql_fetch_assoc ($resultaat)) {
echo '<pre>';
print_r ($row);
echo '</pre>';
}
}
else {
echo '<p>Geen resultaten gevonden.</p>';
}
}
else {
trigger_error (mysql_error ());
echo '<pre>';
echo htmlentities (str_replace ("\t", '', $sql));
echo '</pre>';
}
}
}
?>
je fout is dat je iets wil doen maar je hebt geen idee waar je mee bezig bent.
klinkt misschien hard, maar dan had je niet om kritiek moeten vragen van me. je moet vooraan beginnen
Jan bedankt voor je code, maar denk niet dat het mijn probleem oplost. Je gebruikt uiteindelijk dezelfde query en mysql_query, net als ik. M.i. zal de uitkomst hetzelfde zijn als mijn code.
Mijn (krakkemikkige code) werkt namelijk prima. Maar alleen zolang ik de database met de hand vul in PHPMyAdmin. Maar zodra ik dezelfde velden vul vanuit excel (met in PHPMyAdmin schijnbaar dezelfde inhoud) werkt het niet meer. Dat is mijn probleem op dit moment. (dat ik de code beter kan formuleren weet ik wel, zal ik zeker ook wel tijd aan spenderen, maar helpt mij nu niet met deze onverwachte tegenvaller).
Blijkbaar worden de geimporteerde rijen door PHPMyAdmin anders ingevoerd dan wanneer ze met de hand worden aangemaakt?
Jan
Met het tweede argument geeft je op het hoeveelste resultaat je op wilt halen, en daar staat bij jou een 0. Ik denk als je daar een 1 van maakt, dat je meer kans maakt.
Edit:
Oeps! Ik lees net op php.net:
The row number from the result that's being retrieved. Row numbers start at 0.
The row number from the result that's being retrieved. Row numbers start at 0.
Nog een idee: zet eens dit bovenin je code:
ik vraag me namelijk af of $_GET['id'] wel gevuld is en een relevante waarde bevat.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Hoe zit het met de error_reporting? Is die wel geactiveerd en op het hoogste niveau gezet? Anders wordt debuggen wel onnodig ingewikkeld...
Jan: dank je wel voor je uitleg. Toch denk ik niet het uitmaakt. Ook jij laat je 'if' afhangen van mysql_query > 0. Bij mijn probleem is ie 0, terwijl de gezochte waarde toch echt in het veld staat (te zien in PHPMyAdmin). En nogmaals als ik dan vervolgens dat veld met de hand overtyp in PHPMyAdmin, vindt de query hem wel.
De GET in mijn code werkt wel. (deze code wordt aangeroepen via een query_string met ?id=blabla erin).
Jan
Sorry ik bedoel van mysql_num_rows > 0
verder: heb je mijn voorbeeld ook werkelijk getest? Want stel dat je query 0 resultaten zou opleveren, dan kom je daar met mijn voorbeeld ook achter.
Ik ga ermee aan de slag.
suc6 ;-)
Dat betekent m.i. in elk geval dat het probleem toch niet zit bij de excel invoer, wat ik dacht, maar mogelijk toch bij de controle code van hierboven. Alhoewel mijn code nu werkt.
Ik heb het error niveau aangezet, en probeer het morgen weer vanaf mijn werk. Ik ben benieuwd.
Bedankt zover. Ik kom erop terug.
Jan
Ik roep de bovenstaande code dus aan met zoiets als: www.pagina.php?id=abc
Die id is eerder door een ander php script gegenereert en met:
$sql = "UPDATE deelnemers SET tmp1 = '".$emailadres."', tmp2 = '".$wachtwoord1."', tmp3 = '".$code."' WHERE nummer_id = $id LIMIT 1;";
in de database gezet. Ik heb gecheckt met PHPMyAdmin, de id staat er echt in.
Als ik dan de controle pagina aanroep (www.pagina.php?id=abc):
De id komt aan (laat ik uitprinten). Er is geen foutmelding. Maar de id wordt niet gevonden. De functie mysql_num_rows geeft dus dom weg 0 aan. Hij vindt de Id niet terwijl die tocht echt in de database staat. En nogmaals vanuit mijn huis werkt dit allemaal wel.
En als ik dezelfde id met de hand, vanuit PHPMyAdmin in tmp3 zet, werkt het wel... www.pagina.php?id=abc vindt dan de id wel. Ik snap dit niet.
Van kan hier de verklaring van zijn?
bvd, Jan
mod-edit::
Bumpen
Twee of meer keer achter elkaar in je eigen topic posten, voordat andere forumleden gereageerd hebben, heet "bumpen".
Omdat het opdringerig overkomt is bumpen pas na 24 uur toegestaan.
Bumpen kan een reden zijn voor de admins en mods om een topic te sluiten.
Gebruik het knopje om je tekst aan te passen indien nodig.
Twee of meer keer achter elkaar in je eigen topic posten, voordat andere forumleden gereageerd hebben, heet "bumpen".
Omdat het opdringerig overkomt is bumpen pas na 24 uur toegestaan.
Bumpen kan een reden zijn voor de admins en mods om een topic te sluiten.
Gebruik het knopje om je tekst aan te passen indien nodig.
Ik begin zo langzamerhand gek te worden. na testen blijkt dat PHP script (ook) niet goed wordt uitgevoerd.
Dit is de code, die ik al eerder gaf:
$id = $_GET['id'];
$sql = "SELECT nummer_id, tmp1, tmp2 FROM deelnemers WHERE tmp3 = '$id'";
$resultaat = mysql_query($sql)
or die("Kan query niet uitvoeren: " . mysql_error());
if(mysql_num_rows($resultaat)>0)
{
$id = mysql_result($resultaat, 0, "nummer_id");
$email = mysql_result($resultaat, 0, "tmp1");
$ww = mysql_result($resultaat, 0, "tmp2");
}
else
{
echo "Bevestiging niet gelukt.<br><br>";
exit;
}
meteen daarna volgt:
$sql = "UPDATE deelnemers SET emailadres = '".$email."', password = '".$ww."', datumregistratie = NOW(), datumlaatsteinlog = NOW(), aantalinlog = '1', tmp1 = '', tmp2 = '', tmp3 = '', tmpusername = '', tmppassword = '' WHERE nummer_id = $id LIMIT 1;";
$resultaat = mysql_query($sql)
or die("Kan registratie niet afmaken [005]" . mysql_error());
mysql_close($db);
En wat blijkt, de UPDATE wordt WEL uitgevoerd!
Nou breekt mijn klomp. Op de pagina in de browser wordt de "bevestiging niet gelukt" tekst afgedrukt. Daarna staat een exit. Dus einde script.
Maar vervolgens wordt toch de UPDATE query gewoon uitgevoerd (wat al niet kan), terwijl daarvoor de $id nodig is, die binnen de if statement staat, die niet wordt uitgevoerd...... Ik snap hier helemaal niets van.
Ik krijg het idee dat de proxyserver waar ik op mijn werk achter zit hier mee te maken heeft kan dat? Iemand enig idee?
Jan
Gewijzigd op 01/01/1970 01:00:00 door Jan