Victor Subervi wrote: > On Tue, Dec 29, 2009 at 9:33 AM, Steve Holden <st...@holdenweb.com > <mailto:st...@holdenweb.com>> wrote: > > That's a bit like being told you have to produce something green, and > then when you do, being told "no, not that green, a light green". So you > produce something a lighter gree and then being told "no, a slightly > redder green". And so on. > > In other words, you aren't giving us the whole picture here, and without > the whole picture you will only ever get bits of the answer. > > > Later on I give you "the whole picture"...which you summarily toss in > the garbage can. What am I supposed to do with that?? > That isn't "the whole picture", that's "the Python soup I produced to query the SQL soup I produced because I thought it might answer my problem".
> > > > # print 'XXX', types[x] > > elif types[x][0:3] == 'set': > > for f in field: > > print '<td>AAA%s</td>\n' % (field) > > else: > > print 'YYY' > > > > 1) If I uncomment the commented line, it throws this error: > > > What happens if you *don't* uncomment the commented line? > > > As I mentioned, it prints BOTH the AAA and the YYY lines! The AAA is > printed with something like this: > AAASet([purple:223344]) > Try moving the "else" so it's associated with the "if ... elif" rather than the "for". It's currently indented one level too far. > > > [Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] File > > "/var/www/html/angrynates.com/cart/enterProducts2.py > <http://angrynates.com/cart/enterProducts2.py> > > <http://angrynates.com/cart/enterProducts2.py>", line 138, referer: > > http://angrynates.com/cart/enterProducts.py > > [Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] elif > > types[x][0:3] == 'set':, referer: > > http://angrynates.com/cart/enterProducts.py > > [Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] ^, > > referer: http://angrynates.com/cart/enterProducts.py > > [Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] SyntaxError: > > invalid syntax, referer: http://angrynates.com/cart/enterProducts.py > > [Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] > Premature end > > of script headers: enterProducts2.py, referer: > > http://angrynates.com/cart/enterProducts.py > > > I am presuming that this is copied from an Apache error log, though you > don't bother to say so. > > > No. I just copied and pasted stuff from a previous post. I did that > because I've noticed when someone posts something irrelevant, the > substance of my posts sometimes gets buried. I should have edited this > garbage out. > > > The issue here is that you can't just stick print statements in anywhere > you like. Consider the following Python: > > if a == 3: > print "A is 3" > print "Debugging" > elif a == 4: > print "A is 4" > else: > print "A is neither 3 nor 4" > > If you comment out the 'print "Debugging"' line you have a perfectly > acceptable program. If you don't then you have something that is close > to Python, but not close enough for the interpreter to be able to > compile it. > > > Duh. I might not be too sharp, but give me a little more credit than > that, Steve. Come on. > So you didn't need any help to spot this problem? > > What's happening with your (CGI?) program is that the syntax error you > have induced by inserting a random print statement causes an error > message to be produced instead of your program's output; this doesn't > look like HTTP headers. So the web server complains that your program > has produced output that shouldn't be sent to any self-respecting > browser. > > > Perhaps. > > > I further presume (though again I don't believe you bother to report it > anywhere) that you see an "Error 500" or similar message in your web > browser when you try and access the web page. > > > Yes. I believe that's it. > > > > 2) AAA prints out before the following fields: > > AAASet(['Extra-small']) > > AAASet(['purple:50404D']) > > > And the above is the answer to your previous question. This makes me > think you really rushed through this. You are a very helpful person, but > please either take the time necessary or don't answer. That is, respond > only when you have the time to devote to giving a good and thoughtful > answer. It's evident you didn't do that here...and you're blaming me for > it. Wrong! > OK, I'll not answer. regards Steve > > > > > 3) YYY *also* prints out twice!! > > > > Here's the complete code once again: > > > [complete code snipped] > > > > TIA, > > beno > > > Sorry, I don't intend to read all that code when the error you are > reporting is in fact a clear demonstration that you need to further > understand the principles of both Python and the web before you continue > on your journey. > > > Again, I know I'm really slow when it comes to this material. But I > didn't start hacking (and it is hacking) Python code yesterday. I'm > almost ashamed to admit it, but I've been at it 10 years. Again, I might > be slow, but I don't think that gives you the right to tell me to go > back to kindergarten. Help me out here. Or maybe somebody else will. > > Let me restate the problem: > > I'm using python 2.4.3 which apparently requires that I import Set: > from sets import Set > I've done this. In another script I successfully manipulated MySQL sets > by so doing. Here's the code snippet from the script where I was able to > call the elements in a for loop: > > if isinstance(colValue[0], (str, int, float, long, complex, > unicode, list, buffer, xrange, tuple)): > pass > else: > try: > html = "<b>%s</b>: <select name='%s'>" % (col, col) > notSet = 0 > for itm in colValue[0]: > try: > color, number = itm.split(':') > html += "<option name='%s'>%s</option>" % (itm, color) > except: > html += "<option name='%s'>%s</option>" % (itm, itm) > > However, when I try that in my current script, the script fails. It > throws no error, but rather just quits printing to the screen. Here's > the code snippet: > > elif types[x][0:3] == 'set': > for f in field: > print '<td>%s</td>\n' % (field) > else: > print '<td>%s</td>\n' % (field) > > Notice that I can slice to determine if it's a set (I've printed > something after that call to be sure). But once I try to loop through > the set it quits printing to screen. > > Here's the full code again: > > #! /usr/bin/python > > import MySQLdb > import cgi > import sys,os > sys.path.append(os.getcwd()) > from login import login > from sets import Set > > def enterProducts2(): > print '''Content-type: text/html > > <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> > <html> > <head> > <title></title> > </head> > <body> > <form enctype='multipart/form-data' action='enterProducts3.py' > method='post'> > ''' > form = cgi.FieldStorage() > store = form.getfirst('store') > print "<input type='hidden' name='store' value='%s' />" % store > user, passwd, db, host = login() > count = 0 > count2 = 0 > db = MySQLdb.connect(host, user, passwd, db) > cursor = db.cursor() > cursor.execute('select ID from %s;' % store) > test = cursor.fetchall() > if len(test) > 0: > cursor.execute('show columns from %s;' % store) > colNames = [itm[0] for itm in cursor] > types = [itm[1] for itm in cursor] > colNamesWithCommas = ', '.join(colNames) > try: > cursor.execute('select ID from %s;' % store) > ids = cursor.fetchall() > if store == 'prescriptions': > cursor.execute('show tables like "%PersonalData";') > personalDataTables = [itm[0] for itm in cursor] > else: > personalDataTables = [] > print '<h1>%s</h1>\n<table><tr><td>\n' % (store[0].upper() + > store[1:]) > print '<h3>What do you want to do?</h3>\n<table><tr><td>\n' > print "<input type=radio name='whatDo' value='insert' />Add<br />\n" > print "<input type=radio name='whatDo' value='update' />Update<br > />\n" > print "<input type=radio name='whatDo' value='delete' />Delete<br > />\n" > print '</td></tr></table>\n<br /><br />\n' > print '<table border=1>\n' > print '<tr>\n' > print '<th align=center><b>Check</b></th>\n' > i = 0 > while i < len(colNames): > if i == 0: # This is the ID field > print '<th align=center><b>', colNames[i], '</b></th>\n' > try: > cursor.execute('describe relationships%s;' % > (store[0].upper() + store[1:])) > relationshipsDescription = cursor.fetchall() > cursor.execute('select * from relationships%s where > %sID="%s";' % (store[0].upper() + store[1:], store[0].upper() + > store[1:], ids[0][0])) > relationshipFields = cursor.fetchone() > j = 0 > for relDescrip in relationshipsDescription: > if j != 0: # Skip the store ID > print '<th><b>%s Name</b></th>\n' % (relDescrip[0][:-2]) > j += 1 > except: > pass # There are no relationships > else: > print '<th align=center><b>', colNames[i], '</b></th>\n' > i += 1 > print '</tr>\n' > j = 0 > z = 3 > a = 0 > for id in ids: > a += 1 > j += 1 > for d in id: > bg = ['#ffffff', '#d2d2d2', '#F6E5DF', '#EAF8D5'] > z += 1 > print '<tr bgcolor="%s">' % bg[z % 4] > cursor.execute('select * from %s where ID=%s;' % (store, str(d))) > col_fields = cursor.fetchall() > col_fields = col_fields[0] > tmp = [] > for field in col_fields: > tmp.append(field) > col_fields = [] > for field in tmp: > col_fields.append(field) > i = 0 > x = 0 > y = 0 > w = 0 > for field in col_fields: > if colNames[x] == 'SKU': > sku = field > if colNames[x][:3] == 'pic': > y += 1 > w += 1 > print '<td><input type="hidden" name="%s" />\n' % str(x) > # im = Image.open(getpic) > # width, height = im.size() > # for infile in sys.argv[1:]: > # outfile = os.path.splitext(infile)[0] + "_thumb.jpg" > # if infile != outfile: > # try: > # im = Image.open(infile) > # im.thumbnail((128, (width/128)*height), > Image.ANTIALIAS) > # im.save(outfile, "JPEG") > # except IOError: > # print "cannot create thumbnail for ", infile > # print '<img src="%s"><br /><br /></td>\n' % (outfile) > print '<img src="getpic.py?store=%s&pic=%d&id=%s" > width="100"></td>\n' % (store, w-1, ids[0][0]) > count2 += 1 > else: > if x == 0: > # This is the ID field > d = id[0] > check = 'check' + str(d) > i += 1 > print '<td><input type="checkbox" name="', check, '" > value="', field, '" /></td>\n' > print '<td>%s</td>\n' % (field) > if personalDataTables != []: > i = 0 > for relField in relationshipFields: > if i != 0: # The first value is the same as d > sql = 'select FirstName, LastName from > %sPersonalData where ID="%s";' % > (relationshipsDescription[i][0][:-2].lower(), relField) > cursor.execute(sql) > names = cursor.fetchone() > print '<td>%s %s</td>\n' % (names[0], names[1]) > i += 1 > elif types[x][0:3] == 'set': > for f in field: > print '<td>%s</td>\n' % (field) > else: > if (isinstance(field, str)) and (len(field) > 60): > print '<td>%s</td>\n' % (field[:60] + '...') > else: > print '<td>%s</td>\n' % (field) > x += 1 > print '</tr><tr>\n' > print '<td align=center colspan=', len(colNames) + 1, '>\n' > print '</td></tr></table>\n' > print '<input type="hidden" name="count" value="%s" />\n' % count2 > print '<input type="submit" value=" Send " />\n' > except: > print 'There is no data yet. Please add a product.\n<br /><br />' > print "<input type='hidden' name='whatDo' value='insert' />\n" > print '<input type="submit" value=" Add " />\n' > else: > print 'There is no data yet. Please add a product.\n<br /><br />' > print "<input type='hidden' name='whatDo' value='insert' />\n" > print '<input type="submit" value=" Add " />\n' > print ''' > </form> > </body> > </html> > ''' > cursor.close() > > enterProducts2() > -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon is coming! Atlanta, Feb 2010 http://us.pycon.org/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/ -- http://mail.python.org/mailman/listinfo/python-list